[analyzer] Improve NoOwnershipChangeVisitor's understanding of deallocators
authorKristóf Umann <dkszelethus@gmail.com>
Fri, 4 Feb 2022 14:40:26 +0000 (15:40 +0100)
committerKristóf Umann <dkszelethus@gmail.com>
Thu, 3 Mar 2022 10:27:56 +0000 (11:27 +0100)
commitd832078904c6e1d26648236b9f724f699dafb201
tree78c6b85b6c178ab2ab5ca1c24653b3cfe3a98d03
parentc1b9667148105d99f4792b46805b6a4d2aea4a6e
[analyzer] Improve NoOwnershipChangeVisitor's understanding of deallocators

The problem with leak bug reports is that the most interesting event in the code
is likely the one that did not happen -- lack of ownership change and lack of
deallocation, which is often present within the same function that the analyzer
inlined anyway, but not on the path of execution on which the bug occured. We
struggle to understand that a function was responsible for freeing the memory,
but failed.

D105819 added a new visitor to improve memory leak bug reports. In addition to
inspecting the ExplodedNodes of the bug pat, the visitor tries to guess whether
the function was supposed to free memory, but failed to. Initially (in D108753),
this was done by checking whether a CXXDeleteExpr is present in the function. If
so, we assume that the function was at least party responsible, and prevent the
analyzer from pruning bug report notes in it. This patch improves this heuristic
by recognizing all deallocator functions that MallocChecker itself recognizes,
by reusing MallocChecker::isFreeingCall.

Differential Revision: https://reviews.llvm.org/D118880
clang/lib/StaticAnalyzer/Checkers/MallocChecker.cpp
clang/test/Analysis/NewDeleteLeaks.cpp