r186927 - [analyzer] Enable pseudo-destructor expressions.
Jordan Rose
jordan_rose at apple.com
Mon Jul 22 19:15:20 PDT 2013
Author: jrose
Date: Mon Jul 22 21:15:20 2013
New Revision: 186927
URL: http://llvm.org/viewvc/llvm-project?rev=186927&view=rev
Log:
[analyzer] Enable pseudo-destructor expressions.
These are cases where a scalar type is "destructed", usually due to
template instantiation (e.g. "obj.~T()", where 'T' is 'int'). This has
no actual effect and the analyzer should just skip over it.
Modified:
cfe/trunk/lib/StaticAnalyzer/Core/ExprEngine.cpp
cfe/trunk/test/Analysis/dtor.cpp
Modified: cfe/trunk/lib/StaticAnalyzer/Core/ExprEngine.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/ExprEngine.cpp?rev=186927&r1=186926&r2=186927&view=diff
==============================================================================
--- cfe/trunk/lib/StaticAnalyzer/Core/ExprEngine.cpp (original)
+++ cfe/trunk/lib/StaticAnalyzer/Core/ExprEngine.cpp Mon Jul 22 21:15:20 2013
@@ -606,7 +606,6 @@ void ExprEngine::Visit(const Stmt *S, Ex
// C++ and ARC stuff we don't support yet.
case Expr::ObjCIndirectCopyRestoreExprClass:
case Stmt::CXXDependentScopeMemberExprClass:
- case Stmt::CXXPseudoDestructorExprClass:
case Stmt::CXXTryStmtClass:
case Stmt::CXXTypeidExprClass:
case Stmt::CXXUuidofExprClass:
@@ -720,6 +719,7 @@ void ExprEngine::Visit(const Stmt *S, Ex
case Stmt::StringLiteralClass:
case Stmt::ObjCStringLiteralClass:
case Stmt::CXXBindTemporaryExprClass:
+ case Stmt::CXXPseudoDestructorExprClass:
case Stmt::SubstNonTypeTemplateParmExprClass:
case Stmt::CXXNullPtrLiteralExprClass: {
Bldr.takeNodes(Pred);
Modified: cfe/trunk/test/Analysis/dtor.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/dtor.cpp?rev=186927&r1=186926&r2=186927&view=diff
==============================================================================
--- cfe/trunk/test/Analysis/dtor.cpp (original)
+++ cfe/trunk/test/Analysis/dtor.cpp Mon Jul 22 21:15:20 2013
@@ -417,3 +417,17 @@ namespace NoReturn {
*x = 47; // no warning
}
}
+
+namespace PseudoDtor {
+ template <typename T>
+ void destroy(T &obj) {
+ clang_analyzer_checkInlined(true); // expected-warning{{TRUE}}
+ obj.~T();
+ }
+
+ void test() {
+ int i;
+ destroy(i);
+ clang_analyzer_eval(true); // expected-warning{{TRUE}}
+ }
+}
More information about the cfe-commits
mailing list