tree.def (TARGET_MEM_REF): Update comment.
authorEric Botcazou <ebotcazou@adacore.com>
Sun, 1 Nov 2009 22:12:07 +0000 (22:12 +0000)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Sun, 1 Nov 2009 22:12:07 +0000 (22:12 +0000)
* tree.def (TARGET_MEM_REF): Update comment.
* alias.c (get_alias_set): Retrieve the original memory reference for
a TARGET_MEM_REF before proceeding.

From-SVN: r153796

gcc/ChangeLog
gcc/alias.c
gcc/testsuite/ChangeLog
gcc/testsuite/gnat.dg/opt5.adb [new file with mode: 0644]
gcc/tree.def

index 94a1ccb169ed0be13f100629e3c99bb3c8691b51..b4e1bff084599fdd437a6fba85145d8cab222a95 100644 (file)
@@ -1,3 +1,9 @@
+2009-11-01  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * tree.def (TARGET_MEM_REF): Update comment.
+       * alias.c (get_alias_set): Retrieve the original memory reference for
+       a TARGET_MEM_REF before proceeding.
+
 2009-10-31  Anatoly Sokolov  <aesok@post.ru>
 
        * config/frv/frv.c (frv_function_value, frv_libcall_value,
index 1d4290f7848a8651a3c7f3f584b59a4c4a22573f..cdfa6d2d3ac7d195a205706053152164be635db1 100644 (file)
@@ -640,7 +640,7 @@ get_alias_set (tree t)
      aren't types.  */
   if (! TYPE_P (t))
     {
-      tree inner = t;
+      tree inner;
 
       /* Remove any nops, then give the language a chance to do
         something with this tree before we look at it.  */
@@ -649,8 +649,13 @@ get_alias_set (tree t)
       if (set != -1)
        return set;
 
+      /* Retrieve the original memory reference if needed.  */
+      if (TREE_CODE (t) == TARGET_MEM_REF)
+       t = TMR_ORIGINAL (t);
+
       /* First see if the actual object referenced is an INDIRECT_REF from a
         restrict-qualified pointer or a "void *".  */
+      inner = t;
       while (handled_component_p (inner))
        {
          inner = TREE_OPERAND (inner, 0);
index bd400052ad42d977ec8da34ab1f5d175dbf285c4..a6bf61b6b7363e432ca0dba3e0392be042e7cafc 100644 (file)
@@ -1,3 +1,7 @@
+2009-11-01  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * gnat.dg/opt5.adb: New test.
+
 2009-11-01  Tobias Burnus  <burnus@net-b.de>
 
        PR fortran/41872
diff --git a/gcc/testsuite/gnat.dg/opt5.adb b/gcc/testsuite/gnat.dg/opt5.adb
new file mode 100644 (file)
index 0000000..73a21bd
--- /dev/null
@@ -0,0 +1,21 @@
+-- { dg-do run }
+-- { dg-options "-O2" }
+
+procedure Opt5 is
+
+   type Varray is array (1 .. 4) of Natural;
+
+   procedure Check_All_Ones (A : Varray) is
+   begin
+      for J in A'Range loop
+         if (A (J)) /= 1 then
+            raise Program_Error;
+         end if;
+      end loop;
+   end;
+
+   X : constant Varray := (1, 1, 1, 1);
+
+begin
+   Check_All_Ones (X);
+end;
index 74470b5783ad76eddc06aa7c30af45fe8c1ac3b1..01d9b3060debb33da0f6cac534d9797251e925c0 100644 (file)
@@ -967,9 +967,9 @@ DEFTREECODE (REALIGN_LOAD_EXPR, "realign_load", tcc_expression, 3)
 
    The type of STEP, INDEX and OFFSET is sizetype.  The type of BASE is
    sizetype or a pointer type (if SYMBOL is NULL).
-   
+
    The sixth argument is the reference to the original memory access, which
-   is preserved for the purposes of the RTL alias analysis.  */
+   is preserved for the purpose of alias analysis.  */
 
 DEFTREECODE (TARGET_MEM_REF, "target_mem_ref", tcc_reference, 6)