1! { dg-do compile }
2! PR fortran/67805
3! Original code contributed by Gerhard Steinmetz
4! gerhard dot steinmetz dot fortran at t-online dot de
5!
6subroutine p
7   integer, parameter :: n = 1
8   integer, parameter :: m(3) = [1, 2, 3]
9   character(len=1) s(2)
10   s = [character((m(1))) :: 'x', 'y']    ! OK.
11   s = [character(m(1)) :: 'x', 'y']      ! OK.
12   s = [character(m) :: 'x', 'y']         ! { dg-error "INTEGER expression expected" }
13
14   ! The next line should case an error, but causes an ICE.
15   s = [character(m(2:3)) :: 'x', 'y']    ! { dg-error "INTEGER expression expected" }
16
17   call foo(s)
18   s = [character('') :: 'x', 'y']        ! { dg-error "INTEGER expression expected" }
19   s = [character(['']) :: 'x', 'y']      ! { dg-error "INTEGER expression expected" }
20   s = [character([.true.]) :: 'x', 'y']  ! { dg-error "INTEGER expression expected" }
21   s = [character([.false.]) :: 'x', 'y'] ! { dg-error "INTEGER expression expected" }
22   s = [character([1.]) :: 'x', 'y']      ! { dg-error "INTEGER expression expected" }
23   s = [character([1d1]) :: 'x', 'y']     ! { dg-error "INTEGER expression expected" }
24   s = [character([(0.,1.)]) :: 'x', 'y'] ! { dg-error "INTEGER expression expected" }
25   s = [character([null()]) :: 'x', 'y']  ! { dg-error "INTEGER expression expected" }
26   s =  [character(null()) :: 'x', 'y']   ! { dg-error "INTEGER expression expected" }
27   call foo(s)
28end subroutine p
29
30subroutine q
31   print *, '1: ', [character(.true.) :: 'x', 'y']  ! { dg-error "INTEGER expression expected" }
32   print *, '2: ', [character(.false.) :: 'x', 'y'] ! { dg-error "INTEGER expression expected" }
33   print *, '3: ', [character(1.) :: 'x', 'y']      ! { dg-error "INTEGER expression expected" }
34   print *, '4: ', [character(1d1) :: 'x', 'y']     ! { dg-error "INTEGER expression expected" }
35   print *, '5: ', [character((0.,1.)) :: 'x', 'y'] ! { dg-error "INTEGER expression expected" }
36   print *, '6: ', [character(null()) :: 'x', 'y']  ! { dg-error "INTEGER expression expected" }.
37end subroutine q
38