aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Parse/ParseDecl.cpp
diff options
context:
space:
mode:
authorAaron Ballman <aaron@aaronballman.com>2022-07-29 13:16:10 -0400
committerAaron Ballman <aaron@aaronballman.com>2022-07-29 13:18:44 -0400
commitd8352abd3a4f411828dbe46c7dfd3e935ab4dd4a (patch)
tree0c6bc0ba0e0d0c99bf3c8a6a201088e8d761690b /clang/lib/Parse/ParseDecl.cpp
parentb9a662919344355d81f7eda4c8ebdd3d1ecd808c (diff)
downloadllvm-d8352abd3a4f411828dbe46c7dfd3e935ab4dd4a.zip
llvm-d8352abd3a4f411828dbe46c7dfd3e935ab4dd4a.tar.gz
llvm-d8352abd3a4f411828dbe46c7dfd3e935ab4dd4a.tar.bz2
Diagnose use of _Noreturn on a struct/union field
C99 6.7.4p2 clarifies that a function specifier can only be used in the declaration of a function. _Noreturn is a function specifier, so it is a constraint violation to write it on a structure or union field, but we missed that case. Fixes #56800
Diffstat (limited to 'clang/lib/Parse/ParseDecl.cpp')
-rw-r--r--clang/lib/Parse/ParseDecl.cpp2
1 files changed, 2 insertions, 0 deletions
diff --git a/clang/lib/Parse/ParseDecl.cpp b/clang/lib/Parse/ParseDecl.cpp
index aef9909..fa19c6a0c 100644
--- a/clang/lib/Parse/ParseDecl.cpp
+++ b/clang/lib/Parse/ParseDecl.cpp
@@ -2599,6 +2599,8 @@ void Parser::ParseSpecifierQualifierList(DeclSpec &DS, AccessSpecifier AS,
Diag(DS.getVirtualSpecLoc(), diag::err_typename_invalid_functionspec);
if (DS.hasExplicitSpecifier())
Diag(DS.getExplicitSpecLoc(), diag::err_typename_invalid_functionspec);
+ if (DS.isNoreturnSpecified())
+ Diag(DS.getNoreturnSpecLoc(), diag::err_typename_invalid_functionspec);
DS.ClearFunctionSpecs();
}