aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ada/ChangeLog5
-rw-r--r--gcc/ada/gcc-interface/trans.c2
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gnat.dg/unchecked_convert13.adb30
4 files changed, 40 insertions, 1 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index b07c2ce..607b955 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,5 +1,10 @@
2019-05-27 Eric Botcazou <ebotcazou@adacore.com>
+ * gcc-interface/trans.c (Call_to_gnu): Use the unpadded type when
+ putting back an intermediate conversion the type of the actuals.
+
+2019-05-27 Eric Botcazou <ebotcazou@adacore.com>
+
* gcc-interface/trans.c (gnat_to_gnu) <Shift operations>: Convert the
count to the unsigned version of its base type before proceeding.
diff --git a/gcc/ada/gcc-interface/trans.c b/gcc/ada/gcc-interface/trans.c
index 4df0dfa..e41703b 100644
--- a/gcc/ada/gcc-interface/trans.c
+++ b/gcc/ada/gcc-interface/trans.c
@@ -5355,7 +5355,7 @@ Call_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p, tree gnu_target,
since the parent is a procedure call, so put it back here. Note that
we might have a dummy type here if the actual is the dereference of a
pointer to it, but that's OK if the formal is passed by reference. */
- tree gnu_actual_type = gnat_to_gnu_type (Etype (gnat_actual));
+ tree gnu_actual_type = get_unpadded_type (Etype (gnat_actual));
if (TYPE_IS_DUMMY_P (gnu_actual_type))
gcc_assert (is_true_formal_parm && DECL_BY_REF_P (gnu_formal));
else if (suppress_type_conversion
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 04bdb6c..7f64d13 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2019-05-27 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gnat.dg/unchecked_convert13.adb: New test.
+
2019-05-27 Richard Biener <rguenther@suse.de>
PR testsuite/90615
diff --git a/gcc/testsuite/gnat.dg/unchecked_convert13.adb b/gcc/testsuite/gnat.dg/unchecked_convert13.adb
new file mode 100644
index 0000000..6297e27
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/unchecked_convert13.adb
@@ -0,0 +1,30 @@
+-- { dg-do compile }
+
+with Ada.Unchecked_Conversion;
+
+procedure Unchecked_Convert13 is
+
+ type B16_T is mod 2 ** 16;
+ for B16_T'Size use 16;
+ for B16_T'Alignment use 1;
+
+ type Rec_T is record
+ A : Short_Integer;
+ end record;
+ for Rec_T use record
+ A at 0 range 0 .. 15;
+ end record;
+ for Rec_T'Size use 16;
+
+ Rec : constant Rec_T := (A => 0);
+
+ function Rec_To_B16 is new Ada.Unchecked_Conversion (Rec_T, B16_T);
+
+ procedure Nested (B16 : B16_T) is
+ begin
+ null;
+ end;
+
+begin
+ Nested (Rec_To_B16 (Rec));
+end;