tree-sra.c (build_ref_for_offset): Strip useless type conversions from the address...
authorEric Botcazou <ebotcazou@adacore.com>
Thu, 24 Mar 2011 14:21:27 +0000 (14:21 +0000)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Thu, 24 Mar 2011 14:21:27 +0000 (14:21 +0000)
* tree-sra.c (build_ref_for_offset): Strip useless type conversions
from the address built for a reference with variable offset.

From-SVN: r171393

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gnat.dg/array15.adb [new file with mode: 0644]
gcc/testsuite/gnat.dg/array15.ads [new file with mode: 0644]
gcc/tree-sra.c

index 238f6f0fdeb6abb20bdaeb7df833596bffa46236..c2e1bf4f12f9f3a1a13085a9b80b75a83084537c 100644 (file)
@@ -1,3 +1,8 @@
+2011-03-24  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * tree-sra.c (build_ref_for_offset): Strip useless type conversions
+       from the address built for a reference with variable offset.
+
 2011-03-24  Uros Bizjak  <ubizjak@gmail.com>
 
        PR target/48237
index 6b9b249d9d6712d533dfa0f80500169cfe0f44a3..472002622638e029809f8119f75dd00be868821b 100644 (file)
@@ -1,3 +1,7 @@
+2011-03-24  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * gnat.dg/array15.ad[sb]: New test.
+
 2011-03-24  Uros Bizjak  <ubizjak@gmail.com>
 
        PR target/48237
diff --git a/gcc/testsuite/gnat.dg/array15.adb b/gcc/testsuite/gnat.dg/array15.adb
new file mode 100644 (file)
index 0000000..eb51f37
--- /dev/null
@@ -0,0 +1,24 @@
+-- { dg-do compile }
+-- { dg-options "-O -gnatws" }
+
+package body Array15 is
+
+   type Arr is array (Natural range <>) of Integer;
+
+   Table : Arr (1 .. 4);
+
+   N : Natural := 1;
+
+   procedure Zero is
+   begin
+      N := 0;
+   end;
+
+   function F (I : Integer) return Integer is
+      A1 : Arr := (1 => I);
+      A2 : Arr := Table (1 .. N) & A1;
+   begin
+      return A2 (I);
+   end;
+
+end Array15;
diff --git a/gcc/testsuite/gnat.dg/array15.ads b/gcc/testsuite/gnat.dg/array15.ads
new file mode 100644 (file)
index 0000000..c5c2087
--- /dev/null
@@ -0,0 +1,5 @@
+package Array15 is
+
+   function F (I : Integer) return Integer;
+
+end Array15;
index f28719f5fe616b5f732ac98534fac66afd614095..7ad0e098721ddb410b2c5d7bf1debd61144f084b 100644 (file)
@@ -1376,6 +1376,7 @@ build_ref_for_offset (location_t loc, tree base, HOST_WIDE_INT offset,
       add_referenced_var (tmp);
       tmp = make_ssa_name (tmp, NULL);
       addr = build_fold_addr_expr (unshare_expr (prev_base));
+      STRIP_USELESS_TYPE_CONVERSION (addr);
       stmt = gimple_build_assign (tmp, addr);
       gimple_set_location (stmt, loc);
       SSA_NAME_DEF_STMT (tmp) = stmt;