[clang] Thread Safety Analysis: Support attributes on function pointers (PR #191187)
Aaron Puchert via cfe-commits
cfe-commits at lists.llvm.org
Sun Apr 19 15:39:59 PDT 2026
================
@@ -374,6 +379,29 @@ til::SExpr *SExprBuilder::translate(const Stmt *S, CallingContext *Ctx) {
return new (Arena) til::Undefined(S);
}
+/// Helper to extract the canonical parameter declaration from a function or
+/// function pointer. This unwraps pointer and reference types to reach the
+/// underlying function prototype.
+static const ParmVarDecl *getCanonicalParamDecl(const Decl *D, unsigned I) {
+ if (const auto *FD = dyn_cast<FunctionDecl>(D))
+ return FD->getCanonicalDecl()->getParamDecl(I);
+ if (const auto *MD = dyn_cast<ObjCMethodDecl>(D))
+ return MD->getCanonicalDecl()->getParamDecl(I);
+ if (const auto *DD = dyn_cast<DeclaratorDecl>(D)) {
+ if (auto *TSI = DD->getTypeSourceInfo()) {
+ TypeLoc TL = TSI->getTypeLoc();
+ if (auto RTL = TL.getAsAdjusted<ReferenceTypeLoc>())
+ TL = RTL.getPointeeLoc();
+ while (auto PTL = TL.getAsAdjusted<PointerTypeLoc>())
+ TL = PTL.getPointeeLoc();
----------------
aaronpuchert wrote:
So we're willing to unwrap multiple levels of pointer types?
https://github.com/llvm/llvm-project/pull/191187
More information about the cfe-commits
mailing list