aaron.ballman added a comment.

Thank you for working on this, I know it was a slog! I think this is pretty 
close to ready, though you should definitely add a release note about the 
changes.



================
Comment at: clang/include/clang/Parse/Parser.h:1605-1606
   // C99 6.9: External Definitions.
   DeclGroupPtrTy ParseExternalDeclaration(ParsedAttributes &Attrs,
+                                          ParsedAttributes &DeclSpecAttrs,
                                           ParsingDeclSpec *DS = nullptr);
----------------
Should we rename `Attrs` to `DeclaratorAttrs` or something along those lines, 
so it's easier for someone to distinguish which attributes go where? (Same 
suggestion applies throughout the review.)


================
Comment at: clang/lib/Parse/ParseObjc.cpp:67-69
+    for (const auto &PA : Attrs)
+      if (PA.isGNUAttribute())
+        Diag(Tok.getLocation(), diag::err_objc_unexpected_attr);
----------------
llvm::for_each?


================
Comment at: clang/lib/Parse/ParseOpenMP.cpp:1997
 
+  ParsedAttributes EmptyDeclSpecAttrs(AttrFactory);
+
----------------
We can sink this down to the only place it's used in the function, right?


================
Comment at: clang/lib/Parse/Parser.cpp:735-737
+  ParsedAttributes DeclSpecAttrs(AttrFactory);
+  while (MaybeParseCXX11Attributes(attrs) ||
+         MaybeParseGNUAttributes(DeclSpecAttrs))
----------------
We probably could use some comments here explaining why we parse some into one 
container and others into another container.


================
Comment at: clang/lib/Parse/Parser.cpp:1096-1097
+    ParsingDeclSpec &DS, AccessSpecifier AS) {
+  DS.SetRangeStart(DeclSpecAttrs.Range.getBegin());
+  DS.SetRangeEnd(DeclSpecAttrs.Range.getEnd());
+  DS.takeAttributesFrom(DeclSpecAttrs);
----------------
How sure are you that this isn't overwriting existing range data that's 
potentially relevant? e.g., where declaration specifiers and attributes are 
mixed together such that the attribute range doesn't cover all of the 
declaration specifiers?


================
Comment at: clang/test/Parser/attr-order.cpp:20
 __attribute__((cdecl)) __declspec(dllexport) [[noreturn]] void f(); // 
expected-error {{an attribute list cannot appear here}}
-__attribute__((cdecl)) [[noreturn]] __declspec(dllexport) void g(); // 
expected-error {{an attribute list cannot appear here}}
+__attribute__((cdecl)) [[noreturn]] __declspec(dllexport) void g();
 
----------------
This makes me happy!!


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

https://reviews.llvm.org/D137979

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

Reply via email to