================ @@ -3068,12 +3124,242 @@ void MallocChecker::checkDeadSymbols(SymbolReaper &SymReaper, C.addTransition(state->set<RegionState>(RS), N); } +// Helper function to check if a name is a recognized smart pointer name +static bool isSmartPtrName(StringRef Name) { + return Name == "unique_ptr" || Name == "shared_ptr"; +} + +// Allowlist of owning smart pointers we want to recognize. +// Start with unique_ptr and shared_ptr. (intentionally exclude weak_ptr) +static bool isSmartOwningPtrType(QualType QT) { + QT = QT->getCanonicalTypeUnqualified(); + + // First try TemplateSpecializationType (for std smart pointers) + if (const auto *TST = QT->getAs<TemplateSpecializationType>()) { + const TemplateDecl *TD = TST->getTemplateName().getAsTemplateDecl(); + if (!TD) + return false; + + const auto *ND = dyn_cast_or_null<NamedDecl>(TD->getTemplatedDecl()); + if (!ND) + return false; + + // Check if it's in std namespace + if (!isWithinStdNamespace(ND)) + return false; + + return isSmartPtrName(ND->getName()); + } + + // Also try RecordType (for custom smart pointer implementations) + if (const auto *RD = QT->getAsCXXRecordDecl()) { + // Accept any custom unique_ptr or shared_ptr implementation + return isSmartPtrName(RD->getName()); + } ---------------- NagyDonat wrote:
What is the practical purpose of this block? As far as I see this block returns `true` when it encounters non-template classes named `unique_ptr` or `shared_ptr`, and I don't think that this is an established coding pattern which deserves a separate branch. Is this a block that will never be entered during real-world use of the analyzer or do I misunderstand something here? (If I understand correctly your tests rely on this branch, but I think it's inelegant to tweak the behavior of the actual software in order to slightly simplify the test code. I would prefer using [or writing] a suitable system header simulator.) https://github.com/llvm/llvm-project/pull/152751 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits