diff options
-rw-r--r-- | gcc/c/c-typeck.c | 13 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/qual-assign-7.c | 18 |
2 files changed, 21 insertions, 10 deletions
diff --git a/gcc/c/c-typeck.c b/gcc/c/c-typeck.c index 7d58e8d..f68cb01 100644 --- a/gcc/c/c-typeck.c +++ b/gcc/c/c-typeck.c @@ -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 diff --git a/gcc/testsuite/gcc.dg/qual-assign-7.c b/gcc/testsuite/gcc.dg/qual-assign-7.c new file mode 100644 index 0000000..3e064e8 --- /dev/null +++ b/gcc/testsuite/gcc.dg/qual-assign-7.c @@ -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; + + + |