]> granicus.if.org Git - clang/commitdiff
Remove false path where the default branch in a switch statement would
authorTed Kremenek <kremenek@apple.com>
Wed, 23 Apr 2008 05:03:18 +0000 (05:03 +0000)
committerTed Kremenek <kremenek@apple.com>
Wed, 23 Apr 2008 05:03:18 +0000 (05:03 +0000)
always be taken even if it was not feasible.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@50132 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Analysis/GRExprEngine.cpp

index d5b2ce8b358592b83085a3a55f1e6741cd85f538..6072094d057bac12565b97212cc03b3b52fd77c0 100644 (file)
@@ -562,6 +562,7 @@ void GRExprEngine::ProcessSwitch(SwitchNodeBuilder& builder) {
 
   APSInt V1(bits, false);
   APSInt V2 = V1;
+  bool DefaultFeasible = false;
   
   for (iterator I = builder.begin(), EI = builder.end(); I != EI; ++I) {
 
@@ -617,8 +618,10 @@ void GRExprEngine::ProcessSwitch(SwitchNodeBuilder& builder) {
       isFeasible = false;
       StNew = Assume(DefaultSt, Res, false, isFeasible);
       
-      if (isFeasible)
+      if (isFeasible) {
+        DefaultFeasible = true;
         DefaultSt = StNew;
+      }
 
       // Concretize the next value in the range.
       if (V1 == V2)
@@ -632,7 +635,7 @@ void GRExprEngine::ProcessSwitch(SwitchNodeBuilder& builder) {
   
   // If we reach here, than we know that the default branch is
   // possible.  
-  builder.generateDefaultCaseNode(DefaultSt);
+  if (DefaultFeasible) builder.generateDefaultCaseNode(DefaultSt);
 }
 
 //===----------------------------------------------------------------------===//