! { dg-do run } | |
! { dg-options "-fdec-structure -finit-derived -finit-local-zero" } | |
! | |
! Test a UNION with explicit initialization and -finit-derived. | |
! | |
subroutine sub | |
structure /s2/ | |
integer(4) :: i = 8 | |
union ! U7 | |
map | |
integer(4) :: x = 1600 | |
integer(4) :: y = 1800 | |
end map | |
map | |
integer(2) a, b, c, d, e, f, g, h | |
end map | |
end union | |
end structure | |
record /s2/ r2 | |
! Initialized unions | |
if ( r2.i .ne. 8 ) then | |
print *, 'structure init' | |
STOP 1 | |
endif | |
! Explicit initializations | |
if ( r2.x .ne. 1600 .or. r2.y .ne. 1800) then | |
r2.x = r2.y | |
print *, 'union explicit init' | |
STOP 2 | |
endif | |
! Initialization from -finit-derived | |
if ( r2.h .ne. 0 ) then | |
r2.h = 135 | |
print *, 'union default init' | |
STOP 3 | |
endif | |
end subroutine | |
! Initialization expressions | |
structure /s3/ | |
integer(4) :: i = 8 | |
union ! U7 | |
map | |
integer(4) :: x = 1600 | |
integer(4) :: y = 1800 | |
end map | |
map | |
integer(2) a, b, c, d, e | |
end map | |
end union | |
end structure | |
record /s3/ r3 | |
! Initialized unions | |
if ( r3.i .ne. 8 ) then | |
print *, 'structure init' | |
STOP 4 | |
endif | |
! Explicit initializations | |
if ( r3.x .ne. 1600 .or. r3.y .ne. 1800) then | |
r3.x = r3.y | |
print *, 'union explicit init' | |
STOP 5 | |
endif | |
! Initialization from -finit-derived | |
if ( r3.e .ne. 0 ) then | |
r3.e = 135 | |
print *, 'union default init' | |
STOP 6 | |
endif | |
end |