* gcc-interface/decl.c (gnat_to_gnu_entity) <E_Variable>: Always mark
authorebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 7 Mar 2016 08:08:27 +0000 (08:08 +0000)
committerebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 7 Mar 2016 08:08:27 +0000 (08:08 +0000)
the expression of a renaming manually in case #3.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@234018 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ada/ChangeLog
gcc/ada/gcc-interface/decl.c
gcc/testsuite/ChangeLog
gcc/testsuite/gnat.dg/renaming9.adb [new file with mode: 0644]
gcc/testsuite/gnat.dg/renaming9.ads [new file with mode: 0644]

index cb5aeb5..0573865 100644 (file)
@@ -1,3 +1,8 @@
+2016-03-07  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * gcc-interface/decl.c (gnat_to_gnu_entity) <E_Variable>: Always mark
+       the expression of a renaming manually in case #3.
+
 2016-03-02  Dominik Vogt  <vogt@linux.vnet.ibm.com>
 
        * system-linux-s390.adsx: Enable Stack_Check_Probes.
index 7ea5ff8..4b0ce28 100644 (file)
@@ -1058,12 +1058,10 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition)
                  = elaborate_reference (gnu_expr, gnat_entity, definition,
                                         &init);
 
-               /* If we are not defining the entity, the expression will not
-                  be attached through DECL_INITIAL so it needs to be marked
-                  manually because it will likely be shared.  Likewise for a
-                  dereference as it will be folded by the ADDR_EXPR below.  */
-               if ((!definition || TREE_CODE (renamed_obj) == INDIRECT_REF)
-                   && global_bindings_p ())
+               /* The expression needs to be marked manually because it will
+                  likely be shared, even for a definition since the ADDR_EXPR
+                  built below can cause the first few nodes to be folded.  */
+               if (global_bindings_p ())
                  MARK_VISITED (renamed_obj);
 
                if (type_annotate_only
index 808b0c8..182e917 100644 (file)
@@ -1,3 +1,7 @@
+2016-03-07  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * gnat.dg/renaming9.ad[sb]: New testcase.
+
 2016-03-05  Jakub Jelinek  <jakub@redhat.com>
 
        PR c++/70084
diff --git a/gcc/testsuite/gnat.dg/renaming9.adb b/gcc/testsuite/gnat.dg/renaming9.adb
new file mode 100644 (file)
index 0000000..c50243e
--- /dev/null
@@ -0,0 +1,12 @@
+-- { dg-do compile }
+
+package body Renaming9 is
+
+  procedure Proc is
+  begin
+    Obj.I := 0;
+  end;
+
+begin
+  Obj.I := 0;
+end Renaming9;
diff --git a/gcc/testsuite/gnat.dg/renaming9.ads b/gcc/testsuite/gnat.dg/renaming9.ads
new file mode 100644 (file)
index 0000000..ce6b4ed
--- /dev/null
@@ -0,0 +1,16 @@
+package Renaming9 is
+
+  pragma Elaborate_Body;
+
+  type Object is tagged null record;
+
+  type Pointer is access all Object'Class;
+
+  type Derived is new Object with record
+     I : Integer;
+  end record;
+
+  Ptr : Pointer := new Derived;
+  Obj : Derived renames Derived (Ptr.all);
+
+end Renaming9;