================
@@ -1096,6 +1104,54 @@ class StopTrackingCallback final : public SymbolVisitor {
return true;
}
};
+
+/// EscapeTrackedCallback - A SymbolVisitor that marks allocated symbols as
+/// escaped.
+///
+/// This visitor is used to suppress false positive leak reports when smart
+/// pointers are nested in temporary objects passed by value to functions. When
+/// the analyzer can't see the destructor calls for temporary objects, it may
+/// incorrectly report leaks for memory that will be properly freed by the
smart
+/// pointer destructors.
+///
+/// The visitor traverses reachable symbols from a given set of memory regions
+/// (typically smart pointer field regions) and marks any allocated symbols as
+/// escaped. Escaped symbols are not reported as leaks by checkDeadSymbols.
+class EscapeTrackedCallback final : public SymbolVisitor {
+ ProgramStateRef State;
+
+ explicit EscapeTrackedCallback(ProgramStateRef S) : State(std::move(S)) {}
+
+ bool VisitSymbol(SymbolRef Sym) override {
----------------
NagyDonat wrote:
To me it's a bit strange that `SymbolVisitor::VisitSymbol` was a public virtual
method, but here you override it with `private` visibility. If I understand
correctly, this code will still behave correctly, but for the sake of clarity
I'd prefer moving this override after the `public:` marker unless you have a
concrete reason for not doing so.
https://github.com/llvm/llvm-project/pull/152751
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits