c: Fix up pointer types to may_alias structures [PR114493]
[official-gcc.git] / gcc / testsuite / gfortran.dg / pr100950.f90
bloba19409c250795d069ac63bb20a5f0bbfc5823cb6
1 ! { dg-do run }
2 ! { dg-additional-options "-fdump-tree-original" }
3 ! PR fortran/100950 - ICE in output_constructor_regular_field, at varasm.c:5514
5 program p
6 character(8), parameter :: u = "123"
7 character(8) :: x = "", s
8 character(2) :: w(2) = [character(len(x(3:4))) :: 'a','b' ]
9 character(*), parameter :: y(*) = [character(len(u(3:4))) :: 'a','b' ]
10 character(*), parameter :: z(*) = [character(len(x(3:4))) :: 'a','b' ]
11 character(*), parameter :: t(*) = [character(len(x( :2))) :: 'a','b' ]
12 character(*), parameter :: v(*) = [character(len(x(7: ))) :: 'a','b' ]
13 type t_
14 character(len=5) :: s
15 character(len=8) :: t(4)
16 character(len=8), pointer :: u(:)
17 character(len=:), allocatable :: str
18 character(len=:), allocatable :: str2(:)
19 end type t_
20 type(t_) :: q, r(1)
21 integer, parameter :: lq = len (q%s(3:4)), lr = len (r%s(3:4))
22 integer, parameter :: l1 = len (q %t(1)(3:4))
23 integer, parameter :: l2 = len (q %t(:)(3:4))
24 integer, parameter :: l3 = len (q %str (3:4))
25 integer, parameter :: l4 = len (r(:)%t(1)(3:4))
26 integer, parameter :: l5 = len (r(1)%t(:)(3:4))
27 integer, parameter :: l6 = len (r(1)%str (3:4))
28 integer, parameter :: l7 = len (r(1)%str2(1)(3:4))
29 integer, parameter :: l8 = len (r(1)%str2(:)(3:4))
31 if (len (y) /= 2) stop 1
32 if (len (z) /= 2) stop 2
33 if (any (w /= y)) stop 3
34 if (len ([character(len(u(3:4))) :: 'a','b' ]) /= 2) stop 4
35 if (len ([character(len(x(3:4))) :: 'a','b' ]) /= 2) stop 5
36 if (any ([character(len(x(3:4))) :: 'a','b' ] /= y)) stop 6
37 write(s,*) [character(len(x(3:4))) :: 'a','b' ]
38 if (s /= " a b ") stop 7
39 if (len (t) /= 2) stop 8
40 if (len (v) /= 2) stop 9
41 if (lq /= 2 .or. lr /= 2) stop 10
42 if (l1 /= 2 .or. l2 /= 2 .or. l4 /= 2 .or. l5 /= 2) stop 11
43 if (l3 /= 2 .or. l6 /= 2 .or. l7 /= 2 .or. l8 /= 2) stop 12
45 block
46 integer, parameter :: l9 = len (r(1)%u(:)(3:4))
47 if (l9 /= 2) stop 13
48 end block
50 call sub (42, "abcde")
51 contains
52 subroutine sub (m, c)
53 integer, intent(in) :: m
54 character(len=*), intent(in) :: c
55 character(len=m) :: p, o(3)
56 integer, parameter :: l10 = len (p(6:7))
57 integer, parameter :: l11 = len (o(:)(6:7))
58 integer, parameter :: l12 = len (c(2:3))
59 if (l10 /= 2 .or. l11 /= 2 .or. l12 /= 2) stop 14
60 end subroutine sub
61 end
63 ! { dg-final { scan-tree-dump-times "_gfortran_stop_numeric" 2 "original" } }
64 ! { dg-final { scan-tree-dump "_gfortran_stop_numeric \\(3, 0\\);" "original" } }
65 ! { dg-final { scan-tree-dump "_gfortran_stop_numeric \\(7, 0\\);" "original" } }