diff options
author | chriseth <chris@ethereum.org> | 2017-07-14 03:04:19 +0800 |
---|---|---|
committer | chriseth <chris@ethereum.org> | 2017-08-23 23:37:35 +0800 |
commit | c9cf24458baa77e2a2de1bedbad5040d0d83aab2 (patch) | |
tree | 75e1ae7b329c81470d3df39b24c564be9cff9740 /libsolidity | |
parent | b3f8ed457a10dab36abaef72310a755a95e0753f (diff) | |
download | dexon-solidity-c9cf24458baa77e2a2de1bedbad5040d0d83aab2.tar.gz dexon-solidity-c9cf24458baa77e2a2de1bedbad5040d0d83aab2.tar.zst dexon-solidity-c9cf24458baa77e2a2de1bedbad5040d0d83aab2.zip |
Prepare build system for Z3.
Diffstat (limited to 'libsolidity')
-rw-r--r-- | libsolidity/CMakeLists.txt | 16 | ||||
-rw-r--r-- | libsolidity/formal/SMTChecker.cpp | 3 |
2 files changed, 18 insertions, 1 deletions
diff --git a/libsolidity/CMakeLists.txt b/libsolidity/CMakeLists.txt index a88d16b8..f7c1a390 100644 --- a/libsolidity/CMakeLists.txt +++ b/libsolidity/CMakeLists.txt @@ -2,5 +2,19 @@ file(GLOB_RECURSE sources "*.cpp" "../libjulia/*.cpp") file(GLOB_RECURSE headers "*.h" "../libjulia/*.h") +find_package(Z3 QUIET) +if (${Z3_FOUND}) + include_directories(${Z3_INCLUDE_DIR}) + add_definitions(-DHAVE_Z3) + message("Z3 SMT solver FOUND.") +else() + message("Z3 SMT solver NOT found.") + list(REMOVE_ITEM sources "${CMAKE_CURRENT_SOURCE_DIR}/formal/Z3Interface.cpp") +endif() + add_library(solidity ${sources} ${headers}) -target_link_libraries(solidity PUBLIC evmasm devcore z3) +target_link_libraries(solidity PUBLIC evmasm devcore) + +if (${Z3_FOUND}) + target_link_libraries(solidity PUBLIC ${Z3_LIBRARY}) +endif()
\ No newline at end of file diff --git a/libsolidity/formal/SMTChecker.cpp b/libsolidity/formal/SMTChecker.cpp index b9e0e8f3..76232c2e 100644 --- a/libsolidity/formal/SMTChecker.cpp +++ b/libsolidity/formal/SMTChecker.cpp @@ -76,6 +76,9 @@ bool SMTChecker::visit(FunctionDefinition const& _function) void SMTChecker::endVisit(FunctionDefinition const&) { // TOOD we could check for "reachability", i.e. satisfiability here. + // We only handle local variables, so we clear everything. + // If we add storage variables, those should be cleared differently. + m_currentSequenceCounter.clear(); m_interface.pop(); m_currentFunction = nullptr; } |