================
@@ -2681,27 +2693,16 @@ void MallocChecker::HandleOffsetFree(CheckerContext &C, 
SVal ArgVal,
 
 void MallocChecker::HandleUseAfterFree(CheckerContext &C, SourceRange Range,
                                        SymbolRef Sym) const {
-
-  if (!ChecksEnabled[CK_MallocChecker] && !ChecksEnabled[CK_NewDeleteChecker] 
&&
-      !ChecksEnabled[CK_InnerPointerChecker]) {
-    C.addSink();
-    return;
-  }
----------------
NagyDonat wrote:

I'm pretty sure that the _intention_ behind this block (and analogous blocks) 
is that it tries to create a sink node when the checker part that would create 
a bug report is disabled -- but this isn't the actual behavior of this code 
fragment.

As a concrete example, in the test file `new.cpp` there was a symbol (`Sym`) 
allocated with `operator new`, `NewDeleteChecker` was disabled, but 
`MallocChecker` (the checker part `unix.Malloc`) was enabled. In this situation 
the revision before this PR:
- (1) didn't create a sink because `ChecksEnabled[CK_MallocChecker]` was true;
- (2) returned a bit later when `getCheckIfTracked` returned `std::nullopt`.

After this PR `getRelevantFrontendAs<>` will find the frontend that corresponds 
to the `UseFree` bug type and the given `Sym`bol (that is, `NewDeleteChecker`) 
and `handleNullOrDisabled` will recognize that there _is_ a relevant frontend, 
but it's disabled, so it will create a sink before the early return.

https://github.com/llvm/llvm-project/pull/147080
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to