aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--lib/Core/Executor.cpp8
-rw-r--r--lib/Module/LowerSwitch.cpp8
2 files changed, 8 insertions, 8 deletions
diff --git a/lib/Core/Executor.cpp b/lib/Core/Executor.cpp
index 64f67b4c..b17b7c40 100644
--- a/lib/Core/Executor.cpp
+++ b/lib/Core/Executor.cpp
@@ -1486,12 +1486,12 @@ void Executor::executeInstruction(ExecutionState &state, KInstruction *ki) {
LLVM_TYPE_Q llvm::IntegerType *Ty =
cast<IntegerType>(si->getCondition()->getType());
ConstantInt *ci = ConstantInt::get(Ty, CE->getZExtValue());
- unsigned index = si->findCaseValue(ci);
+ unsigned index = si->resolveSuccessorIndex(si->findCaseValue(ci));
transferToBasicBlock(si->getSuccessor(index), si->getParent(), state);
} else {
std::map<BasicBlock*, ref<Expr> > targets;
ref<Expr> isDefault = ConstantExpr::alloc(1, Expr::Bool);
- for (unsigned i=1; i<cases; ++i) {
+ for (unsigned i=0; i<cases; ++i) {
ref<Expr> value = evalConstant(si->getCaseValue(i));
ref<Expr> match = EqExpr::create(cond, value);
isDefault = AndExpr::create(isDefault, Expr::createIsZero(match));
@@ -1501,7 +1501,7 @@ void Executor::executeInstruction(ExecutionState &state, KInstruction *ki) {
(void) success;
if (result) {
std::map<BasicBlock*, ref<Expr> >::iterator it =
- targets.insert(std::make_pair(si->getSuccessor(i),
+ targets.insert(std::make_pair(si->getCaseSuccessor(i),
ConstantExpr::alloc(0, Expr::Bool))).first;
it->second = OrExpr::create(match, it->second);
}
@@ -1511,7 +1511,7 @@ void Executor::executeInstruction(ExecutionState &state, KInstruction *ki) {
assert(success && "FIXME: Unhandled solver failure");
(void) success;
if (res)
- targets.insert(std::make_pair(si->getSuccessor(0), isDefault));
+ targets.insert(std::make_pair(si->getDefaultDest(), isDefault));
std::vector< ref<Expr> > conditions;
for (std::map<BasicBlock*, ref<Expr> >::iterator it =
diff --git a/lib/Module/LowerSwitch.cpp b/lib/Module/LowerSwitch.cpp
index 6667a006..852603b8 100644
--- a/lib/Module/LowerSwitch.cpp
+++ b/lib/Module/LowerSwitch.cpp
@@ -96,7 +96,7 @@ void LowerSwitchPass::processSwitchInst(SwitchInst *SI) {
BasicBlock *origBlock = SI->getParent();
BasicBlock *defaultBlock = SI->getDefaultDest();
Function *F = origBlock->getParent();
- Value *switchValue = SI->getOperand(0);
+ Value *switchValue = SI->getCondition();
// Create a new, empty default block so that the new hierarchy of
// if-then statements go to this and the PHI nodes are happy.
@@ -115,9 +115,9 @@ void LowerSwitchPass::processSwitchInst(SwitchInst *SI) {
}
CaseVector cases;
- for (unsigned i = 1; i < SI->getNumSuccessors(); ++i)
- cases.push_back(SwitchCase(SI->getSuccessorValue(i),
- SI->getSuccessor(i)));
+ for (unsigned i = 0; i < SI->getNumCases(); ++i)
+ cases.push_back(SwitchCase(SI->getCaseValue(i),
+ SI->getCaseSuccessor(i)));
// reverse cases, as switchConvert constructs a chain of
// basic blocks by appending to the front. if we reverse,