diff options
author | Fritz Reese <fritzoreese@gmail.com> | 2016-05-14 16:00:35 +0000 |
---|---|---|
committer | Steven G. Kargl <kargl@gcc.gnu.org> | 2016-05-14 16:00:35 +0000 |
commit | 785abfd3ff0eb7443747ffb83d136c1a62389ab6 (patch) | |
tree | 273671f57d952a072a77b50672efbedfcb3ebc7c /gcc | |
parent | e75eb64fdf7296fa333f49f0186f1e219fed16ad (diff) | |
download | gcc-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/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/fortran/gfortran.texi | 77 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/dec_union_4.f90 | 39 |
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 |