aaron.ballman requested changes to this revision.
aaron.ballman added a reviewer: aaron.ballman.
aaron.ballman added inline comments.


================
Comment at: clang/lib/Parse/ParseTentative.cpp:773
+  while (Tok.isOneOf(tok::l_square, tok::kw___attribute, tok::kw___declspec,
+                     tok::kw_alignas)) {
+    if (Tok.is(tok::l_square)) {
----------------
Do we need to also skip other keyword attributes as well as `alignas`? For 
instance, `tok::kw__Noreturn` or `tok::kw__Alignas`


================
Comment at: clang/lib/Parse/ParseTentative.cpp:779
+      ConsumeBracket();
+      if (!SkipUntil(tok::r_square) || Tok.isNot(tok::r_square))
+        return false;
----------------
I think this gets the parsing logic wrong when there is a balanced `[]` that is 
not part of the attribute introducer syntax, such as finding an array in the 
middle of the attribute argument clause. A test case would be handy, like:
```
constexpr int foo[] = { 2, 4 };
[[gnu::assume_aligned(foo[0])]] int *func() { return nullptr; }
```
You should probably use a `BalancedDelimiterTracker` to handle the brackets.


================
Comment at: clang/lib/Parse/ParseTentative.cpp:789
+      ConsumeParen();
+      if (!SkipUntil(tok::r_paren))
+        return false;
----------------
If we're skipping `__attribute__(())`, this looks to miss the second closing 
right paren. Also, this logic won't work if we need to skip `_Noreturn`, which 
has no parens.

This branch is missing test coverage.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D74643/new/

https://reviews.llvm.org/D74643



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to