dec_union_4.f90: Fix endian issue.
authorFritz Reese <fritzoreese@gmail.com>
Sat, 14 May 2016 16:00:35 +0000 (16:00 +0000)
committerSteven G. Kargl <kargl@gcc.gnu.org>
Sat, 14 May 2016 16:00:35 +0000 (16:00 +0000)
2016-05-14  Fritz Reese  <fritzoreese@gmail.com>

* gfortran.dg/dec_union_4.f90: Fix endian issue.

2016-05-14  Fritz Reese  <fritzoreese@gmail.com>

* gfortran.texi: Update example of DEC UNION extension.

From-SVN: r236242

gcc/fortran/ChangeLog
gcc/fortran/gfortran.texi
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/dec_union_4.f90

index a0256e13adb540f565c4c1daf0b13380dce46d57..fff7bde14a8b32c3ad996284040199ce4a0c12f9 100644 (file)
@@ -1,3 +1,7 @@
+2016-05-14  Fritz Reese  <fritzoreese@gmail.com>
+
+       * gfortran.texi: Update example of DEC UNION extension.
+
 2016-05-14  Fritz Reese  <fritzoreese@gmail.com>
 
        PR fortran/71047
index 9d7d3d4b34b14d3836231b2304145cdd8737acbf..4d288bafac37c585b4b8f9f931989cab723848b0 100644 (file)
@@ -2281,28 +2281,25 @@ Here is a small example:
 structure /myunion/
 union
   map
-    integer(2) w, x, y, z
+    character(2) w0, w1, w2
   end map
   map
-    integer(4) wx, yz
+    character(6) long
   end map
 end union
 end structure
 
 record /myunion/ rec
-! After these assignments...
-rec.wx = z'0DEDBEEF'
-rec.y  = z'0BAD'
-rec.z  = z'0FAD'
+! After this assignment...
+rec.long = 'hello!'
 
 ! The following is true:
-! rec.w  === z'0DED'
-! rec.x  === z'BEEF'
-! rec.yz === z'0BAD0FAD'
+! rec.w0 === 'he'
+! rec.w1 === 'll'
+! rec.w2 === 'o!'
 @end smallexample
 
-The two maps share memory, and the size of the union is ultimately six bytes
-(subject to alignment):
+The two maps share memory, and the size of the union is ultimately six bytes:
 
 @example
 0    1    2    3    4   5   6     Byte offset
@@ -2313,65 +2310,61 @@ The two maps share memory, and the size of the union is ultimately six bytes
 ^    W0   ^    W1   ^    W2   ^
  \-------/ \-------/ \-------/
 
-^       LONG        ^  unused ^
- \-----------------/ \-------/
+^             LONG            ^
+ \---------------------------/
 @end example
 
 Following is an example mirroring the layout of an Intel x86_64 register:
 
 @example
 structure /reg/
-  union    ! rax
+  union ! U0                ! rax
     map
-      integer*8 rx         ! rax
+      character(16) rx
     end map
     map
-      integer*4 rh         ! rah
-      union   ! eax
+      character(8) rh         ! rah
+      union ! U1
         map
-          integer*4 rl     ! ral
+          character(8) rl     ! ral
         end map
         map
-          integer*4 ex     ! eax
+          character(8) ex     ! eax
         end map
         map
-          integer*2 eh     ! eah
-          union     ! ax
+          character(4) eh     ! eah
+          union ! U2
             map
-              integer*2 el ! eal
+              character(4) el ! eal
             end map
             map
-              integer*2 x  ! ax
+              character(4) x  ! ax
             end map
             map
-              integer*1 h  ! ah
-              integer*1 l  ! al
+              character(2) h  ! ah
+              character(2) l  ! al
             end map
-          end union ! ax
+          end union
         end map
-      end union ! eax
+      end union
     end map
-  end union ! rax
+  end union
 end structure
-
 record /reg/ a
 
 ! After this assignment...
-a.rx = z'AABBCCCCFFFFFFFF'
+a.rx     =     'AAAAAAAA.BBB.C.D'
 
 ! The following is true:
