summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gfortran.dg/pr107000.f90
blob: 30289078c575700abd7bcb68ef10bc938086afa2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
! { dg-do compile }
! PR fortran/107000 - ICE in gfc_real2complex, reduce_unary, reduce_binary_*
! Contributed by G.Steinmetz

program p
  real    :: y(1)
  complex :: x(1)
  x = (1.0, 2.0) * [real :: -'1']    ! { dg-error "Operand of unary numeric operator" }
  x = (1.0, 2.0) * [complex :: +'1'] ! { dg-error "Operand of unary numeric operator" }
  x = [complex :: -'1'] * (1.0, 2.0) ! { dg-error "Operand of unary numeric operator" }
  y = [complex :: -'1'] * 2          ! { dg-error "Operand of unary numeric operator" }
  y = 2 * [complex :: -'1']          ! { dg-error "Operand of unary numeric operator" }
  y = 2 * [complex :: -(.true.)]     ! { dg-error "Operand of unary numeric operator" }
  y = [complex :: -(.true.)] * 2     ! { dg-error "Operand of unary numeric operator" }
  print *, - [real ::  -'1' ]        ! { dg-error "Operand of unary numeric operator" }
  print *, - [real :: [-'1']]        ! { dg-error "Operand of unary numeric operator" }
  print *, - [real ::  +(.true.) ]   ! { dg-error "Operand of unary numeric operator" }
  print *, - [real :: [+(.true.)]]   ! { dg-error "Operand of unary numeric operator" }
  print *, 2 * [real ::  -'1' ]      ! { dg-error "Operand of unary numeric operator" }
  print *, 2 * [real :: (-'1')]      ! { dg-error "Operand of unary numeric operator" }
  print *, [real ::  -'1' ] * 2      ! { dg-error "Operand of unary numeric operator" }
  print *, [real :: (-'1')] * 2      ! { dg-error "Operand of unary numeric operator" }
  print *, 2 * [integer :: -('1')]   ! { dg-error "Operand of unary numeric operator" }
  print *, [integer :: -('1')] * 2   ! { dg-error "Operand of unary numeric operator" }
  print *, 2 * [real :: 0, (-'1')]   ! { dg-error "Operand of unary numeric operator" }
  print *, [real :: 0, (-'1')] * 2   ! { dg-error "Operand of unary numeric operator" }
  print *, 2 * [real :: 0, -'1']     ! { dg-error "Operand of unary numeric operator" }
  print *, [real :: 0, -'1'] * 2     ! { dg-error "Operand of unary numeric operator" }
  print *, 2 * [real :: 0, 1+'1']    ! { dg-error "Operands of binary numeric operator" }
  print *, [real :: 0, 1+'1'] * 2    ! { dg-error "Operands of binary numeric operator" }
  print *, [real :: 1, +(.true.)]    ! { dg-error "Operand of unary numeric operator" }
  print *, [real :: 1, -(.true.)]    ! { dg-error "Operand of unary numeric operator" }
  print *, 2 * [real :: 1, +(.true.)]      ! { dg-error "Operand of unary numeric operator" }
  print *, [real :: 1, +(.true.)] * 2      ! { dg-error "Operand of unary numeric operator" }
  print *, [1, 2] * [real :: 1, +(.true.)] ! { dg-error "Operand of unary numeric operator" }
  print *, [real :: 1, +(.true.)] * [1, 2] ! { dg-error "Operand of unary numeric operator" }
  print *, [real :: 1, 2] * [real :: 1, +(.true.)] ! { dg-error "Operand of unary numeric operator" }
  print *, [real :: 1, +(.true.)] * [real :: 1, 2] ! { dg-error "Operand of unary numeric operator" }
  print *, [real :: 0, -'1'] * [real :: 1, +(+(.true.))] ! { dg-error "Operand of unary numeric operator" }
  print *, [real :: 1, [(+(.true.))]] * [real :: 0, [(-'1')]] ! { dg-error "Operand of unary numeric operator" }

  ! Legal:
  print *, 2 * [real :: 1, [2], 3]
  print *, [real :: 1, [2], 3] * 2
  print *, [real :: 1, [2], 3] * [real :: 1, [2], 3]
  print *, [real :: 1, [2], 3] * [integer :: 1, [2], 3]
  print *, [real :: 1, [2], 3] * [1, [2], 3]
  print *, [real :: 1,  huge(2.0)] * [real :: 1,  real(1.0)]
  print *, [real :: 1, -(huge(2.0))] * [real :: 1, +(real(1))]
end