* varasm.c (decode_addr_const): Deal with INDIRECT_REF <INTEGER_CST>.
authorEric Botcazou <ebotcazou@adacore.com>
Wed, 30 Aug 2017 19:09:16 +0000 (19:09 +0000)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Wed, 30 Aug 2017 19:09:16 +0000 (19:09 +0000)
From-SVN: r251545

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gnat.dg/aggr22.adb [new file with mode: 0644]
gcc/testsuite/gnat.dg/aggr22.ads [new file with mode: 0644]
gcc/varasm.c

index 37d888fa0392180489be0a0ba2e29b6d16fea19b..c797558849c2a0c30f9316c7bfc012266eccb0f9 100644 (file)
@@ -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
index 331b6dd29f83732f183d5d379290732ffee1b0a6..0fab4d4702ab0e2985663f3ab0b6f6d0253fa3e1 100644 (file)
@@ -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 (file)
index 0000000..a9eb2e7
--- /dev/null
@@ -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 (file)
index 0000000..4fe86db
--- /dev/null
@@ -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;
index adf99fb717a442c9196e37ccfee0414b172f6d1b..e5393377a4337d9224ebe0591003b6db2b59b37a 100644 (file)
@@ -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 ();
     }