diff options
| -rw-r--r-- | clang/lib/StaticAnalyzer/Core/ExprEngine.cpp | 2 | ||||
| -rw-r--r-- | clang/test/Analysis/dtor.cpp | 14 | 
2 files changed, 15 insertions, 1 deletions
| diff --git a/clang/lib/StaticAnalyzer/Core/ExprEngine.cpp b/clang/lib/StaticAnalyzer/Core/ExprEngine.cpp index 8f5ba0645f3..04629dc0170 100644 --- a/clang/lib/StaticAnalyzer/Core/ExprEngine.cpp +++ b/clang/lib/StaticAnalyzer/Core/ExprEngine.cpp @@ -606,7 +606,6 @@ void ExprEngine::Visit(const Stmt *S, ExplodedNode *Pred,      // 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, ExplodedNode *Pred,      case Stmt::StringLiteralClass:      case Stmt::ObjCStringLiteralClass:      case Stmt::CXXBindTemporaryExprClass: +    case Stmt::CXXPseudoDestructorExprClass:      case Stmt::SubstNonTypeTemplateParmExprClass:      case Stmt::CXXNullPtrLiteralExprClass: {        Bldr.takeNodes(Pred); diff --git a/clang/test/Analysis/dtor.cpp b/clang/test/Analysis/dtor.cpp index 58bdcea6317..436da2ed9f3 100644 --- a/clang/test/Analysis/dtor.cpp +++ b/clang/test/Analysis/dtor.cpp @@ -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}} +  } +} | 

