! { dg-do run } ! { dg-options "-fdec-structure" } ! ! Test basic UNION implementation. ! subroutine aborts (s) character(*), intent(in) :: s print *, s call abort() end subroutine ! Empty union structure /s0/ union ! U0 map ! M0 end map map ! M1 end map end union end structure ! Basic unions structure /s1/ union ! U1 map ! M2 integer(4) a end map map ! M3 real(4) b end map end union end structure structure /s2/ union ! U2 map ! M4 integer(2) w1, w2 end map map ! M5 integer(4) long end map end union end structure record /s1/ r1 record /s2/ r2 ! Basic unions r1.a = 0 r1.b = 1.33e7 if ( r1.a .eq. 0 ) call aborts ("basic union 1") ! Endian-agnostic runtime check r2.long = z'12345678' if (.not. ( (r2.w1 .eq. z'1234' .and. r2.w2 .eq. z'5678') & .or. (r2.w1 .eq. z'5678' .and. r2.w2 .eq. z'1234')) ) then call aborts ("basic union 2") endif end