tbaeder added a comment.

I'm looking at this again and I am not sure how it is meant to work. For 
example in `Parser::parseClassSpecifier` in `ParseDeclCXX.cpp`.
Here `attrs` is a local variable of type `ParsedAttributesWithRange`, already 
before my patch. `attrs` is then passed to

1. `MaybeParseGNUAttributes`
2. `MaybeParseMicrosoftDeclSpecs`
3. `ParseMicrosoftInheritanceClassAttributes`
4. `MaybeParseCXX11Attributes`

and later `parseClassSpecifier` calls `ProhibitAttributes(attrs)` a few times. 
`ProhibitAttributes` in turn will not do anything if the given attrs have an 
invalid (i.e. unset) range.
So, how could they ever have a valid range set? All the four functions above 
only take a  `ParsedAttributes`, no range.

This is one of the cases that now (that `MaybeParseGNUAttributes` sets the 
range of the given `attrs` if it really parses attributes) generates errors in 
various test cases.
For example in `clang/test/AST/ast-print-record-decl.c`: File 
/home/tbaeder/llvm-project/clang/test/AST/ast-print-record-decl.c Line 209: an 
attribute list cannot appear here

Am I missing something?


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

https://reviews.llvm.org/D75844



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
  • [PATCH] D75844: [clang] Set ... Timm Bäder via Phabricator via cfe-commits

Reply via email to