PR c/66618
commit69cd03b2ac01e37771145044d5307940c2a5a143
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 19 Nov 2017 17:17:01 +0000 (19 17:17 +0000)
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 19 Nov 2017 17:17:01 +0000 (19 17:17 +0000)
tree418d66f5607f88d0a122bfdd9c9fe4038f93d9f8
parentfadadb95c33b4cff5029a6288c4850f1c43a0df4
PR c/66618
PR c/69960
c-family/
* c-common.h (c_fully_fold): Add LVAL argument defaulted to false.
c/
* c-parser.c (c_parser_omp_atomic): Pass true as LVAL to c_fully_fold
where needed.
* c-typeck.c (build_unary_op, build_modify_expr, build_asm_expr,
handle_omp_array_sections): Likewise.
(digest_init): Don't call decl_constant_value_for_optimization.
* c-tree.h (decl_constant_value_for_optimization): Removed.
* c-fold.c (c_fold_array_ref): New function.
(c_fully_fold_internal): Add LVAL argument, propagate it through
recursive calls.  For VAR_P call decl_constant_value and
unshare if not LVAL and either optimizing or IN_INIT.  Remove
decl_constant_value_for_optimization calls.  If IN_INIT and not LVAL,
fold ARRAY_REF with STRING_CST and INTEGER_CST operands.
(c_fully_fold): Add LVAL argument, pass it through to
c_fully_fold_internal.
(decl_constant_value_for_optimization): Removed.
cp/
* cp-gimplify.c (c_fully_fold): Add LVAL argument, call
cp_fold_maybe_rvalue instead of cp_fold_rvalue and pass it !LVAL.
testsuite/
* gcc.dg/pr69960.c: New test.
* gcc.dg/pr66618.c: New test.
* gcc.dg/pr66618-2.c: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@254930 138bc75d-0d04-0410-961f-82ee72b054a4
13 files changed:
gcc/c-family/ChangeLog
gcc/c-family/c-common.h
gcc/c/ChangeLog
gcc/c/c-fold.c
gcc/c/c-parser.c
gcc/c/c-tree.h
gcc/c/c-typeck.c
gcc/cp/ChangeLog
gcc/cp/cp-gimplify.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr66618-2.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/pr66618.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/pr69960.c [new file with mode: 0644]