aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorFritz Reese <fritzoreese@gmail.com>2016-05-14 16:00:35 +0000
committerSteven G. Kargl <kargl@gcc.gnu.org>2016-05-14 16:00:35 +0000
commit785abfd3ff0eb7443747ffb83d136c1a62389ab6 (patch)
tree273671f57d952a072a77b50672efbedfcb3ebc7c /gcc
parente75eb64fdf7296fa333f49f0186f1e219fed16ad (diff)
downloadgcc-785abfd3ff0eb7443747ffb83d136c1a62389ab6.zip
gcc-785abfd3ff0eb7443747ffb83d136c1a62389ab6.tar.gz
gcc-785abfd3ff0eb7443747ffb83d136c1a62389ab6.tar.bz2
dec_union_4.f90: Fix endian issue.
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog4
-rw-r--r--gcc/fortran/gfortran.texi77
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gfortran.dg/dec_union_4.f9039
4 files changed, 63 insertions, 61 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index a0256e1..fff7bde 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,5 +1,9 @@
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
* expr.c (gfc_default_initializer): Avoid extra component refs in
constructors for derived types and classes.
diff --git a/gcc/fortran/gfortran.texi b/gcc/fortran/gfortran.texi
index 9d7d3d4..4d288ba 100644
--- a/gcc/fortran/gfortran.texi
+++ b/gcc/fortran/gfortran.texi
@@ -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
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 9ca19ae..78789c2 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,9 @@
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
* gfortran.dg/pr71047.f08: New test.
diff --git a/gcc/testsuite/gfortran.dg/dec_union_4.f90 b/gcc/testsuite/gfortran.dg/dec_union_4.f90
index 3bf6d61..4c1c6ef 100644
--- a/gcc/testsuite/gfortran.dg/dec_union_4.f90
+++ b/gcc/testsuite/gfortran.dg/dec_union_4.f90
@@ -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