aboutsummaryrefslogtreecommitdiffhomepage
path: root/lib/Basic
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Basic')
-rw-r--r--lib/Basic/CmdLineOptions.cpp13
-rw-r--r--lib/Basic/ConstructSolverChain.cpp102
2 files changed, 59 insertions, 56 deletions
diff --git a/lib/Basic/CmdLineOptions.cpp b/lib/Basic/CmdLineOptions.cpp
index 20c190a5..399c27a2 100644
--- a/lib/Basic/CmdLineOptions.cpp
+++ b/lib/Basic/CmdLineOptions.cpp
@@ -139,6 +139,19 @@ llvm::cl::opt<CoreSolverType> CoreSolverToUse(
clEnumValN(Z3_SOLVER, "z3", "Z3" Z3_IS_DEFAULT_STR),
clEnumValEnd),
llvm::cl::init(DEFAULT_CORE_SOLVER));
+
+llvm::cl::opt<CoreSolverType> DebugCrossCheckCoreSolverWith(
+ "debug-crosscheck-core-solver",
+ llvm::cl::desc(
+ "Specifiy a solver to use for cross checking with the core solver"),
+ llvm::cl::values(clEnumValN(STP_SOLVER, "stp", "stp"),
+ clEnumValN(METASMT_SOLVER, "metasmt", "metaSMT"),
+ clEnumValN(DUMMY_SOLVER, "dummy", "Dummy solver"),
+ clEnumValN(Z3_SOLVER, "z3", "Z3"),
+ clEnumValN(NO_SOLVER, "none",
+ "Do not cross check (default)"),
+ clEnumValEnd),
+ llvm::cl::init(NO_SOLVER));
}
#undef STP_IS_DEFAULT_STR
#undef METASMT_IS_DEFAULT_STR
diff --git a/lib/Basic/ConstructSolverChain.cpp b/lib/Basic/ConstructSolverChain.cpp
index 59790551..2df87d51 100644
--- a/lib/Basic/ConstructSolverChain.cpp
+++ b/lib/Basic/ConstructSolverChain.cpp
@@ -1,4 +1,4 @@
-//===-- ConstructSolverChain.cpp ------------------------------------------------*- C++ -*-===//
+//===-- ConstructSolverChain.cpp ------------------------------------++ -*-===//
//
// The KLEE Symbolic Virtual Machine
//
@@ -14,69 +14,59 @@
#include "klee/CommandLine.h"
#include "llvm/Support/raw_ostream.h"
-namespace klee
-{
- Solver *constructSolverChain(Solver *coreSolver,
- std::string querySMT2LogPath,
- std::string baseSolverQuerySMT2LogPath,
- std::string queryPCLogPath,
- std::string baseSolverQueryPCLogPath)
- {
- Solver *solver = coreSolver;
+namespace klee {
+Solver *constructSolverChain(Solver *coreSolver, std::string querySMT2LogPath,
+ std::string baseSolverQuerySMT2LogPath,
+ std::string queryPCLogPath,
+ std::string baseSolverQueryPCLogPath) {
+ Solver *solver = coreSolver;
- if (optionIsSet(queryLoggingOptions, SOLVER_PC))
- {
- solver = createPCLoggingSolver(solver,
- baseSolverQueryPCLogPath,
- MinQueryTimeToLog);
- llvm::errs() << "Logging queries that reach solver in .pc format to "
- << baseSolverQueryPCLogPath.c_str() << "\n";
- }
+ if (optionIsSet(queryLoggingOptions, SOLVER_PC)) {
+ solver = createPCLoggingSolver(solver, baseSolverQueryPCLogPath,
+ MinQueryTimeToLog);
+ llvm::errs() << "Logging queries that reach solver in .pc format to "
+ << baseSolverQueryPCLogPath.c_str() << "\n";
+ }
- if (optionIsSet(queryLoggingOptions, SOLVER_SMTLIB))
- {
- solver = createSMTLIBLoggingSolver(solver,
- baseSolverQuerySMT2LogPath,
- MinQueryTimeToLog);
- llvm::errs() << "Logging queries that reach solver in .smt2 format to "
- << baseSolverQuerySMT2LogPath.c_str() << "\n";
- }
+ if (optionIsSet(queryLoggingOptions, SOLVER_SMTLIB)) {
+ solver = createSMTLIBLoggingSolver(solver, baseSolverQuerySMT2LogPath,
+ MinQueryTimeToLog);
+ llvm::errs() << "Logging queries that reach solver in .smt2 format to "
+ << baseSolverQuerySMT2LogPath.c_str() << "\n";
+ }
- if (UseFastCexSolver)
- solver = createFastCexSolver(solver);
+ if (UseFastCexSolver)
+ solver = createFastCexSolver(solver);
- if (UseCexCache)
- solver = createCexCachingSolver(solver);
+ if (UseCexCache)
+ solver = createCexCachingSolver(solver);
- if (UseCache)
- solver = createCachingSolver(solver);
+ if (UseCache)
+ solver = createCachingSolver(solver);
- if (UseIndependentSolver)
- solver = createIndependentSolver(solver);
+ if (UseIndependentSolver)
+ solver = createIndependentSolver(solver);
- if (DebugValidateSolver)
- solver = createValidatingSolver(solver, coreSolver);
+ if (DebugValidateSolver)
+ solver = createValidatingSolver(solver, coreSolver);
- if (optionIsSet(queryLoggingOptions, ALL_PC))
- {
- solver = createPCLoggingSolver(solver,
- queryPCLogPath,
- MinQueryTimeToLog);
- llvm::errs() << "Logging all queries in .pc format to "
- << queryPCLogPath.c_str() << "\n";
- }
+ if (optionIsSet(queryLoggingOptions, ALL_PC)) {
+ solver = createPCLoggingSolver(solver, queryPCLogPath, MinQueryTimeToLog);
+ llvm::errs() << "Logging all queries in .pc format to "
+ << queryPCLogPath.c_str() << "\n";
+ }
- if (optionIsSet(queryLoggingOptions, ALL_SMTLIB))
- {
- solver = createSMTLIBLoggingSolver(solver,querySMT2LogPath,
- MinQueryTimeToLog);
- llvm::errs() << "Logging all queries in .smt2 format to "
- << querySMT2LogPath.c_str() << "\n";
- }
-
- return solver;
- }
+ if (optionIsSet(queryLoggingOptions, ALL_SMTLIB)) {
+ solver =
+ createSMTLIBLoggingSolver(solver, querySMT2LogPath, MinQueryTimeToLog);
+ llvm::errs() << "Logging all queries in .smt2 format to "
+ << querySMT2LogPath.c_str() << "\n";
+ }
+ if (DebugCrossCheckCoreSolverWith != NO_SOLVER) {
+ Solver *oracleSolver = createCoreSolver(DebugCrossCheckCoreSolverWith);
+ solver = createValidatingSolver(/*s=*/solver, /*oracle=*/oracleSolver);
+ }
+ return solver;
+}
}
-
-