diff options
author | Martin Uecker <muecker@gwdg.de> | 2020-11-20 07:21:40 +0100 |
---|---|---|
committer | Martin Uecker <muecker@gwdg.de> | 2020-11-20 07:34:11 +0100 |
commit | 32934a4f45a72144cdcd0712cc294fe88c36f13d (patch) | |
tree | 022f80ca6020cfb841771515910a9f920abf6829 /gcc/gimplify.c | |
parent | d62586ee567bbbdab9fe8bb5829f032431d57098 (diff) | |
download | gcc-32934a4f45a72144cdcd0712cc294fe88c36f13d.zip gcc-32934a4f45a72144cdcd0712cc294fe88c36f13d.tar.gz gcc-32934a4f45a72144cdcd0712cc294fe88c36f13d.tar.bz2 |
C: Drop qualifiers during lvalue conversion [PR97702]
2020-11-20 Martin Uecker <muecker@gwdg.de>
gcc/
* gimplify.c (gimplify_modify_expr_rhs): Optimizie
NOP_EXPRs that contain compound literals.
gcc/c/
* c-typeck.c (convert_lvalue_to_rvalue): Drop qualifiers.
gcc/testsuite/
* gcc.dg/cond-constqual-1.c: Adapt test.
* gcc.dg/lvalue-11.c: New test.
* gcc.dg/pr60195.c: Add warning.
Diffstat (limited to 'gcc/gimplify.c')
-rw-r--r-- | gcc/gimplify.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/gcc/gimplify.c b/gcc/gimplify.c index 2566ec7..fd0b520 100644 --- a/gcc/gimplify.c +++ b/gcc/gimplify.c @@ -5518,6 +5518,19 @@ gimplify_modify_expr_rhs (tree *expr_p, tree *from_p, tree *to_p, return GS_OK; } + case NOP_EXPR: + /* Pull out compound literal expressions from a NOP_EXPR. + Those are created in the C FE to drop qualifiers during + lvalue conversion. */ + if ((TREE_CODE (TREE_OPERAND (*from_p, 0)) == COMPOUND_LITERAL_EXPR) + && tree_ssa_useless_type_conversion (*from_p)) + { + *from_p = TREE_OPERAND (*from_p, 0); + ret = GS_OK; + changed = true; + } + break; + case COMPOUND_LITERAL_EXPR: { tree complit = TREE_OPERAND (*expr_p, 1); |