aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2018-06-12 09:51:26 +0000
committerEric Botcazou <ebotcazou@gcc.gnu.org>2018-06-12 09:51:26 +0000
commitcd8ad45920aaf33a660b85878c572298faba06bf (patch)
tree3c8c32322ff2d79c1acfc7387a1606252f353502 /gcc/testsuite
parent835d417373cf5843051885e2cba29aea30814606 (diff)
downloadgcc-cd8ad45920aaf33a660b85878c572298faba06bf.zip
gcc-cd8ad45920aaf33a660b85878c572298faba06bf.tar.gz
gcc-cd8ad45920aaf33a660b85878c572298faba06bf.tar.bz2
decl.c (variant_desc): Add AUX field.
* gcc-interface/decl.c (variant_desc): Add AUX field. (gnat_to_gnu_entity) <discrete_type>: Do not call compute_record_mode directly. (reverse_sort_field_list): New static function. (components_to_record): Place the variant part at the beginning of the field list when there is an obvious order of increasing position. (build_variant_list): Initialize it. (create_variant_part_from): Do not call compute_record_mode directly. (copy_and_substitute_in_layout): Likewise. Always sort the fields with fixed position in order of increasing position, in the record and all the variants, in any. Call reverse_sort_field_list. * gcc-interface/utils.c (make_packable_type): Compute the sizes before calling finish_record_type. Do not call compute_record_mode directly. (finish_record_type): Overhaul final processing depending on REP_LEVEL and call finish_bitfield_layout if it is equal to one or two. From-SVN: r261479
Diffstat (limited to 'gcc/testsuite')
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gnat.dg/opt72_pkg.ads12
-rw-r--r--gcc/testsuite/gnat.dg/opt72a.adb12
-rw-r--r--gcc/testsuite/gnat.dg/opt72b.adb12
4 files changed, 41 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index b1e6944..56b6008 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2018-06-12 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gnat.dg/opt72a.ad[sb]: New test.
+ * gnat.dg/opt72_pkg.ads: New helper.
+
2018-06-12 Tom de Vries <tdevries@suse.de>
* gcc.dg-selftests/dg-final.exp: New file.
diff --git a/gcc/testsuite/gnat.dg/opt72_pkg.ads b/gcc/testsuite/gnat.dg/opt72_pkg.ads
new file mode 100644
index 0000000..92255fb
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/opt72_pkg.ads
@@ -0,0 +1,12 @@
+package Opt72_Pkg is
+
+ type Rec is record
+ Flag : Boolean;
+ Size : Positive;
+ end record;
+ for Rec use record
+ Flag at 0 range 0 .. 0;
+ Size at 0 range 1 .. 31;
+ end record;
+
+end Opt72_Pkg;
diff --git a/gcc/testsuite/gnat.dg/opt72a.adb b/gcc/testsuite/gnat.dg/opt72a.adb
new file mode 100644
index 0000000..db1d28c
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/opt72a.adb
@@ -0,0 +1,12 @@
+-- { dg-do compile }
+-- { dg-require-effective-target store_merge }
+-- { dg-options "-O2 -fdump-tree-store-merging" }
+
+with Opt72_Pkg; use Opt72_Pkg;
+
+procedure Opt72a (X : not null access Rec; Size : Positive) is
+begin
+ X.all := (Flag => True, Size => Size);
+end;
+
+-- { dg-final { scan-tree-dump "Merging successful" "store-merging" } }
diff --git a/gcc/testsuite/gnat.dg/opt72b.adb b/gcc/testsuite/gnat.dg/opt72b.adb
new file mode 100644
index 0000000..e4a708b
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/opt72b.adb
@@ -0,0 +1,12 @@
+-- { dg-do compile }
+-- { dg-require-effective-target store_merge }
+-- { dg-options "-O2 -fdump-tree-store-merging" }
+
+with Opt72_Pkg; use Opt72_Pkg;
+
+procedure Opt72b (X : not null access Rec; Y : not null access Rec) is
+begin
+ X.all := (Flag => True, Size => Y.Size);
+end;
+
+-- { dg-final { scan-tree-dump "Merging successful" "store-merging" } }