[clang] [clang] WIP: Warn on mismatched RequiresCapability attributes (PR #67520)
via cfe-commits
cfe-commits at lists.llvm.org
Wed Sep 27 00:18:05 PDT 2023
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang
<details>
<summary>Changes</summary>
There's a problem with this attribute where the declaration in a header file doesn't have the attribute, but the definition in the source file has. As a result, the attribute doesn't take effect when just the header file is included.
This is a WIP patch to address this problem and emit a warning for it. I'm not sure if this is the best place to do it. As discussed with @<!-- -->AaronBallman on Discord, it can't be done in `Sema::MergeFunctionDecl()`, because this is a late parsed attribute and they aren't available yet when we merge the decl.
---
Full diff: https://github.com/llvm/llvm-project/pull/67520.diff
1 Files Affected:
- (modified) clang/lib/Parse/Parser.cpp (+12)
``````````diff
diff --git a/clang/lib/Parse/Parser.cpp b/clang/lib/Parse/Parser.cpp
index dda1dbaa0c21aa9..befdb43ca4c00ee 100644
--- a/clang/lib/Parse/Parser.cpp
+++ b/clang/lib/Parse/Parser.cpp
@@ -1484,6 +1484,18 @@ Decl *Parser::ParseFunctionDefinition(ParsingDeclarator &D,
if (LateParsedAttrs)
ParseLexedAttributeList(*LateParsedAttrs, Res, false, true);
+ if (Res) {
+ for (const auto *FD : Res->redecls()) {
+ if (FD == Res)
+ continue;
+ if (Res->hasAttr<RequiresCapabilityAttr>() &&
+ !FD->hasAttr<RequiresCapabilityAttr>()) {
+ // Definition has attribute, but the declaration doesn't.
+ llvm::errs() << "AHA!\n";
+ }
+ }
+ }
+
return ParseFunctionStatementBody(Res, BodyScope);
}
``````````
</details>
https://github.com/llvm/llvm-project/pull/67520
More information about the cfe-commits
mailing list