From 7a0877c042afed1392a103d18e03b645f87392b8 Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Mon, 27 May 2019 10:16:04 +0000 Subject: [PATCH] trans.c (Call_to_gnu): Use the unpadded type when putting back an intermediate conversion the type of... * gcc-interface/trans.c (Call_to_gnu): Use the unpadded type when putting back an intermediate conversion the type of the actuals. From-SVN: r271647 --- gcc/ada/ChangeLog | 5 ++++ gcc/ada/gcc-interface/trans.c | 2 +- gcc/testsuite/ChangeLog | 4 +++ gcc/testsuite/gnat.dg/unchecked_convert13.adb | 30 +++++++++++++++++++ 4 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gnat.dg/unchecked_convert13.adb diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index b07c2ce3e1e..607b9550bd5 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,8 @@ +2019-05-27 Eric Botcazou + + * 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 * gcc-interface/trans.c (gnat_to_gnu) : Convert the diff --git a/gcc/ada/gcc-interface/trans.c b/gcc/ada/gcc-interface/trans.c index 4df0dfaae02..e41703b6601 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 04bdb6cb193..7f64d13f965 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2019-05-27 Eric Botcazou + + * gnat.dg/unchecked_convert13.adb: New test. + 2019-05-27 Richard Biener 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 00000000000..6297e276e0f --- /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; -- 2.30.2