Explicitly handle CXXOperatorCallExpr when building CFGs. We should treat it the...
authorTed Kremenek <kremenek@apple.com>
Tue, 31 Aug 2010 18:47:34 +0000 (18:47 +0000)
committerTed Kremenek <kremenek@apple.com>
Tue, 31 Aug 2010 18:47:34 +0000 (18:47 +0000)
Fixes: <rdar://problem/8375510> [Boost] CFGBuilder crash in Boost.Graph
llvm-svn: 112618

clang/lib/Analysis/CFG.cpp
clang/test/Analysis/misc-ps-region-store.cpp

index 78979a4feeb4a655b082d957903fe3632dfd51e8..562763b8b453dd30677ceef004d915ec4a962660 100644 (file)
@@ -370,6 +370,7 @@ tryAgain:
       return VisitBreakStmt(cast<BreakStmt>(S));
 
     case Stmt::CallExprClass:
+    case Stmt::CXXOperatorCallExprClass:
       return VisitCallExpr(cast<CallExpr>(S), asc);
 
     case Stmt::CaseStmtClass:
@@ -393,7 +394,7 @@ tryAgain:
     case Stmt::CXXExprWithTemporariesClass: {
       // FIXME: Handle temporaries.  For now, just visit the subexpression
       // so we don't artificially create extra blocks.
-      return Visit(cast<CXXExprWithTemporaries>(S)->getSubExpr());    
+      return Visit(cast<CXXExprWithTemporaries>(S)->getSubExpr(), asc);
     }
 
     case Stmt::CXXMemberCallExprClass:
index baaa2f6cbd071a6564518b8dea36de0bb9e1f38e..bfa5e5cbb9b07340b2b50e38955d46349d9e13fb 100644 (file)
@@ -148,3 +148,14 @@ void pr7675_test() {
   *p = 0xDEADBEEF; // expected-warning{{null pointer}}
 }
 
+// <rdar://problem/8375510> - CFGBuilder should handle temporaries.
+struct R8375510 {
+  R8375510();
+  ~R8375510();
+  R8375510 operator++(int);
+};
+
+int r8375510(R8375510 x, R8375510 y) {
+  for (; ; x++) { }
+}
+