diff options
author | Martin Jambor <mjambor@suse.cz> | 2016-02-26 19:06:42 +0100 |
---|---|---|
committer | Martin Jambor <jamborm@gcc.gnu.org> | 2016-02-26 19:06:42 +0100 |
commit | ad2a27062e2837a776fd0e5cb67ef4324c5c9936 (patch) | |
tree | 57bfe8d141752dcadd34f207f3c043a0d32c3a81 | |
parent | 1d11f7ce7081fc9e28ac0a66c6b3f6b7950971d6 (diff) | |
download | gcc-ad2a27062e2837a776fd0e5cb67ef4324c5c9936.zip gcc-ad2a27062e2837a776fd0e5cb67ef4324c5c9936.tar.gz gcc-ad2a27062e2837a776fd0e5cb67ef4324c5c9936.tar.bz2 |
[PR 69920] Prevent SRA from leaving a removed SSA_NAME in IL
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
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/torture/pr69932.c | 10 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/torture/pr69936.c | 24 | ||||
-rw-r--r-- | gcc/tree-sra.c | 3 |
5 files changed, 48 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2668f2e..d9cfd0e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a70a069..5a92889 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -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 index 0000000..4b82130 --- /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 0000000..3023bbb --- /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 663ded2..366f413 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) { |