================
@@ -4688,8 +4681,20 @@ static TypeSourceInfo
*GetFullTypeForDeclarator(TypeProcessingState &state,
}
}
+ // GNU attributes on a declaration (e.g., __attribute__((noderef)) int *p;)
+ // are parsed as part of the DeclSpec, but they are intended to apply to
+ // the first pointer or array declarator chunk encountered. Standard
+ // C++11 attribute syntax `[[clang::noderef]]` has stricter placement
+ // rules and should not "float" to the pointer. If a standard noderef
+ // attribute is found on the DeclSpec, we skip setting `ExpectNoDerefChunk`
+ // to ensure it is diagnosed for being applied to a non-pointer type,
+ // rather than silently moving it to the pointer.
bool ExpectNoDerefChunk =
- state.getCurrentAttributes().hasAttribute(ParsedAttr::AT_NoDeref);
+ std::any_of(state.getCurrentAttributes().begin(),
----------------
zwuis wrote:
We could use `llvm::any_of`.
https://github.com/llvm/llvm-project/pull/190100
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits