diff options
author | Eric Botcazou <ebotcazou@adacore.com> | 2013-12-04 11:27:25 +0000 |
---|---|---|
committer | Eric Botcazou <ebotcazou@gcc.gnu.org> | 2013-12-04 11:27:25 +0000 |
commit | 6bc8df24390d66b92a2b23d31f010911f13c6c40 (patch) | |
tree | 30f5199f3153bae7b0afb229d388990a213905df /gcc/testsuite | |
parent | 5bf51f2f731c28ea9b45e170fc36a2b0d51ba9b2 (diff) | |
download | gcc-6bc8df24390d66b92a2b23d31f010911f13c6c40.zip gcc-6bc8df24390d66b92a2b23d31f010911f13c6c40.tar.gz gcc-6bc8df24390d66b92a2b23d31f010911f13c6c40.tar.bz2 |
decl.c (components_to_record): Add specific handling for fields with zero size and no representation clause.
* gcc-interface/decl.c (components_to_record): Add specific handling
for fields with zero size and no representation clause.
From-SVN: r205665
Diffstat (limited to 'gcc/testsuite')
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gnat.dg/pack19.adb | 56 |
2 files changed, 60 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 912b117..3fe3212 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2013-12-04 Eric Botcazou <ebotcazou@adacore.com> + + * gnat.dg/pack19.adb: New test. + 2013-12-04 Jakub Jelinek <jakub@redhat.com> PR rtl-optimization/58726 diff --git a/gcc/testsuite/gnat.dg/pack19.adb b/gcc/testsuite/gnat.dg/pack19.adb new file mode 100644 index 0000000..601039a --- /dev/null +++ b/gcc/testsuite/gnat.dg/pack19.adb @@ -0,0 +1,56 @@ +-- { dg-do run } + +procedure Pack19 is + + subtype Always_False is Boolean range False .. False; + + type Rec1 is record + B1 : Boolean; + B2 : Boolean; + B3 : Boolean; + B4 : Boolean; + B5 : Boolean; + B6 : Boolean; + B7 : Always_False; + B8 : Boolean; + end record; + pragma Pack (Rec1); + + subtype Always_True is Boolean range True .. True; + + type Rec2 is record + B1 : Boolean; + B2 : Boolean; + B3 : Boolean; + B4 : Boolean; + B5 : Boolean; + B6 : Boolean; + B7 : Always_True; + B8 : Boolean; + end record; + pragma Pack (Rec2); + + R1 : Rec1 := (True, True, True, True, True, True, False, False); + R2 : Rec2 := (False, False, False, False, False, False, True, True); + +begin + R1.B8 := True; + if R1.B7 /= False then + raise Program_Error; + end if; + + R1.B7 := False; + if R1.B7 /= False then + raise Program_Error; + end if; + + R2.B8 := False; + if R2.B7 /= True then + raise Program_Error; + end if; + + R2.B7 := True; + if R2.B7 /= True then + raise Program_Error; + end if; +end; |