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

Reply via email to