aaron.ballman accepted this revision. aaron.ballman added a comment. This revision is now accepted and ready to land.
I spotted some minor issues, but this LGTM for the initial implementation. Thank you for all your effort on this project!! There are some outstanding issues that should be handled in a follow up, however: void foo() { auto l = (struct S { int x, y; }){ 1, 2 }; // Underspecified declaration, should diagnose _Atomic int i; _Static_assert(_Generic(&i, _Atomic auto *: 1)); // Gets two errors instead of just 1 auto int i = 12; // At local and file scope, now gives: warning: 'auto' storage class specifier is not permitted in C++11, and will not be supported in future releases auto __attribute__((mode(HI))) i = 12; // Gives confused diagnostics, but GCC also doesn't accept currently either _Static_assert(_Generic(i, short : 1)); // But if we accepted the above, this should pass. } but these all seem minor enough to be handled in follow-up work. Do you need me to land this on your behalf? If so, I can fix up the NFC changes I found for you, but what email address would you like me to use for patch attribution? ================ Comment at: clang/lib/Sema/DeclSpec.cpp:1367-1368 + // specifier in a pre-C++11 dialect of C++ or in a pre-C23 dialect of C. + if ((!S.getLangOpts().CPlusPlus11 && !S.getLangOpts().C23) && + TypeSpecType == TST_auto) S.Diag(TSTLoc, diag::ext_auto_type_specifier); ---------------- ================ Comment at: clang/lib/Sema/SemaDecl.cpp:12869 + Diag(Range.getBegin(), diag::err_auto_not_allowed) + << (int)Deduced->getContainedAutoType()->getKeyword() << /* 'here' */ 23 + << Range; ---------------- `/*in array decl*/` instead of `here` ================ Comment at: clang/test/C/C2x/n3007.c:32 + + _Static_assert(_Generic(&i, _Atomic auto *: 1)); // expected-error {{_Atomic cannot be applied to type 'auto' which is not trivially copyable}} \ + expected-error {{'auto' not allowed here}} ---------------- aaron.ballman wrote: > The first error on this line isn't helpful; the second error is the only one > I'd expect to see here. To be clear, I mean this example should have one diagnostic instead of two: ``` _Static_assert(_Generic(&i, _Atomic auto *: 1)); // expected-error {{_Atomic cannot be applied to type 'auto' in C23}} \ expected-error {{'auto' not allowed here}} ``` ================ Comment at: clang/test/Sema/c2x-auto.c:110-111 + _Static_assert(_Generic(str2, const char * : 1)); + _Static_assert(_Generic(b, int * : 1)); +} + ---------------- Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D133289/new/ https://reviews.llvm.org/D133289 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits