Remove false path where the default branch in a switch statement would
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
diff --git a/lib/Analysis/GRExprEngine.cpp b/lib/Analysis/GRExprEngine.cpp
index d5b2ce8..6072094 100644
--- a/lib/Analysis/GRExprEngine.cpp
+++ b/lib/Analysis/GRExprEngine.cpp
@@ -562,6 +562,7 @@
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 @@
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 @@
// If we reach here, than we know that the default branch is
// possible.
- builder.generateDefaultCaseNode(DefaultSt);
+ if (DefaultFeasible) builder.generateDefaultCaseNode(DefaultSt);
}
//===----------------------------------------------------------------------===//