! { dg-do run } ! { dg-additional-options "-fdump-tree-original" } ! PR fortran/100950 - ICE in output_constructor_regular_field, at varasm.c:5514 program p character(8), parameter :: u = "123" character(8) :: x = "", s character(2) :: w(2) = [character(len(x(3:4))) :: 'a','b' ] character(*), parameter :: y(*) = [character(len(u(3:4))) :: 'a','b' ] character(*), parameter :: z(*) = [character(len(x(3:4))) :: 'a','b' ] character(*), parameter :: t(*) = [character(len(x( :2))) :: 'a','b' ] character(*), parameter :: v(*) = [character(len(x(7: ))) :: 'a','b' ] type t_ character(len=5) :: s character(len=8) :: t(4) character(len=8), pointer :: u(:) character(len=:), allocatable :: str character(len=:), allocatable :: str2(:) end type t_ type(t_) :: q, r(1) integer, parameter :: lq = len (q%s(3:4)), lr = len (r%s(3:4)) integer, parameter :: l1 = len (q %t(1)(3:4)) integer, parameter :: l2 = len (q %t(:)(3:4)) integer, parameter :: l3 = len (q %str (3:4)) integer, parameter :: l4 = len (r(:)%t(1)(3:4)) integer, parameter :: l5 = len (r(1)%t(:)(3:4)) integer, parameter :: l6 = len (r(1)%str (3:4)) integer, parameter :: l7 = len (r(1)%str2(1)(3:4)) integer, parameter :: l8 = len (r(1)%str2(:)(3:4)) if (len (y) /= 2) stop 1 if (len (z) /= 2) stop 2 if (any (w /= y)) stop 3 if (len ([character(len(u(3:4))) :: 'a','b' ]) /= 2) stop 4 if (len ([character(len(x(3:4))) :: 'a','b' ]) /= 2) stop 5 if (any ([character(len(x(3:4))) :: 'a','b' ] /= y)) stop 6 write(s,*) [character(len(x(3:4))) :: 'a','b' ] if (s /= " a b ") stop 7 if (len (t) /= 2) stop 8 if (len (v) /= 2) stop 9 if (lq /= 2 .or. lr /= 2) stop 10 if (l1 /= 2 .or. l2 /= 2 .or. l4 /= 2 .or. l5 /= 2) stop 11 if (l3 /= 2 .or. l6 /= 2 .or. l7 /= 2 .or. l8 /= 2) stop 12 block integer, parameter :: l9 = len (r(1)%u(:)(3:4)) if (l9 /= 2) stop 13 end block call sub (42, "abcde") contains subroutine sub (m, c) integer, intent(in) :: m character(len=*), intent(in) :: c character(len=m) :: p, o(3) integer, parameter :: l10 = len (p(6:7)) integer, parameter :: l11 = len (o(:)(6:7)) integer, parameter :: l12 = len (c(2:3)) if (l10 /= 2 .or. l11 /= 2 .or. l12 /= 2) stop 14 end subroutine sub end ! { dg-final { scan-tree-dump-times "_gfortran_stop_numeric" 2 "original" } } ! { dg-final { scan-tree-dump "_gfortran_stop_numeric \\(3, 0\\);" "original" } } ! { dg-final { scan-tree-dump "_gfortran_stop_numeric \\(7, 0\\);" "original" } }