diff options
author | Jordan Rose <jordan_rose@apple.com> | 2013-05-17 02:16:49 +0000 |
---|---|---|
committer | Jordan Rose <jordan_rose@apple.com> | 2013-05-17 02:16:49 +0000 |
commit | fbe4d850352c351b0f59d4bcea4bb118d869ceea (patch) | |
tree | 7899a44e2dea0fc5af09b2b2ed0d252b9780fac0 /clang/lib/StaticAnalyzer/Core/AnalyzerOptions.cpp | |
parent | adaa01590071560b37c5a4833670a7781cb8f890 (diff) | |
download | bcm5719-llvm-fbe4d850352c351b0f59d4bcea4bb118d869ceea.tar.gz bcm5719-llvm-fbe4d850352c351b0f59d4bcea4bb118d869ceea.zip |
[analyzer] Don't inline ~shared_ptr.
The analyzer can't see the reference count for shared_ptr, so it doesn't
know whether a given destruction is going to delete the referenced object.
This leads to spurious leak and use-after-free warnings.
For now, just ban destructors named '~shared_ptr', which catches
std::shared_ptr, std::tr1::shared_ptr, and boost::shared_ptr.
PR15987
llvm-svn: 182071
Diffstat (limited to 'clang/lib/StaticAnalyzer/Core/AnalyzerOptions.cpp')
-rw-r--r-- | clang/lib/StaticAnalyzer/Core/AnalyzerOptions.cpp | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/clang/lib/StaticAnalyzer/Core/AnalyzerOptions.cpp b/clang/lib/StaticAnalyzer/Core/AnalyzerOptions.cpp index 93d4fcdac57..9dcf58babd2 100644 --- a/clang/lib/StaticAnalyzer/Core/AnalyzerOptions.cpp +++ b/clang/lib/StaticAnalyzer/Core/AnalyzerOptions.cpp @@ -140,6 +140,12 @@ bool AnalyzerOptions::mayInlineCXXContainerCtorsAndDtors() { /*Default=*/false); } +bool AnalyzerOptions::mayInlineCXXSharedPtrDtor() { + return getBooleanOption(InlineCXXSharedPtrDtor, + "c++-shared_ptr-inlining", + /*Default=*/false); +} + bool AnalyzerOptions::mayInlineObjCMethod() { return getBooleanOption(ObjCInliningMode, |