Skip to content

Commit 1937177

Browse files
committed
fix:
1 parent f66fb5a commit 1937177

File tree

2 files changed

+18
-7
lines changed

2 files changed

+18
-7
lines changed

lib/Core/Executor.cpp

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7384,8 +7384,8 @@ void Executor::setInitializationGraph(
73847384
return;
73857385
}
73867386

7387-
bool isReproducible(const klee::Symbolic &symb) {
7388-
auto arr = symb.array;
7387+
bool isReproducible(const klee::Array *array) {
7388+
auto arr = array;
73897389
bool bad = IrreproducibleSource::classof(arr->source.get());
73907390
if (auto liSource = dyn_cast<LazyInitializationSource>(arr->source.get())) {
73917391
std::vector<const Array *> arrays;
@@ -7401,6 +7401,10 @@ bool isReproducible(const klee::Symbolic &symb) {
74017401
return !bad;
74027402
}
74037403

7404+
bool isIrreproducible(const klee::Array *array) {
7405+
return !isReproducible(array);
7406+
}
7407+
74047408
bool isUninitialized(const klee::Array *array) {
74057409
bool bad = isa<UninitializedSource>(array->source);
74067410
if (bad)
@@ -7410,7 +7414,11 @@ bool isUninitialized(const klee::Array *array) {
74107414
return bad;
74117415
}
74127416

7413-
bool isMakeSymbolic(const klee::Symbolic &symb) {
7417+
bool isReproducibleSymbol(const klee::Symbolic &symb) {
7418+
return isReproducible(symb.array);
7419+
}
7420+
7421+
bool isMakeSymbolicSymbol(const klee::Symbolic &symb) {
74147422
auto array = symb.array;
74157423
bool good = isa<MakeSymbolicSource>(array->source);
74167424
if (!good)
@@ -7461,20 +7469,23 @@ bool Executor::getSymbolicSolution(const ExecutionState &state, KTest &res) {
74617469
std::vector<const Array *> uninitObjects;
74627470
std::copy_if(allObjects.begin(), allObjects.end(),
74637471
std::back_inserter(uninitObjects), isUninitialized);
7472+
std::vector<const Array *> irreproducibleObjects;
7473+
std::copy_if(allObjects.begin(), allObjects.end(),
7474+
std::back_inserter(irreproducibleObjects), isIrreproducible);
74647475

74657476
std::vector<klee::Symbolic> symbolics;
74667477

74677478
if (OnlyOutputMakeSymbolicArrays) {
74687479
std::copy_if(state.symbolics.begin(), state.symbolics.end(),
7469-
std::back_inserter(symbolics), isMakeSymbolic);
7480+
std::back_inserter(symbolics), isMakeSymbolicSymbol);
74707481
} else {
74717482
std::copy_if(state.symbolics.begin(), state.symbolics.end(),
7472-
std::back_inserter(symbolics), isReproducible);
7483+
std::back_inserter(symbolics), isReproducibleSymbol);
74737484
}
74747485

74757486
// we cannot be sure that an irreproducible state proves the presence of an
74767487
// error
7477-
if (uninitObjects.size() > 0 || state.symbolics.size() != symbolics.size()) {
7488+
if (uninitObjects.size() > 0 || irreproducibleObjects.size() > 0) {
74787489
state.error = ReachWithError::None;
74797490
} else if (FunctionCallReproduce != "" &&
74807491
state.error == ReachWithError::Reachable) {

lib/Core/MockBuilder.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,7 @@ void MockBuilder::buildExternalGlobalsDefinitions() {
232232
global->setInitializer(zeroInitializer);
233233
global->setDSOLocal(true);
234234
auto *localPointer = builder->CreateAlloca(elementType, nullptr);
235-
buildCallKleeMakeSymbolic("klee_make_symbolic", localPointer, elementType,
235+
buildCallKleeMakeSymbolic("klee_make_mock", localPointer, elementType,
236236
"external_" + extName);
237237
llvm::Value *localValue = builder->CreateLoad(elementType, localPointer);
238238
builder->CreateStore(localValue, global);

0 commit comments

Comments
 (0)