[clang] [SSAF][EntityPointerLevel] Add an intermediate data structure DeclPointerLevel (PR #218196)
Balázs Benics via cfe-commits
cfe-commits at lists.llvm.org
Fri Aug 28 05:01:44 PDT 2026
================
@@ -355,6 +368,59 @@ Expected<EntityPointerLevel> clang::ssaf::createEntityPointerLevel(
return Translator.translate(ND, IsFunRet);
}
+DeclPointerLevels
+clang::ssaf::elaborateHigherDeclPointerLevels(const DeclPointerLevel &DPL) {
+ DeclPointerLevels Result{DPL};
+ QualType T;
+
+ if (DPL.IsReturn) {
+ if (const auto *FD = dyn_cast<FunctionDecl>(DPL.Decl))
+ T = FD->getReturnType().getNonReferenceType();
+ } else if (const auto *VD = dyn_cast<ValueDecl>(DPL.Decl)) {
+ T = VD->getType().getNonReferenceType();
+ }
+ if (T.isNull())
+ return Result;
+
+ // Count the max pointer/array levels of `T`:
+ unsigned MaxLevel = 0;
+ for (T = T.getCanonicalType();; ++MaxLevel) {
+ if (const auto *PT = dyn_cast<PointerType>(T))
+ T = PT->getPointeeType().getCanonicalType();
+ else if (const auto *AT = dyn_cast<ArrayType>(T))
+ T = AT->getElementType().getCanonicalType();
+ else
+ break;
+ }
+
+ for (unsigned Level = DPL.PointerLevel + 1; Level <= MaxLevel; ++Level)
----------------
steakhal wrote:
We should reserve if we know how many push_backs we will call.
https://github.com/llvm/llvm-project/pull/218196
More information about the cfe-commits
mailing list