+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
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
+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
--- /dev/null
+-- { 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;