C: Drop qualifiers of assignment expressions. [PR98047]
ISO C17 6.5.15.1 specifies that the result is the type the LHS would have after lvalue conversion. 2020-12-16 Martin Uecker <muecker@gwdg.de> gcc/c/ PR c/98047 * c-typeck.c (build_modify_expr): Drop qualifiers. gcc/testsuite/ PR c/98047 * gcc.dg/qual-assign-7.c: New test.
This commit is contained in:
parent
ec13758ed4
commit
58a45ce44a
2 changed files with 21 additions and 10 deletions
|
@ -6275,16 +6275,9 @@ build_modify_expr (location_t location, tree lhs, tree lhs_origtype,
|
|||
"enum conversion in assignment is invalid in C++");
|
||||
}
|
||||
|
||||
/* If the lhs is atomic, remove that qualifier. */
|
||||
if (is_atomic_op)
|
||||
{
|
||||
lhstype = build_qualified_type (lhstype,
|
||||
(TYPE_QUALS (lhstype)
|
||||
& ~TYPE_QUAL_ATOMIC));
|
||||
olhstype = build_qualified_type (olhstype,
|
||||
(TYPE_QUALS (lhstype)
|
||||
& ~TYPE_QUAL_ATOMIC));
|
||||
}
|
||||
/* Remove qualifiers. */
|
||||
lhstype = build_qualified_type (lhstype, TYPE_UNQUALIFIED);
|
||||
olhstype = build_qualified_type (olhstype, TYPE_UNQUALIFIED);
|
||||
|
||||
/* Convert new value to destination type. Fold it first, then
|
||||
restore any excess precision information, for the sake of
|
||||
|
|
18
gcc/testsuite/gcc.dg/qual-assign-7.c
Normal file
18
gcc/testsuite/gcc.dg/qual-assign-7.c
Normal file
|
@ -0,0 +1,18 @@
|
|||
/* test that assignment drops qualifiers, Bug 98047 */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "" } */
|
||||
|
||||
|
||||
volatile int jv;
|
||||
extern int j;
|
||||
extern typeof(jv = 1) j;
|
||||
|
||||
_Atomic int ja;
|
||||
extern typeof(ja = 1) j;
|
||||
|
||||
int * __restrict pa;
|
||||
extern int *p;
|
||||
extern typeof(pa = 0) p;
|
||||
|
||||
|
||||
|
Loading…
Add table
Reference in a new issue