[analyzer] New option to not suppress null return paths if an argument is null.
authorJordan Rose <jordan_rose@apple.com>
Mon, 29 Oct 2012 17:31:59 +0000 (17:31 +0000)
committerJordan Rose <jordan_rose@apple.com>
Mon, 29 Oct 2012 17:31:59 +0000 (17:31 +0000)
commitec44ac6a59d24c02c2f6036efcfb511b5608e009
tree5a452858b792f5b76d9a535dd3c11cd32a83afb4
parent199fdd825f6eb930cea281d5b83615e617e54c2a
[analyzer] New option to not suppress null return paths if an argument is null.

Our one basic suppression heuristic is to assume that functions do not
usually return NULL. However, when one of the arguments is NULL it is
suddenly much more likely that NULL is a valid return value. In this case,
we don't suppress the report here, but we do attach /another/ visitor to
go find out if this NULL argument also comes from an inlined function's
error path.

This new behavior, controlled by the 'avoid-suppressing-null-argument-paths'
analyzer-config option, is turned off by default. Turning it on produced
two false positives and no new true positives when running over LLVM/Clang.

This is one of the possible refinements to our suppression heuristics.
<rdar://problem/12350829>

llvm-svn: 166941
clang/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h
clang/include/clang/StaticAnalyzer/Core/BugReporter/BugReporterVisitor.h
clang/lib/StaticAnalyzer/Core/AnalyzerOptions.cpp
clang/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp
clang/lib/StaticAnalyzer/Core/PathDiagnostic.cpp
clang/test/Analysis/inlining/false-positive-suppression.c