aaron.ballman added inline comments.
================ Comment at: clang/include/clang/Parse/Parser.h:1586-1589 + for (const ParsedAttr &A : *this) { + if (A.getSyntax() != ParsedAttr::Syntax::AS_GNU) + return false; + } ---------------- ================ Comment at: clang/include/clang/Parse/Parser.h:1591-1593 + // If the attr list is empty, but the range is still set, we did parse + // some attributes. Return false in this case, even though we might've + // parsed [[]]. ---------------- I would argue that this function should return false in this case because it has no attributes and since it has no attributes, it does not contain *only* GNU attributes. There shouldn't be a need to check `Range.isInvalid()` at all but could instead `return !empty();` and this functionality could be moved to `ParsedAttributes` instead of requiring there to be a range. However, I don't know that this function needs to exist at all (see below). ================ Comment at: clang/lib/Parse/ParseDeclCXX.cpp:1828-1830 + // Allow only GNU attributes here. + if (!attrs.hasOnlyGNUAttributes()) + ProhibitAttributes(attrs); ---------------- We really should be using `ProhibitCXX11Attributes()` here, but that doesn't currently handle the case where it's an empty attribute list. However, we could use the valid source range information in that case to look at the tokens used to decide whether to diagnose or not. CHANGES SINCE LAST ACTION https://reviews.llvm.org/D97362/new/ https://reviews.llvm.org/D97362 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits