! { dg-do run } ! PR fortran/108010 - ICE in reduce_unary, reduce_binary_aa ! Contributed by G.Steinmetz program p implicit none print *, + [integer :: [real ::]] print *, - [integer :: [real ::]] print *, 1 + [integer :: [real ::]] print *, 1 - [integer :: [real ::]] print *, 2 * [integer :: [real ::]] print *, - [real :: [real ::], 2] print *, + [integer :: [real ::], 2] print *, - [integer :: [real ::], 2] print *, 1 + [integer :: [real ::], 2] print *, 1 - [integer :: [real ::], 2] print *, 2 * [integer :: [real ::], 2] print *, [integer :: [real ::]] + [integer :: [real ::]] print *, [integer :: [real ::]] - [integer :: [real ::]] print *, [integer :: [real ::]] * [integer :: [real ::]] print *, [integer :: [real ::], 2] + [real :: [real ::], 3] print *, [integer :: [real ::], 2] - [real :: [real ::], 3] print *, [integer :: [real ::], 2] * [real :: [real ::], 3] ! Validate type of resulting arrays if (.not. is_int ([integer :: [real ::]] )) stop 1 if (.not. is_int ([integer :: [real ::]] + [integer :: [real ::]])) stop 2 if (.not. is_real([real :: [integer ::]] )) stop 3 if (.not. is_real([real :: [integer ::]] + [real :: [integer ::]])) stop 4 if (.not. is_real([real :: [integer ::]] + [integer :: [real ::]])) stop 5 if (.not. is_real([integer :: [real ::]] + [real :: [integer ::]])) stop 6 contains logical function is_int (x) class(*) :: x(:) select type (x) type is (integer) is_int = .true. class default is_int = .false. end select end function is_int logical function is_real (x) class(*) :: x(:) select type (x) type is (real) is_real = .true. class default is_real = .false. end select end function is_real end