aboutsummaryrefslogtreecommitdiff
path: root/gcc/c
diff options
context:
space:
mode:
authorMartin Uecker <muecker@gwdg.de>2020-11-20 07:21:40 +0100
committerMartin Uecker <muecker@gwdg.de>2020-11-20 07:34:11 +0100
commit32934a4f45a72144cdcd0712cc294fe88c36f13d (patch)
tree022f80ca6020cfb841771515910a9f920abf6829 /gcc/c
parentd62586ee567bbbdab9fe8bb5829f032431d57098 (diff)
downloadgcc-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/c')
-rw-r--r--gcc/c/c-typeck.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/gcc/c/c-typeck.c b/gcc/c/c-typeck.c
index 413109c..286f3d9c 100644
--- a/gcc/c/c-typeck.c
+++ b/gcc/c/c-typeck.c
@@ -2080,6 +2080,9 @@ convert_lvalue_to_rvalue (location_t loc, struct c_expr exp,
exp = default_function_array_conversion (loc, exp);
if (!VOID_TYPE_P (TREE_TYPE (exp.value)))
exp.value = require_complete_type (loc, exp.value);
+ if (convert_p && !error_operand_p (exp.value)
+ && (TREE_CODE (TREE_TYPE (exp.value)) != ARRAY_TYPE))
+ exp.value = convert (build_qualified_type (TREE_TYPE (exp.value), TYPE_UNQUALIFIED), exp.value);
if (really_atomic_lvalue (exp.value))
{
vec<tree, va_gc> *params;