]> granicus.if.org Git - clang/commit
[analyzer] Always include destructors in the analysis CFG.
authorJordan Rose <jordan_rose@apple.com>
Wed, 5 Sep 2012 22:55:23 +0000 (22:55 +0000)
committerJordan Rose <jordan_rose@apple.com>
Wed, 5 Sep 2012 22:55:23 +0000 (22:55 +0000)
commit5a1ffe98b04120846a15f7105905b5f363b08635
tree4db4b4b52675ec0b3f4fc401a599b93a8af9b395
parent352c657f789d5633b07d56d76cf78fda05c31353
[analyzer] Always include destructors in the analysis CFG.

While destructors will continue to not be inlined (unless the analyzer
config option 'c++-inlining' is set to 'destructors'), leaving them out
of the CFG is an incomplete model of the behavior of an object, and
can cause false positive warnings (like PR13751, now working).

Destructors for temporaries are still not on by default, since
(a) we haven't actually checked this code to be sure it's fully correct
    (in particular, we probably need to be very careful with regard to
    lifetime-extension when a temporary is bound to a reference,
    C++11 [class.temporary]p5), and
(b) ExprEngine doesn't actually do anything when it sees a temporary
    destructor in the CFG -- not even invalidate the object region.

To enable temporary destructors, set the 'cfg-temporary-dtors' analyzer
config option to '1'. The old -cfg-add-implicit-dtors cc1 option, which
controlled all implicit destructors, has been removed.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163264 91177308-0d34-0410-b5e6-96231b3b80d8
14 files changed:
include/clang/Analysis/AnalysisContext.h
include/clang/Analysis/CFG.h
include/clang/Driver/CC1Options.td
include/clang/StaticAnalyzer/Core/AnalyzerOptions.h
lib/Analysis/AnalysisDeclContext.cpp
lib/Analysis/CFG.cpp
lib/Frontend/CompilerInvocation.cpp
lib/StaticAnalyzer/Core/AnalysisManager.cpp
lib/StaticAnalyzer/Core/AnalyzerOptions.cpp
test/Analysis/auto-obj-dtors-cfg-output.cpp
test/Analysis/dtor.cpp
test/Analysis/dtors-in-dtor-cfg-output.cpp
test/Analysis/malloc.cpp
test/Analysis/temp-obj-dtors-cfg-output.cpp