aboutsummaryrefslogtreecommitdiffstats
path: root/libsolidity/formal
diff options
context:
space:
mode:
authorLeonardo Alt <leo@ethereum.org>2018-07-27 15:14:50 +0800
committerLeonardo Alt <leo@ethereum.org>2018-07-27 22:01:48 +0800
commitb356f6a7f9e4fcdfa0f7df2e938ad735d231e599 (patch)
tree8d463a692f32811f1b5c4f98676b1f778c8c1afc /libsolidity/formal
parentc633ebe2e6abb9799458c5e1730bd8919232f916 (diff)
downloaddexon-solidity-b356f6a7f9e4fcdfa0f7df2e938ad735d231e599.tar.gz
dexon-solidity-b356f6a7f9e4fcdfa0f7df2e938ad735d231e599.tar.zst
dexon-solidity-b356f6a7f9e4fcdfa0f7df2e938ad735d231e599.zip
Setting timeout to Z3 and CVC4
Diffstat (limited to 'libsolidity/formal')
-rw-r--r--libsolidity/formal/CVC4Interface.cpp1
-rw-r--r--libsolidity/formal/SolverInterface.h5
-rw-r--r--libsolidity/formal/Z3Interface.cpp3
3 files changed, 8 insertions, 1 deletions
diff --git a/libsolidity/formal/CVC4Interface.cpp b/libsolidity/formal/CVC4Interface.cpp
index 0cb70d2f..0530e940 100644
--- a/libsolidity/formal/CVC4Interface.cpp
+++ b/libsolidity/formal/CVC4Interface.cpp
@@ -37,6 +37,7 @@ void CVC4Interface::reset()
m_functions.clear();
m_solver.reset();
m_solver.setOption("produce-models", true);
+ m_solver.setTimeLimit(queryTimeout);
}
void CVC4Interface::push()
diff --git a/libsolidity/formal/SolverInterface.h b/libsolidity/formal/SolverInterface.h
index 16796684..a6d65ce2 100644
--- a/libsolidity/formal/SolverInterface.h
+++ b/libsolidity/formal/SolverInterface.h
@@ -231,8 +231,11 @@ public:
/// is available. Throws SMTSolverError on error.
virtual std::pair<CheckResult, std::vector<std::string>>
check(std::vector<Expression> const& _expressionsToEvaluate) = 0;
-};
+protected:
+ // SMT query timeout in milliseconds.
+ static int const queryTimeout = 10000;
+};
}
}
diff --git a/libsolidity/formal/Z3Interface.cpp b/libsolidity/formal/Z3Interface.cpp
index 7e0788b3..b57bcb94 100644
--- a/libsolidity/formal/Z3Interface.cpp
+++ b/libsolidity/formal/Z3Interface.cpp
@@ -28,7 +28,10 @@ using namespace dev::solidity::smt;
Z3Interface::Z3Interface():
m_solver(m_context)
{
+ // This needs to be set globally.
z3::set_param("rewriter.pull_cheap_ite", true);
+ // This needs to be set in the context.
+ m_context.set("timeout", queryTimeout);
}
void Z3Interface::reset()