]> granicus.if.org Git - clang/commitdiff
Reduce nesting by using early exits. No functionality change.
authorTed Kremenek <kremenek@apple.com>
Thu, 17 Dec 2009 19:17:27 +0000 (19:17 +0000)
committerTed Kremenek <kremenek@apple.com>
Thu, 17 Dec 2009 19:17:27 +0000 (19:17 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@91610 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Analysis/GRExprEngine.cpp

index b9563d280fa1ce504cbb831a3199c1f6df77ef33..017f0682efcd1a87d0c45b642e7a8d6526fc1cac 100644 (file)
@@ -334,44 +334,55 @@ const GRState* GRExprEngine::getInitialState(const LocationContext *InitLoc) {
 
   // FIXME: It would be nice if we had a more general mechanism to add
   // such preconditions.  Some day.
-  const Decl *D = InitLoc->getDecl();
-  
-  if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
-    // Precondition: the first argument of 'main' is an integer guaranteed
-    //  to be > 0.
-    if (const IdentifierInfo *II = FD->getIdentifier()) {
-      if (II->getName() == "main" && FD->getNumParams() > 0) {
-        const ParmVarDecl *PD = FD->getParamDecl(0);
-        QualType T = PD->getType();
-        if (T->isIntegerType())
-          if (const MemRegion *R = state->getRegion(PD, InitLoc)) {
-            SVal V = state->getSVal(loc::MemRegionVal(R));
-            SVal Constraint_untested = EvalBinOp(state, BinaryOperator::GT, V,
-                                                 ValMgr.makeZeroVal(T),
-                                                 getContext().IntTy);
-
-            if (DefinedOrUnknownSVal *Constraint =
-                dyn_cast<DefinedOrUnknownSVal>(&Constraint_untested)) {
-              if (const GRState *newState = state->Assume(*Constraint, true))
-                state = newState;
-            }
-          }
-      }
+  do {
+    const Decl *D = InitLoc->getDecl();  
+    if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
+      // Precondition: the first argument of 'main' is an integer guaranteed
+      //  to be > 0.
+      const IdentifierInfo *II = FD->getIdentifier();
+      if (!II || !(II->getName() == "main" && FD->getNumParams() > 0))
+        break;
+
+      const ParmVarDecl *PD = FD->getParamDecl(0);
+      QualType T = PD->getType();
+      if (!T->isIntegerType())
+        break;
+    
+      const MemRegion *R = state->getRegion(PD, InitLoc);
+      if (!R)
+        break;
+    
+      SVal V = state->getSVal(loc::MemRegionVal(R));
+      SVal Constraint_untested = EvalBinOp(state, BinaryOperator::GT, V,
+                                           ValMgr.makeZeroVal(T),
+                                           getContext().IntTy);
+
+      DefinedOrUnknownSVal *Constraint =
+        dyn_cast<DefinedOrUnknownSVal>(&Constraint_untested);
+      
+      if (!Constraint)
+        break;
+      
+      if (const GRState *newState = state->Assume(*Constraint, true))
+        state = newState;
+      
+      break;
     }
-  }
-  else if (const ObjCMethodDecl *MD = dyn_cast<ObjCMethodDecl>(D)) {    
-    // Precondition: 'self' is always non-null upon entry to an Objective-C
-    // method.
-    const ImplicitParamDecl *SelfD = MD->getSelfDecl();
-    const MemRegion *R = state->getRegion(SelfD, InitLoc);
-    SVal V = state->getSVal(loc::MemRegionVal(R));
+
+    if (const ObjCMethodDecl *MD = dyn_cast<ObjCMethodDecl>(D)) {    
+      // Precondition: 'self' is always non-null upon entry to an Objective-C
+      // method.
+      const ImplicitParamDecl *SelfD = MD->getSelfDecl();
+      const MemRegion *R = state->getRegion(SelfD, InitLoc);
+      SVal V = state->getSVal(loc::MemRegionVal(R));
     
-    if (const Loc *LV = dyn_cast<Loc>(&V)) {
-      // Assume that the pointer value in 'self' is non-null.
-      state = state->Assume(*LV, true);
-      assert(state && "'self' cannot be null");
+      if (const Loc *LV = dyn_cast<Loc>(&V)) {
+        // Assume that the pointer value in 'self' is non-null.
+        state = state->Assume(*LV, true);
+        assert(state && "'self' cannot be null");
+      }
     }
-  }
+  } while (0);
   
   return state;
 }