-!
-! a.rx == z'AABBCCCCFFFFFFFF'
-! a.rh ==         z'FFFFFFFF'
-! a.rl == z'AABBCCCC'
-!
-! a.ex == z'AABBCCCC'
-! a.eh ==     z'CCCC'
-! a.el == z'AABB'
-!
-!  a.x == z'AABB'
-!  a.h ==   z'BB'
-!  a.l == z'AA'
+a.rx === 'AAAAAAAA.BBB.C.D'
+a.rh === 'AAAAAAAA'
+a.rl ===         '.BBB.C.D'
+a.ex ===         '.BBB.C.D'
+a.eh ===         '.BBB'
+a.el ===             '.C.D'
+a.x  ===             '.C.D'
+a.h  ===             '.C'
+a.l  ===               '.D'
 @end example
 
 
index 9ca19ae6c00f53d55bb136d33806d5a256362309..78789c28335b38125d7efc3481528cfcee0b1af5 100644 (file)
@@ -1,3 +1,7 @@
+2016-05-14  Fritz Reese  <fritzoreese@gmail.com>
+
+       * gfortran.dg/dec_union_4.f90: Fix endian issue.
+
 2016-05-14  Fritz Reese  <fritzoreese@gmail.com>
 
        PR fortran/71047
index 3bf6d618a8e05a9e229e80e5f146865c33437eff..4c1c6efe6059de98de3a7be7c08f360d00594b21 100644 (file)
@@ -14,29 +14,29 @@ end subroutine
 structure /s4/
   union ! U0                ! rax
     map
-      integer(8) rx
+      character(16) rx
     end map
     map
-      integer(4) rh         ! rah
+      character(8) rh         ! rah
       union ! U1
         map
-          integer(4) rl     ! ral
+          character(8) rl     ! ral
         end map
         map
-          integer(4) ex     ! eax
+          character(8) ex     ! eax
         end map
         map
-          integer(2) eh     ! eah
+          character(4) eh     ! eah
           union ! U2
             map
-              integer(2) el ! eal
+              character(4) el ! eal
             end map
             map
-              integer(2) x  ! ax
+              character(4) x  ! ax
             end map
             map
-              integer(1) h  ! ah
-              integer(1) l  ! al
+              character(2) h  ! ah
+              character(2) l  ! al
             end map
           end union
         end map
@@ -48,15 +48,16 @@ record /s4/ r4
 
 
 ! Nested unions
-r4.rx     =     z'7A7B7CCC7FFFFFFF'
-if ( r4.rx .ne. z'7A7B7CCC7FFFFFFF' ) call aborts ("rax")
-if ( r4.rh .ne.         z'7FFFFFFF' ) call aborts ("rah")
-if ( r4.rl .ne. z'7A7B7CCC'         ) call aborts ("ral")
-if ( r4.ex .ne. z'7A7B7CCC'         ) call aborts ("eax")
-if ( r4.eh .ne.     z'7CCC'         ) call aborts ("eah")
-if ( r4.el .ne. z'7A7B'             ) call aborts ("eal")
-if ( r4.x  .ne. z'7A7B'             ) call aborts ("ax")
-if ( r4.h  .ne.   z'7B'             ) call aborts ("ah")
-if ( r4.l  .ne. z'7A'               ) call aborts ("al")
+r4.rx     =     'AAAAAAAA.BBB.C.D'
+
+if ( r4.rx .ne. 'AAAAAAAA.BBB.C.D' ) call aborts ("rax")
+if ( r4.rh .ne. 'AAAAAAAA'         ) call aborts ("rah")
+if ( r4.rl .ne.         '.BBB.C.D' ) call aborts ("ral")
+if ( r4.ex .ne.         '.BBB.C.D' ) call aborts ("eax")
+if ( r4.eh .ne.         '.BBB'     ) call aborts ("eah")
+if ( r4.el .ne.             '.C.D' ) call aborts ("eal")
+if ( r4.x  .ne.             '.C.D' ) call aborts ("ax")
+if ( r4.h  .ne.             '.C'   ) call aborts ("ah")
+if ( r4.l  .ne.               '.D' ) call aborts ("al")
 
 end