diff options
author | Jakub Jelinek <jakub@redhat.com> | 2017-05-22 20:55:29 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2017-05-22 20:55:29 +0200 |
commit | d11c168a673e6a451bbaa7ccde2ed2229d123a94 (patch) | |
tree | 6d918c0e931b961e5663d3b16155ac38e6bfbe1c | |
parent | 655e52652b2af93ae6508dfc2026c6903bf391de (diff) | |
download | gcc-d11c168a673e6a451bbaa7ccde2ed2229d123a94.zip gcc-d11c168a673e6a451bbaa7ccde2ed2229d123a94.tar.gz gcc-d11c168a673e6a451bbaa7ccde2ed2229d123a94.tar.bz2 |
c-fold.c (c_fully_fold_internal): Save the c_fully_fold_internal result for SAVE_EXPR operand and set...
* c-fold.c (c_fully_fold_internal): Save the c_fully_fold_internal
result for SAVE_EXPR operand and set SAVE_EXPR_FOLDED_P even if
it returned invariant. Call tree_invariant_p unconditionally
afterwards to decide whether to return expr or op0.
From-SVN: r248347
-rw-r--r-- | gcc/c/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/c/c-fold.c | 16 |
2 files changed, 13 insertions, 10 deletions
diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog index 0318bcf..292762a 100644 --- a/gcc/c/ChangeLog +++ b/gcc/c/ChangeLog @@ -1,3 +1,10 @@ +2017-05-22 Jakub Jelinek <jakub@redhat.com> + + * c-fold.c (c_fully_fold_internal): Save the c_fully_fold_internal + result for SAVE_EXPR operand and set SAVE_EXPR_FOLDED_P even if + it returned invariant. Call tree_invariant_p unconditionally + afterwards to decide whether to return expr or op0. + 2017-05-22 Nathan Sidwell <nathan@acm.org> * c-decl.c (c_parse_final_cleanups): Drop TDI_tu handling. diff --git a/gcc/c/c-fold.c b/gcc/c/c-fold.c index 1baee44..2601224 100644 --- a/gcc/c/c-fold.c +++ b/gcc/c/c-fold.c @@ -566,21 +566,17 @@ c_fully_fold_internal (tree expr, bool in_init, bool *maybe_const_operands, case SAVE_EXPR: /* Make sure to fold the contents of a SAVE_EXPR exactly once. */ + op0 = TREE_OPERAND (expr, 0); if (!SAVE_EXPR_FOLDED_P (expr)) { - op0 = TREE_OPERAND (expr, 0); op0 = c_fully_fold_internal (op0, in_init, maybe_const_operands, maybe_const_itself, for_int_const); - /* Don't wrap the folded tree in a SAVE_EXPR if we don't - have to. */ - if (tree_invariant_p (op0)) - ret = op0; - else - { - TREE_OPERAND (expr, 0) = op0; - SAVE_EXPR_FOLDED_P (expr) = true; - } + TREE_OPERAND (expr, 0) = op0; + SAVE_EXPR_FOLDED_P (expr) = true; } + /* Return the SAVE_EXPR operand if it is invariant. */ + if (tree_invariant_p (op0)) + ret = op0; goto out; default: |