[clang] [Sema] Mark alias/ifunc targets used and consider mangled names (PR #87130)
Erich Keane via cfe-commits
cfe-commits at lists.llvm.org
Mon Apr 1 08:35:24 PDT 2024
================
@@ -1980,6 +1981,23 @@ static void handleWeakRefAttr(Sema &S, Decl *D, const ParsedAttr &AL) {
D->addAttr(::new (S.Context) WeakRefAttr(S.Context, AL));
}
+// Mark alias/ifunc target as used. For C++, we look up the demangled name
+// ignoring parameters. This should handle the majority of use cases while
+// leaveing false positives for namespace scope names and false negatives in
+// the presence of overloads.
+static void markUsedForAliasOrIfunc(Sema &S, Decl *D, const ParsedAttr &AL,
+ StringRef Str) {
+ char *Demangled = llvm::itaniumDemangle(Str, /*ParseParams=*/false);
+ if (Demangled)
+ Str = Demangled;
+ const DeclarationNameInfo target(&S.Context.Idents.get(Str), AL.getLoc());
+ LookupResult LR(S, target, Sema::LookupOrdinaryName);
+ if (S.LookupQualifiedName(LR, S.getCurLexicalContext()))
+ for (NamedDecl *ND : LR)
+ ND->markUsed(S.Context);
----------------
erichkeane wrote:
> I believe you can put `alias` attributes on non-functions: https://godbolt.org/z/s1PbojYr4.
`ifuncs` cannot, so we perhaps need to be more careful there.
https://github.com/llvm/llvm-project/pull/87130
More information about the cfe-commits
mailing list