Author: Aaron Ballman Date: 2024-11-08T07:46:01-05:00 New Revision: 0daca808ce111f21db8c0ee9ea5d2509d6034557
URL: https://github.com/llvm/llvm-project/commit/0daca808ce111f21db8c0ee9ea5d2509d6034557 DIFF: https://github.com/llvm/llvm-project/commit/0daca808ce111f21db8c0ee9ea5d2509d6034557.diff LOG: Fix issues with WG14 N3344 changes This amends 24e2e259a06d9aa67dc278ac24dcb98da9dd63f6 with a fix for 'register void *', which is still okay as a function parameter. Added: Modified: clang/lib/Sema/SemaDecl.cpp clang/test/C/C2y/n3344.c Removed: ################################################################################ diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index c9cd81a48fbe51..6b0b4840a1eb2c 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -15021,7 +15021,8 @@ Decl *Sema::ActOnParamDeclarator(Scope *S, Declarator &D, : diag::warn_deprecated_register) << FixItHint::CreateRemoval(DS.getStorageClassSpecLoc()); } else if (!getLangOpts().CPlusPlus && - DS.getTypeSpecType() == DeclSpec::TST_void) { + DS.getTypeSpecType() == DeclSpec::TST_void && + D.getNumTypeObjects() == 0) { Diag(DS.getStorageClassSpecLoc(), diag::err_invalid_storage_class_in_func_decl) << FixItHint::CreateRemoval(DS.getStorageClassSpecLoc()); diff --git a/clang/test/C/C2y/n3344.c b/clang/test/C/C2y/n3344.c index b9c291d9f1dfa1..8123bb3ebae854 100644 --- a/clang/test/C/C2y/n3344.c +++ b/clang/test/C/C2y/n3344.c @@ -16,6 +16,7 @@ void baz(volatile void); // expected-error {{'void' as parameter must not have type qualifiers}} void bar(const void); // expected-error {{'void' as parameter must not have type qualifiers}} void foo(register void); // expected-error {{invalid storage class specifier in function declarator}} +void foop(void register); // expected-error {{invalid storage class specifier in function declarator}} void quux(static void); // expected-error {{invalid storage class specifier in function declarator}} void quobble(auto void); // expected-error {{invalid storage class specifier in function declarator}} void quubble(extern void); // expected-error {{invalid storage class specifier in function declarator}} @@ -28,3 +29,7 @@ void quabble(_Thread_local void); // expected-error {{'_Thread_local' is only al #endif void bing(void, ...); // expected-error {{'void' must be the first and only parameter if specified}} +// These declarations are fine. +void one(register void *); +void two(void register *); +void three(register void * (*)[4]); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits