aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@gcc.gnu.org>2017-09-21 15:45:36 +0000
committerEric Botcazou <ebotcazou@gcc.gnu.org>2017-09-21 15:45:36 +0000
commitf17aba3c82d9c316ab550b81cf9c7f141b31b999 (patch)
tree6325b02b4d685a04e146bde2bde57168b841ae8c
parent65d8c94d372c195d935c3d02a8a9fe566157b769 (diff)
downloadgcc-f17aba3c82d9c316ab550b81cf9c7f141b31b999.zip
gcc-f17aba3c82d9c316ab550b81cf9c7f141b31b999.tar.gz
gcc-f17aba3c82d9c316ab550b81cf9c7f141b31b999.tar.bz2
* stor-layout.c (bit_from_pos): Do not distribute the conversion.
From-SVN: r253074
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/stor-layout.c10
-rw-r--r--gcc/testsuite/ChangeLog11
-rw-r--r--gcc/testsuite/gnat.dg/discr48.adb9
-rw-r--r--gcc/testsuite/gnat.dg/discr48_pkg.ads19
5 files changed, 44 insertions, 11 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 4c44002..3071a86 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,8 +1,6 @@
-2017-09-21 Tamar Christina <tamar.christina@arm.com>
+2017-09-21 Eric Botcazou <ebotcazou@adacore.com>
- PR testsuite/78421
- * lib/target-supports.exp (check_effective_target_vect_hw_misalign):
- Invert arm check.
+ * stor-layout.c (bit_from_pos): Do not distribute the conversion.
2017-09-21 Segher Boessenkool <segher@kernel.crashing.org>
diff --git a/gcc/stor-layout.c b/gcc/stor-layout.c
index a6d4307..938be67 100644
--- a/gcc/stor-layout.c
+++ b/gcc/stor-layout.c
@@ -853,14 +853,10 @@ start_record_layout (tree t)
tree
bit_from_pos (tree offset, tree bitpos)
{
- if (TREE_CODE (offset) == PLUS_EXPR)
- offset = size_binop (PLUS_EXPR,
- fold_convert (bitsizetype, TREE_OPERAND (offset, 0)),
- fold_convert (bitsizetype, TREE_OPERAND (offset, 1)));
- else
- offset = fold_convert (bitsizetype, offset);
return size_binop (PLUS_EXPR, bitpos,
- size_binop (MULT_EXPR, offset, bitsize_unit_node));
+ size_binop (MULT_EXPR,
+ fold_convert (bitsizetype, offset),
+ bitsize_unit_node));
}
/* Return the combined truncated byte position for the byte offset OFFSET and
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 1ea22ee..ce407c6 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,14 @@
+2017-09-21 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gnat.dg/discr48.adb: New test.
+ * gnat.dg/discr48_pkg.ads: New helper.
+
+2017-09-21 Tamar Christina <tamar.christina@arm.com>
+
+ PR testsuite/78421
+ * lib/target-supports.exp (check_effective_target_vect_hw_misalign):
+ Invert arm check.
+
2017-09-21 Cesar Philippidis <cesar@codesourcery.com>
* gfortran.dg/goacc/wait.f90: New test.
diff --git a/gcc/testsuite/gnat.dg/discr48.adb b/gcc/testsuite/gnat.dg/discr48.adb
new file mode 100644
index 0000000..677f6ec
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/discr48.adb
@@ -0,0 +1,9 @@
+-- { dg-do compile }
+
+with Discr48_Pkg; use Discr48_Pkg;
+
+function Discr48 return Rec_Access is
+ C : constant Rec := (Count => 1, Seps => (1 .. 0 => Null_XString));
+begin
+ return new Rec'(C);
+end;
diff --git a/gcc/testsuite/gnat.dg/discr48_pkg.ads b/gcc/testsuite/gnat.dg/discr48_pkg.ads
new file mode 100644
index 0000000..646b4f11
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/discr48_pkg.ads
@@ -0,0 +1,19 @@
+with Ada.Finalization;
+
+package Discr48_Pkg is
+
+ type XString is new Ada.Finalization.Controlled with record
+ B : Boolean;
+ end record;
+
+ Null_XString : constant XString := (Ada.Finalization.Controlled with B => False);
+
+ type XString_Array is array (Natural range <>) of XString;
+
+ type Rec (Count : Positive) is record
+ Seps : XString_Array (2 .. Count);
+ end record;
+
+ type Rec_Access is access all Rec;
+
+end Discr48_Pkg;