aboutsummaryrefslogtreecommitdiffhomepage
path: root/lib/Core
diff options
context:
space:
mode:
authorAndrea Mattavelli <andreamattavelli@users.noreply.github.com>2017-03-01 11:21:06 +0000
committerGitHub <noreply@github.com>2017-03-01 11:21:06 +0000
commit4f5ea494986689dd89f97f9a64082527557c71c9 (patch)
treee49d673744e699506506cbe0a3dc29c215170877 /lib/Core
parente21bf6f653b9c602fe21b74ff7c389aa2430b386 (diff)
parentb7a6aec4eeb4cbbc71d4747d2aa6d25dda41d5d1 (diff)
downloadklee-4f5ea494986689dd89f97f9a64082527557c71c9.tar.gz
Merge pull request #604 from jirislaby/add_casts
convert iterators using static_cast
Diffstat (limited to 'lib/Core')
-rw-r--r--lib/Core/Executor.cpp26
-rw-r--r--lib/Core/StatsTracker.cpp45
2 files changed, 40 insertions, 31 deletions
diff --git a/lib/Core/Executor.cpp b/lib/Core/Executor.cpp
index d8a4a32c..c5d294fb 100644
--- a/lib/Core/Executor.cpp
+++ b/lib/Core/Executor.cpp
@@ -539,7 +539,7 @@ void Executor::initializeGlobals(ExecutionState &state) {
// ensures that we won't conflict. we don't need to allocate a memory object
// since reading/writing via a function pointer is unsupported anyway.
for (Module::iterator i = m->begin(), ie = m->end(); i != ie; ++i) {
- Function *f = i;
+ Function *f = static_cast<Function *>(i);
ref<ConstantExpr> addr(0);
// If the symbol has external weak linkage then it is implicitly
@@ -593,7 +593,8 @@ void Executor::initializeGlobals(ExecutionState &state) {
for (Module::const_global_iterator i = m->global_begin(),
e = m->global_end();
i != e; ++i) {
- size_t globalObjectAlignment = getAllocationAlignment(i);
+ const GlobalVariable *v = static_cast<const GlobalVariable *>(i);
+ size_t globalObjectAlignment = getAllocationAlignment(v);
if (i->isDeclaration()) {
// FIXME: We have no general way of handling unknown external
// symbols. If we really cared about making external stuff work
@@ -626,11 +627,11 @@ void Executor::initializeGlobals(ExecutionState &state) {
}
MemoryObject *mo = memory->allocate(size, /*isLocal=*/false,
- /*isGlobal=*/true, /*allocSite=*/i,
+ /*isGlobal=*/true, /*allocSite=*/v,
/*alignment=*/globalObjectAlignment);
ObjectState *os = bindObjectInState(state, mo, false);
- globalObjects.insert(std::make_pair(i, mo));
- globalAddresses.insert(std::make_pair(i, mo->getBaseExpr()));
+ globalObjects.insert(std::make_pair(v, mo));
+ globalAddresses.insert(std::make_pair(v, mo->getBaseExpr()));
// Program already running = object already initialized. Read
// concrete value and write it to our copy.
@@ -652,13 +653,13 @@ void Executor::initializeGlobals(ExecutionState &state) {
LLVM_TYPE_Q Type *ty = i->getType()->getElementType();
uint64_t size = kmodule->targetData->getTypeStoreSize(ty);
MemoryObject *mo = memory->allocate(size, /*isLocal=*/false,
- /*isGlobal=*/true, /*allocSite=*/&*i,
+ /*isGlobal=*/true, /*allocSite=*/v,
/*alignment=*/globalObjectAlignment);
if (!mo)
llvm::report_fatal_error("out of memory");
ObjectState *os = bindObjectInState(state, mo, false);
- globalObjects.insert(std::make_pair(i, mo));
- globalAddresses.insert(std::make_pair(i, mo->getBaseExpr()));
+ globalObjects.insert(std::make_pair(v, mo));
+ globalAddresses.insert(std::make_pair(v, mo->getBaseExpr()));
if (!i->hasInitializer())
os->initializeToRandom();
@@ -670,7 +671,8 @@ void Executor::initializeGlobals(ExecutionState &state) {
i != ie; ++i) {
// Map the alias to its aliasee's address. This works because we have
// addresses for everything, even undefined functions.
- globalAddresses.insert(std::make_pair(i, evalConstant(i->getAliasee())));
+ globalAddresses.insert(std::make_pair(static_cast<GlobalAlias *>(i),
+ evalConstant(i->getAliasee())));
}
// once all objects are allocated, do the actual initialization
@@ -678,7 +680,8 @@ void Executor::initializeGlobals(ExecutionState &state) {
e = m->global_end();
i != e; ++i) {
if (i->hasInitializer()) {
- MemoryObject *mo = globalObjects.find(i)->second;
+ const GlobalVariable *v = static_cast<const GlobalVariable *>(i);
+ MemoryObject *mo = globalObjects.find(v)->second;
const ObjectState *os = state.addressSpace.findObject(mo);
assert(os);
ObjectState *wos = state.addressSpace.getWriteable(mo, os);
@@ -3543,10 +3546,11 @@ void Executor::runFunctionAsMain(Function *f,
if (ai!=ae) {
arguments.push_back(ConstantExpr::alloc(argc, Expr::Int32));
if (++ai!=ae) {
+ Instruction *first = static_cast<Instruction *>(f->begin()->begin());
argvMO =
memory->allocate((argc + 1 + envc + 1 + 1) * NumPtrBytes,
/*isLocal=*/false, /*isGlobal=*/true,
- /*allocSite=*/f->begin()->begin(), /*alignment=*/8);
+ /*allocSite=*/first, /*alignment=*/8);
if (!argvMO)
klee_error("Could not allocate memory for function arguments");
diff --git a/lib/Core/StatsTracker.cpp b/lib/Core/StatsTracker.cpp
index dbd86524..ccf6e04d 100644
--- a/lib/Core/StatsTracker.cpp
+++ b/lib/Core/StatsTracker.cpp
@@ -165,7 +165,7 @@ static bool instructionIsCoverable(Instruction *i) {
if (it==bb->begin()) {
return true;
} else {
- Instruction *prev = --it;
+ Instruction *prev = static_cast<Instruction *>(--it);
if (isa<CallInst>(prev) || isa<InvokeInst>(prev)) {
Function *target =
getDirectCallTarget(prev, /*moduleIsFullyLinked=*/true);
@@ -539,7 +539,8 @@ void StatsTracker::writeIStats() {
// Always try to write the filename before the function name, as otherwise
// KCachegrind can create two entries for the function, one with an
// unnamed file and one without.
- const InstructionInfo &ii = executor.kmodule->infos->getFunctionInfo(fnIt);
+ Function *fn = static_cast<Function *>(fnIt);
+ const InstructionInfo &ii = executor.kmodule->infos->getFunctionInfo(fn);
if (ii.file != sourceFile) {
of << "fl=" << ii.file << "\n";
sourceFile = ii.file;
@@ -635,9 +636,9 @@ static std::vector<Instruction*> getSuccs(Instruction *i) {
if (i==bb->getTerminator()) {
for (succ_iterator it = succ_begin(bb), ie = succ_end(bb); it != ie; ++it)
- res.push_back(it->begin());
+ res.push_back(static_cast<Instruction *>(it->begin()));
} else {
- res.push_back(++BasicBlock::iterator(i));
+ res.push_back(static_cast<Instruction *>(++BasicBlock::iterator(i)));
}
return res;
@@ -684,18 +685,19 @@ void StatsTracker::computeReachableUncovered() {
bbIt != bb_ie; ++bbIt) {
for (BasicBlock::iterator it = bbIt->begin(), ie = bbIt->end();
it != ie; ++it) {
- if (isa<CallInst>(it) || isa<InvokeInst>(it)) {
- CallSite cs(it);
+ Instruction *inst = static_cast<Instruction *>(it);
+ if (isa<CallInst>(inst) || isa<InvokeInst>(inst)) {
+ CallSite cs(inst);
if (isa<InlineAsm>(cs.getCalledValue())) {
// We can never call through here so assume no targets
// (which should be correct anyhow).
- callTargets.insert(std::make_pair(it,
+ callTargets.insert(std::make_pair(inst,
std::vector<Function*>()));
} else if (Function *target = getDirectCallTarget(
cs, /*moduleIsFullyLinked=*/true)) {
- callTargets[it].push_back(target);
+ callTargets[inst].push_back(target);
} else {
- callTargets[it] =
+ callTargets[inst] =
std::vector<Function*>(km->escapingFunctions.begin(),
km->escapingFunctions.end());
}
@@ -716,14 +718,15 @@ void StatsTracker::computeReachableUncovered() {
std::vector<Instruction *> instructions;
for (Module::iterator fnIt = m->begin(), fn_ie = m->end();
fnIt != fn_ie; ++fnIt) {
+ Function *fn = static_cast<Function *>(fnIt);
if (fnIt->isDeclaration()) {
if (fnIt->doesNotReturn()) {
- functionShortestPath[fnIt] = 0;
+ functionShortestPath[fn] = 0;
} else {
- functionShortestPath[fnIt] = 1; // whatever
+ functionShortestPath[fn] = 1; // whatever
}
} else {
- functionShortestPath[fnIt] = 0;
+ functionShortestPath[fn] = 0;
}
// Not sure if I should bother to preorder here. XXX I should.
@@ -731,13 +734,14 @@ void StatsTracker::computeReachableUncovered() {
bbIt != bb_ie; ++bbIt) {
for (BasicBlock::iterator it = bbIt->begin(), ie = bbIt->end();
it != ie; ++it) {
- instructions.push_back(it);
- unsigned id = infos.getInfo(it).id;
+ Instruction *inst = static_cast<Instruction *>(it);
+ instructions.push_back(inst);
+ unsigned id = infos.getInfo(inst).id;
sm.setIndexedValue(stats::minDistToReturn,
id,
- isa<ReturnInst>(it)
+ isa<ReturnInst>(inst)
#if LLVM_VERSION_CODE < LLVM_VERSION(3, 1)
- || isa<UnwindInst>(it)
+ || isa<UnwindInst>(inst)
#endif
);
}
@@ -790,13 +794,13 @@ void StatsTracker::computeReachableUncovered() {
// that no return instructions are reachable)
Function *f = inst->getParent()->getParent();
if (best != cur
- || (inst == f->begin()->begin()
+ || (inst == static_cast<Instruction *>(f->begin()->begin())
&& functionShortestPath[f] != best)) {
sm.setIndexedValue(stats::minDistToReturn, id, best);
changed = true;
// Update shortest path if this is the entry point.
- if (inst==f->begin()->begin())
+ if (inst == static_cast<Instruction *>(f->begin()->begin()))
functionShortestPath[f] = best;
}
}
@@ -813,8 +817,9 @@ void StatsTracker::computeReachableUncovered() {
bbIt != bb_ie; ++bbIt) {
for (BasicBlock::iterator it = bbIt->begin(), ie = bbIt->end();
it != ie; ++it) {
- unsigned id = infos.getInfo(it).id;
- instructions.push_back(&*it);
+ Instruction *inst = static_cast<Instruction *>(it);
+ unsigned id = infos.getInfo(inst).id;
+ instructions.push_back(inst);
sm.setIndexedValue(stats::minDistToUncovered,
id,
sm.getIndexedValue(stats::uncoveredInstructions, id));