aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2015-11-18 18:31:42 +0000
committerEric Botcazou <ebotcazou@gcc.gnu.org>2015-11-18 18:31:42 +0000
commit482a338d0113756c63035861fa05aa003b49cf65 (patch)
treef9406b1c7cb09d095c6b70103d1e989127905810 /gcc
parenta239279ee574a15ed79d27b48f835c3db45a593f (diff)
downloadgcc-482a338d0113756c63035861fa05aa003b49cf65.zip
gcc-482a338d0113756c63035861fa05aa003b49cf65.tar.gz
gcc-482a338d0113756c63035861fa05aa003b49cf65.tar.bz2
decl.c (gnat_to_gnu_entity): Use case #1 for the renaming of an address.
* gcc-interface/decl.c (gnat_to_gnu_entity) <E_Variable>: Use case #1 for the renaming of an address. From-SVN: r230560
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ada/ChangeLog5
-rw-r--r--gcc/ada/gcc-interface/decl.c5
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gnat.dg/renaming7.adb12
-rw-r--r--gcc/testsuite/gnat.dg/renaming7_pkg.ads5
5 files changed, 30 insertions, 2 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index 3ffb45e..6c4a850 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,5 +1,10 @@
2015-11-18 Eric Botcazou <ebotcazou@adacore.com>
+ * gcc-interface/decl.c (gnat_to_gnu_entity) <E_Variable>: Use case #1
+ for the renaming of an address.
+
+2015-11-18 Eric Botcazou <ebotcazou@adacore.com>
+
* gcc-interface/trans.c (fold_constant_decl_in_expr) <ARRAY_REF>: If
the index is not itself constant then bail out.
diff --git a/gcc/ada/gcc-interface/decl.c b/gcc/ada/gcc-interface/decl.c
index ceeb995..883b275 100644
--- a/gcc/ada/gcc-interface/decl.c
+++ b/gcc/ada/gcc-interface/decl.c
@@ -963,8 +963,8 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition)
function call is a constant object. Therefore, it can be the
inner object of a constant renaming and the renaming must be
fully instantiated, i.e. it cannot be a reference to (part of)
- an existing object. And treat null expressions, constructors
- and literals the same way. */
+ an existing object. And treat other rvalues (addresses, null
+ expressions, constructors and literals) the same way. */
tree inner = gnu_expr;
while (handled_component_p (inner) || CONVERT_EXPR_P (inner))
inner = TREE_OPERAND (inner, 0);
@@ -974,6 +974,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition)
inner = TREE_OPERAND (inner, 1);
if ((TREE_CODE (inner) == CALL_EXPR
&& !call_is_atomic_load (inner))
+ || TREE_CODE (inner) == ADDR_EXPR
|| TREE_CODE (inner) == NULL_EXPR
|| TREE_CODE (inner) == CONSTRUCTOR
|| CONSTANT_CLASS_P (inner))
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index d0c4b6c..b4e2db5 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2015-11-18 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gnat.dg/renaming7.adb: New test.
+ * gnat.dg/renaming7_pkg.ads: New helper.
+
2015-11-18 Ajit Agarwal <ajitkum@xilinx.com>
PR tree-optimization/68402
diff --git a/gcc/testsuite/gnat.dg/renaming7.adb b/gcc/testsuite/gnat.dg/renaming7.adb
new file mode 100644
index 0000000..2a93f9e
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/renaming7.adb
@@ -0,0 +1,12 @@
+-- { dg-do compile }
+-- { dg-options "-O" }
+
+with Renaming7_Pkg; use Renaming7_Pkg;
+with System;
+
+procedure Renaming7 is
+ C : constant System.Address := A'Address;
+ D : System.Address renames C;
+begin
+ null;
+end;
diff --git a/gcc/testsuite/gnat.dg/renaming7_pkg.ads b/gcc/testsuite/gnat.dg/renaming7_pkg.ads
new file mode 100644
index 0000000..4014adc
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/renaming7_pkg.ads
@@ -0,0 +1,5 @@
+package Renaming7_Pkg is
+
+ A : Integer;
+
+end Renaming7_Pkg;