From ad2a27062e2837a776fd0e5cb67ef4324c5c9936 Mon Sep 17 00:00:00 2001 From: Martin Jambor Date: Fri, 26 Feb 2016 19:06:42 +0100 Subject: [PATCH] [PR 69920] Prevent SRA from leaving a removed SSA_NAME in IL 2016-02-26 Martin Jambor 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 | 6 ++++++ gcc/testsuite/ChangeLog | 6 ++++++ gcc/testsuite/gcc.dg/torture/pr69932.c | 10 ++++++++++ gcc/testsuite/gcc.dg/torture/pr69936.c | 24 ++++++++++++++++++++++++ gcc/tree-sra.c | 3 ++- 5 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.dg/torture/pr69932.c create mode 100644 gcc/testsuite/gcc.dg/torture/pr69936.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2668f2e7c694..d9cfd0e08f52 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2016-02-26 Martin Jambor + + 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 PR target/69709 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a70a06970bc6..5a928892cb75 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2016-02-26 Martin Jambor + + PR middle-end/69920 + * gcc.dg/torture/pr69932.c: New test. + * gcc.dg/torture/pr69936.c: Likewise. + 2016-02-26 Andreas Krebbel 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 index 000000000000..4b82130157be --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr69932.c @@ -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 index 000000000000..3023bbbb1c47 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr69936.c @@ -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; } diff --git a/gcc/tree-sra.c b/gcc/tree-sra.c index 663ded2e121e..366f4134e736 100644 --- a/gcc/tree-sra.c +++ b/gcc/tree-sra.c @@ -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) { -- 2.47.2