diff options
author | Jakub Jelinek <jakub@redhat.com> | 2018-03-13 00:39:21 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2018-03-13 00:39:21 +0100 |
commit | 038df1baecf93ad9d17ba7deafb47e99b3e287ad (patch) | |
tree | 50a4b18f4d9d892def8a79913f59eb011ab21f5a | |
parent | 97ca95ac6fb17297f40e160d86c29cbcb3488270 (diff) | |
download | gcc-038df1baecf93ad9d17ba7deafb47e99b3e287ad.zip gcc-038df1baecf93ad9d17ba7deafb47e99b3e287ad.tar.gz gcc-038df1baecf93ad9d17ba7deafb47e99b3e287ad.tar.bz2 |
re PR c++/84704 (internal compiler error: gimplification failed)
PR c++/84704
* tree.c (stabilize_reference_1): Return save_expr (e) for
STATEMENT_LIST even if it doesn't have side-effects.
* g++.dg/debug/pr84704.C: New test.
From-SVN: r258470
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/debug/pr84704.C | 11 | ||||
-rw-r--r-- | gcc/tree.c | 5 |
4 files changed, 27 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6af8d2f..e6fb95b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2018-03-13 Jakub Jelinek <jakub@redhat.com> + + PR c++/84704 + * tree.c (stabilize_reference_1): Return save_expr (e) for + STATEMENT_LIST even if it doesn't have side-effects. + 2018-03-12 Jonathan Wakely <jwakely@redhat.com> * doc/invoke.texi (-mclflushopt): Fix spelling of option. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 5880171..da617c7 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2018-03-13 Jakub Jelinek <jakub@redhat.com> + + PR c++/84704 + * g++.dg/debug/pr84704.C: New test. + 2018-03-12 Renlin Li <renlin.li@arm.com> * gcc.target/aarch64/movi_hf.c: New. diff --git a/gcc/testsuite/g++.dg/debug/pr84704.C b/gcc/testsuite/g++.dg/debug/pr84704.C new file mode 100644 index 0000000..3043edb --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/pr84704.C @@ -0,0 +1,11 @@ +// PR c++/84704 +// { dg-do compile } +// { dg-options "-g -fcompare-debug -O2" } + +int a[1] = { 0 }; + +void +foo () +{ + a[({ 0; })] %= 5; +} @@ -4352,6 +4352,11 @@ stabilize_reference_1 (tree e) switch (TREE_CODE_CLASS (code)) { case tcc_exceptional: + /* Always wrap STATEMENT_LIST into SAVE_EXPR, even if it doesn't + have side-effects. */ + if (code == STATEMENT_LIST) + return save_expr (e); + /* FALLTHRU */ case tcc_type: case tcc_declaration: case tcc_comparison: |