aboutsummaryrefslogtreecommitdiff
path: root/gcc/c/c-decl.cc
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2023-05-15 23:17:48 +0000
committerJoseph Myers <joseph@codesourcery.com>2023-05-15 23:17:48 +0000
commitd62d5686f41bb4ea50b8de640fac51decd24199a (patch)
tree497c7c56004b5d89d717108bd9ef60777615ca54 /gcc/c/c-decl.cc
parent2f27218ced2a23819c8fe8ba30ae74911b2c3cf1 (diff)
downloadgcc-d62d5686f41bb4ea50b8de640fac51decd24199a.zip
gcc-d62d5686f41bb4ea50b8de640fac51decd24199a.tar.gz
gcc-d62d5686f41bb4ea50b8de640fac51decd24199a.tar.bz2
c: Ignore _Atomic on function return type for C2x
For C2x it was decided that _Atomic would be completely ignored on function return types (just as was done for qualifiers in C11 DR#423), to eliminate the potential for an rvalue returned by a function having _Atomic-qualified type when an rvalue resulting from lvalue-to-rvalue conversion could not have such a type. Implement this for GCC. Bootstrapped with no regressions for x86_64-pc-linux-gnu. gcc/c/ * c-decl.cc (grokdeclarator): Ignore _Atomic on function return type for C2x. gcc/testsuite/ * gcc.dg/qual-return-9.c, gcc.dg/qual-return-10.c: New tests.
Diffstat (limited to 'gcc/c/c-decl.cc')
-rw-r--r--gcc/c/c-decl.cc7
1 files changed, 5 insertions, 2 deletions
diff --git a/gcc/c/c-decl.cc b/gcc/c/c-decl.cc
index 1b53f2d..90d7cd2 100644
--- a/gcc/c/c-decl.cc
+++ b/gcc/c/c-decl.cc
@@ -7412,9 +7412,12 @@ grokdeclarator (const struct c_declarator *declarator,
them for noreturn functions. The resolution of C11
DR#423 means qualifiers (other than _Atomic) are
actually removed from the return type when
- determining the function type. */
+ determining the function type. For C2X, _Atomic is
+ removed as well. */
int quals_used = type_quals;
- if (flag_isoc11)
+ if (flag_isoc2x)
+ quals_used = 0;
+ else if (flag_isoc11)
quals_used &= TYPE_QUAL_ATOMIC;
if (quals_used && VOID_TYPE_P (type) && really_funcdef)
pedwarn (specs_loc, 0,