================
@@ -0,0 +1,232 @@
+// RUN: %clang_analyze_cc1 -verify -analyzer-output=text %s \
+// RUN:   -analyzer-checker=core \
+// RUN:   -analyzer-checker=cplusplus \
+// RUN:   -analyzer-checker=unix \
+// RUN:   -analyzer-checker=unix.Malloc
+
+#include "Inputs/system-header-simulator-for-malloc.h"
+
+//===----------------------------------------------------------------------===//
+// unique_ptr test cases 
+//===----------------------------------------------------------------------===//
+namespace unique_ptr_tests {
+
+// Custom unique_ptr implementation for testing
+template <typename T>
+struct unique_ptr {
+  T* ptr;
+  unique_ptr(T* p) : ptr(p) {}
+  ~unique_ptr() { delete ptr; }
----------------
NagyDonat wrote:

Although the `delete ptr` in this destructor accurately reflects the behavior 
of `unique_ptr`, it is unfortunately a serious confounder for testing the 
heuristic that is added by your commit.

Your new logic tries to eliminate false positives in situations where an object 
is owned by a smart pointer, but the analyzer reports a resource leak because 
it either fails to execute the smart pointer destructor or doesn't understand 
the body of the destructor (which is more likely with `shared_ptr`, where the 
analyzer typically can't follow the reference counting). With this nice 
destructor the results of the tests are inconclusive: even if the new heuristic 
fails, the testcases may still succeed if the analyzer executes and understands 
this destructor.

For this reason I would suggest using an intentionally broken destructor in 
this mock class:
```suggestion
  ~unique_ptr() {
    // This destructor intentionally doesn't delete 'ptr' to validate that the
    // heuristic trusts that smart pointers (based on their class name) will
    // release the pointee even if it doesn't understand their destructor.
  }
```

Note that this also applies to the mocked `shared_ptr` that appears later.

https://github.com/llvm/llvm-project/pull/152751
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to