utils.c (can_materialize_object_renaming_p): Synchronize with GNAT's Exp_Dbug.Debug_R...
authorPierre-Marie de Rodat <derodat@adacore.com>
Mon, 15 May 2017 08:58:56 +0000 (08:58 +0000)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Mon, 15 May 2017 08:58:56 +0000 (08:58 +0000)
* gcc-interface/utils.c (can_materialize_object_renaming_p):
Synchronize with GNAT's Exp_Dbug.Debug_Renaming_Declaration:
process Original_Node instead of expanded names.

From-SVN: r248054

gcc/ada/ChangeLog
gcc/ada/gcc-interface/utils.c
gcc/testsuite/ChangeLog
gcc/testsuite/gnat.dg/specs/pack13.ads [new file with mode: 0644]

index 78a3bb1c71bec268aa78e15057082dea92bc56ff..f4c126a7b7234fb73b56a5fe45792f97dbfad17c 100644 (file)
@@ -1,3 +1,9 @@
+2017-05-15  Pierre-Marie de Rodat  <derodat@adacore.com>
+
+       * gcc-interface/utils.c (can_materialize_object_renaming_p):
+       Synchronize with GNAT's Exp_Dbug.Debug_Renaming_Declaration:
+       process Original_Node instead of expanded names.
+
 2017-05-15  Eric Botcazou  <ebotcazou@adacore.com>
 
        * gcc-interface/trans.c (return_value_ok_for_nrv_p): Only apply the
index 345b8a4f16327a994d9f94c0e827af0c67a1fbc9..b8c5d3d31f6aad0846cfce226bb716ee4b949f41 100644 (file)
@@ -5431,11 +5431,16 @@ can_materialize_object_renaming_p (Node_Id expr)
 {
   while (true)
     {
+      expr = Original_Node (expr);
+
       switch Nkind (expr)
        {
        case N_Identifier:
        case N_Expanded_Name:
-         return true;
+         if (!Present (Renamed_Object (Entity (expr))))
+           return true;
+         expr = Renamed_Object (Entity (expr));
+         break;
 
        case N_Selected_Component:
          {
index ac54d650e35fec038e5cca046e3a17fa861157cc..f198fc6b42bb5e95b99e0da23c4b551f4916d7d9 100644 (file)
@@ -1,3 +1,7 @@
+2017-05-15  Pierre-Marie de Rodat  <derodat@adacore.com>
+
+       * gnat.dg/specs/pack13.ads: New test.
+
 2017-05-14  Martin Sebor  <msebor@redhat.com>
 
        PR middle-end/77671
diff --git a/gcc/testsuite/gnat.dg/specs/pack13.ads b/gcc/testsuite/gnat.dg/specs/pack13.ads
new file mode 100644 (file)
index 0000000..4594ab7
--- /dev/null
@@ -0,0 +1,25 @@
+-- { dg-do compile }
+
+package Pack13 is
+
+  generic
+    type Value_Type is private;
+    Value : in out Value_Type;
+  package G is end G;
+
+  type Rec is record
+    B : Boolean;
+  end record;
+  for Rec use record
+    B at 0 range 8 .. 8;
+  end record;
+  for Rec'size use 9;
+
+  type Arr is array (Boolean) of Rec;
+  pragma Pack (Arr);
+
+  A : Arr;
+
+  package My_G is new G (Boolean, A(True).B);
+
+end Pack13;