blob: 689628c66c543e8c433e4e83b36b024c2d27345b [file] [log] [blame]
! { dg-do run }
! { dg-options "-fdec-structure" }
!
! Test whether union backend declarations are corrently _not_ copied when they
! are not in fact equal. The structure defined in sub() is seen later, but
! where siz has a different value.
!
subroutine aborts (s)
character(*), intent(in) :: s
print *, s
STOP 1
end subroutine
subroutine sub ()
integer, parameter :: siz = 1024
structure /s6/
union ! U0
map ! M0
integer ibuf(siz)
end map
map ! M1
character(8) cbuf(siz)
end map
map ! M2
real rbuf(siz)
end map
end union
end structure
record /s6/ r6
r6.ibuf(1) = int(z'badbeef')
r6.ibuf(2) = int(z'badbeef')
end subroutine
! Repeat definition from subroutine sub with different size parameter.
! If the structure definition is copied here the stack may get messed up.
integer, parameter :: siz = 65536
structure /s6/
union ! U12
map
integer ibuf(siz)
end map
map
character(8) cbuf(siz)
end map
map
real rbuf(siz)
end map
end union
end structure
record /s6/ r6
integer :: r6_canary = 0
! Copied type declaration - this should not cause problems
i = 1
do while (i < siz)
r6.ibuf(i) = int(z'badbeef')
i = i + 1
end do
if ( r6_canary .ne. 0 ) then
call aborts ('copied decls: overflow')
endif
end