aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gnat.dg/aggr22.adb14
-rw-r--r--gcc/testsuite/gnat.dg/aggr22.ads16
-rw-r--r--gcc/varasm.c7
5 files changed, 45 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 37d888f..c797558 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,7 @@
+2017-08-30 Eric Botcazou <ebotcazou@adacore.com>
+
+ * varasm.c (decode_addr_const): Deal with INDIRECT_REF <INTEGER_CST>.
+
2017-08-30 Pat Haugen <pthaugen@us.ibm.com>
* config/rs6000/rs6000.c (rs6000_emit_prologue_move_from_cr): Rename from
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 331b6dd..0fab4d4 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2017-08-30 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gnat.dg/aggr22.ad[sb]: New test.
+
2017-08-30 Pat Haugen <pthaugen@us.ibm.com>
* gcc.target/powerpc/cr_shrink-wrap.c: New.
diff --git a/gcc/testsuite/gnat.dg/aggr22.adb b/gcc/testsuite/gnat.dg/aggr22.adb
new file mode 100644
index 0000000..a9eb2e7
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/aggr22.adb
@@ -0,0 +1,14 @@
+-- { dg-do compile }
+
+package body Aggr22 is
+
+ type Ptr is access all Integer;
+ type Arr is array (Positive range <>) of Ptr;
+
+ procedure Proc is
+ A : Arr (1 .. 33);
+ begin
+ A := (1 => null, 2 .. 32 => My_Rec.I'Access, 33 => null);
+ end;
+
+end Aggr22;
diff --git a/gcc/testsuite/gnat.dg/aggr22.ads b/gcc/testsuite/gnat.dg/aggr22.ads
new file mode 100644
index 0000000..4fe86db
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/aggr22.ads
@@ -0,0 +1,16 @@
+with System;
+
+package Aggr22 is
+
+ type Rec is record
+ C : Character;
+ I : aliased Integer;
+ end record;
+
+ My_Rec : aliased Rec;
+ pragma Import (Ada, My_Rec);
+ for My_Rec'Address use System'To_Address (16#40086000#);
+
+ procedure Proc;
+
+end Aggr22;
diff --git a/gcc/varasm.c b/gcc/varasm.c
index adf99fb7..e539337 100644
--- a/gcc/varasm.c
+++ b/gcc/varasm.c
@@ -2924,6 +2924,13 @@ decode_addr_const (tree exp, struct addr_const *value)
x = output_constant_def (target, 1);
break;
+ case INDIRECT_REF:
+ /* This deals with absolute addresses. */
+ offset += tree_to_shwi (TREE_OPERAND (target, 0));
+ x = gen_rtx_MEM (QImode,
+ gen_rtx_SYMBOL_REF (Pmode, "origin of addresses"));
+ break;
+
default:
gcc_unreachable ();
}