blob: a19409c250795d069ac63bb20a5f0bbfc5823cb6 [file] [log] [blame]
! { 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" } }