]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
[PR 69920] Prevent SRA from leaving a removed SSA_NAME in IL
authorMartin Jambor <mjambor@suse.cz>
Fri, 26 Feb 2016 18:06:42 +0000 (19:06 +0100)
committerMartin Jambor <jamborm@gcc.gnu.org>
Fri, 26 Feb 2016 18:06:42 +0000 (19:06 +0100)
2016-02-26  Martin Jambor  <mjambor@suse.cz>

PR middle-end/69920
* tree-sra.c (sra_modify_assign): Do not remove loads of
uninitialized aggregates to SSA_NAMEs.

testsuite/
* gcc.dg/torture/pr69932.c: New test.
* gcc.dg/torture/pr69936.c: Likewise.

From-SVN: r233753

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/torture/pr69932.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/torture/pr69936.c [new file with mode: 0644]
gcc/tree-sra.c

index 2668f2e7c694d01fb025a7d109a2e6d7ec040732..d9cfd0e08f52c5956733f8ddd9e03e1e51bb3164 100644 (file)
@@ -1,3 +1,9 @@
+2016-02-26  Martin Jambor  <mjambor@suse.cz>
+
+       PR middle-end/69920
+       * tree-sra.c (sra_modify_assign): Do not remove loads of
+       uninitialized aggregates to SSA_NAMEs.
+
 2016-02-26  Richard Henderson  <rth@redhat.com>
 
        PR target/69709
index a70a06970bc665928eb39b822507e162c8d7ad0d..5a928892cb755131098967ad1002b95e94cfc0ac 100644 (file)
@@ -1,3 +1,9 @@
+2016-02-26  Martin Jambor  <mjambor@suse.cz>
+
+       PR middle-end/69920
+       * gcc.dg/torture/pr69932.c: New test.
+       * gcc.dg/torture/pr69936.c: Likewise.
+
 2016-02-26  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>
 
        PR target/69709
diff --git a/gcc/testsuite/gcc.dg/torture/pr69932.c b/gcc/testsuite/gcc.dg/torture/pr69932.c
new file mode 100644 (file)
index 0000000..4b82130
--- /dev/null
@@ -0,0 +1,10 @@
+/* { dg-do compile } */
+
+int a;
+void fn1() {
+  int b = 4;
+  short c[4];
+  c[b] = c[a];
+  if (c[2]) {}
+
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr69936.c b/gcc/testsuite/gcc.dg/torture/pr69936.c
new file mode 100644 (file)
index 0000000..3023bbb
--- /dev/null
@@ -0,0 +1,24 @@
+/* { dg-do compile } */
+
+int a;
+char b;
+void fn1(int p1) {}
+
+int fn2() { return 5; }
+
+void fn3() {
+  if (fn2())
+    ;
+  else {
+    char c[5];
+    c[0] = 5;
+  lbl_608:
+    fn1(c[9]);
+    int d = c[9];
+    c[2] | a;
+    d = c[b];
+  }
+  goto lbl_608;
+}
+
+int main() { return 0; }
index 663ded2e121e9a63ee3fac8b1930bbee907c4af5..366f4134e736c4583ee12289d417435e29a2820d 100644 (file)
@@ -3504,7 +3504,8 @@ sra_modify_assign (gimple *stmt, gimple_stmt_iterator *gsi)
       else
        {
          if (access_has_children_p (racc)
-             && !racc->grp_unscalarized_data)
+             && !racc->grp_unscalarized_data
+             && TREE_CODE (lhs) != SSA_NAME)
            {
              if (dump_file)
                {