================
@@ -316,103 +316,82 @@ class LifetimeChecker {
}
}
- std::pair<const FunctionDecl *, WarningScope>
- getCanonicalFunctionDeclForAttr(const FunctionDecl *FDef) {
+ // Returns declarations that should be annotated with lifetime attributes
+ // in order to annotate FDef: the canonical declaration and the earliest
+ // redeclarations in each other file. This defines the placement policy for
+ // lifetime annotations. Each target is paired with its corresponding warning
+ // scope.
+ llvm::SmallVector<std::pair<const FunctionDecl *, WarningScope>, 2>
+ getTargetDeclsForAttr(const FunctionDecl *FDef) {
if (!FDef)
- return {nullptr, WarningScope::IntraTU};
+ return {};
assert(FDef->isThisDeclarationADefinition() &&
"Expected FunctionDecl to be a definition");
const auto &SM = FDef->getASTContext().getSourceManager();
- const FileID DefFile =
- SM.getFileID(SM.getExpansionLoc(FDef->getLocation()));
- const FunctionDecl *CanonicalDecl = FDef->getCanonicalDecl();
- WarningScope Scope = WarningScope::IntraTU;
-
- Scope = SM.getFileID(SM.getExpansionLoc(CanonicalDecl->getLocation())) !=
- DefFile
- ? WarningScope::CrossTU
- : WarningScope::IntraTU;
- return {CanonicalDecl, Scope};
- }
-
- std::pair<const CXXMethodDecl *, WarningScope>
- getCanonicalDeclForAttr(const CXXMethodDecl *MDef) {
- auto [CanonicalFDecl, Scope] = getCanonicalFunctionDeclForAttr(MDef);
- return {cast_or_null<CXXMethodDecl>(CanonicalFDecl), Scope};
- }
+ auto GetLoc = [&SM](const FunctionDecl *FD) {
+ return SM.getExpansionLoc(FD->getLocation());
----------------
usx95 wrote:
Consider inlining this in `GetFile`.
https://github.com/llvm/llvm-project/pull/198784
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits