]> granicus.if.org Git - clang/commitdiff
Added GREngine support for GotoStmt.
authorTed Kremenek <kremenek@apple.com>
Tue, 12 Feb 2008 21:51:20 +0000 (21:51 +0000)
committerTed Kremenek <kremenek@apple.com>
Tue, 12 Feb 2008 21:51:20 +0000 (21:51 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@47034 91177308-0d34-0410-b5e6-96231b3b80d8

Analysis/GREngine.cpp

index 9858f24784202602f5be513a3707127b58d34a7e..e7720d97a3412580c4e4d47fef6bc83a5055201f 100644 (file)
@@ -168,42 +168,47 @@ void GREngineImpl::HandleBlockExit(CFGBlock * B, ExplodedNodeImpl* Pred) {
       default:
         assert(false && "Analysis for this terminator not implemented.");
         break;
+                
+      case Stmt::BinaryOperatorClass: // '&&' and '||'
+        HandleBranch(cast<BinaryOperator>(Term)->getLHS(), Term, B, Pred);
+        return;
         
       case Stmt::ConditionalOperatorClass:
         HandleBranch(cast<ConditionalOperator>(Term)->getCond(), Term, B, Pred);
-        break;
+        return;
+        
+        // FIXME: Use constant-folding in CFG construction to simplify this
+        // case.
         
       case Stmt::ChooseExprClass:
         HandleBranch(cast<ChooseExpr>(Term)->getCond(), Term, B, Pred);
-        break;
+        return;
         
-      case Stmt::BinaryOperatorClass: // '&&' and '||'
-        HandleBranch(cast<BinaryOperator>(Term)->getLHS(), Term, B, Pred);
-        break;
-        
-      case Stmt::IfStmtClass:
-        HandleBranch(cast<IfStmt>(Term)->getCond(), Term, B, Pred);
-        break;
+      case Stmt::DoStmtClass:
+        HandleBranch(cast<DoStmt>(Term)->getCond(), Term, B, Pred);
+        return;
         
       case Stmt::ForStmtClass:
         HandleBranch(cast<ForStmt>(Term)->getCond(), Term, B, Pred);
+        return;
+        
+      case Stmt::GotoStmtClass:
         break;
         
+      case Stmt::IfStmtClass:
+        HandleBranch(cast<IfStmt>(Term)->getCond(), Term, B, Pred);
+        return;
+        
       case Stmt::WhileStmtClass:
         HandleBranch(cast<WhileStmt>(Term)->getCond(), Term, B, Pred);
-        break;
-        
-      case Stmt::DoStmtClass:
-        HandleBranch(cast<DoStmt>(Term)->getCond(), Term, B, Pred);
-        break;
+        return;
     }
   }
-  else {
-    assert (B->succ_size() == 1 &&
-            "Blocks with no terminator should have at most 1 successor.");
+
+  assert (B->succ_size() == 1 &&
+          "Blocks with no terminator should have at most 1 successor.");
     
-    GenerateNode(BlockEdge(getCFG(),B,*(B->succ_begin())), Pred->State, Pred);    
-  }
+  GenerateNode(BlockEdge(getCFG(),B,*(B->succ_begin())), Pred->State, Pred);
 }
 
 void GREngineImpl::HandleBranch(Expr* Cond, Stmt* Term, CFGBlock * B,