@@ -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+
74047408bool 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) {
0 commit comments