[clang] Propagate lifetimebound from formal parameters to those in the canonical declaration and use that for analysis (PR #107627)
Ilya Biryukov via cfe-commits
cfe-commits at lists.llvm.org
Tue Dec 10 08:55:09 PST 2024
================
@@ -3250,26 +3285,17 @@ static void mergeParamDeclAttributes(ParmVarDecl *newDecl,
diag::note_carries_dependency_missing_first_decl) << 1/*Param*/;
}
- if (!oldDecl->hasAttrs())
- return;
-
- bool foundAny = newDecl->hasAttrs();
-
- // Ensure that any moving of objects within the allocated map is
- // done before we process them.
- if (!foundAny) newDecl->setAttrs(AttrVec());
-
- for (const auto *I : oldDecl->specific_attrs<InheritableParamAttr>()) {
- if (!DeclHasAttr(newDecl, I)) {
- InheritableAttr *newAttr =
- cast<InheritableParamAttr>(I->clone(S.Context));
- newAttr->setInherited(true);
- newDecl->addAttr(newAttr);
- foundAny = true;
- }
- }
-
- if (!foundAny) newDecl->dropAttrs();
+ propagateAttributes(
+ newDecl, oldDecl, [&S](ParmVarDecl *toDecl, const ParmVarDecl *fromDecl) {
+ unsigned found = 0;
+ found += propagateAttribute<InheritableParamAttr>(toDecl, fromDecl, S);
+ // Propagate the lifetimebound attribute from parameters to the
+ // most recent declaration. Note that this doesn't include the implicit
+ // 'this' parameter, as the attribute is applied to the function type in
----------------
ilya-biryukov wrote:
Are you saying we don't handle the `implicit this` at all?
Do you think we could try doing that in `MergeCompatibleFunctionDecls` (particularly, in `mergeDeclAttributes`)?
It's okay to do that in a follow-up.
https://github.com/llvm/llvm-project/pull/107627
More information about the cfe-commits
mailing list