================
@@ -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
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits