File: pr107000.f90

package info (click to toggle)
gcc-arm-none-eabi 15%3A14.2.rel1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,099,328 kB
  • sloc: cpp: 3,627,108; ansic: 2,571,498; ada: 834,230; f90: 235,082; makefile: 79,231; asm: 74,984; xml: 51,692; exp: 39,736; sh: 33,298; objc: 15,629; python: 15,069; fortran: 14,429; pascal: 7,003; awk: 5,070; perl: 3,106; ml: 285; lisp: 253; lex: 204; haskell: 135
file content (50 lines) | stat: -rw-r--r-- 3,542 bytes parent folder | download
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