diff options
author | Leonardo Alt <leo@ethereum.org> | 2018-08-02 05:27:46 +0800 |
---|---|---|
committer | Leonardo Alt <leo@ethereum.org> | 2018-08-02 05:27:46 +0800 |
commit | 90f319615f12b5a025f4cbc07ac28deb1a61899d (patch) | |
tree | 10183029223400b87fe314faffa16b1b40010435 | |
parent | b6a265551335edeff2f4e43f4a249fabba5381d7 (diff) | |
download | dexon-solidity-90f319615f12b5a025f4cbc07ac28deb1a61899d.tar.gz dexon-solidity-90f319615f12b5a025f4cbc07ac28deb1a61899d.tar.zst dexon-solidity-90f319615f12b5a025f4cbc07ac28deb1a61899d.zip |
SMT model variables are sorted and printed as secondary source location
-rw-r--r-- | libsolidity/formal/SMTChecker.cpp | 14 | ||||
-rw-r--r-- | test/libsolidity/SMTChecker.cpp | 2 |
2 files changed, 12 insertions, 4 deletions
diff --git a/libsolidity/formal/SMTChecker.cpp b/libsolidity/formal/SMTChecker.cpp index 15300bc6..17b50a38 100644 --- a/libsolidity/formal/SMTChecker.cpp +++ b/libsolidity/formal/SMTChecker.cpp @@ -601,15 +601,23 @@ void SMTChecker::checkCondition( message << _description << " happens here"; if (m_currentFunction) { - message << " for:\n"; + std::ostringstream modelMessage; + modelMessage << " for:\n"; solAssert(values.size() == expressionNames.size(), ""); + map<string, string> sortedModel; for (size_t i = 0; i < values.size(); ++i) if (expressionsToEvaluate.at(i).name != values.at(i)) - message << " " << expressionNames.at(i) << " = " << values.at(i) << "\n"; + sortedModel[expressionNames.at(i)] = values.at(i); + + for (auto const& eval: sortedModel) + modelMessage << " " << eval.first << " = " << eval.second << "\n"; + m_errorReporter.warning(_location, message.str() + loopComment, SecondarySourceLocation().append(modelMessage.str(), SourceLocation())); } else + { message << "."; - m_errorReporter.warning(_location, message.str() + loopComment); + m_errorReporter.warning(_location, message.str() + loopComment); + } break; } case smt::CheckResult::UNSATISFIABLE: diff --git a/test/libsolidity/SMTChecker.cpp b/test/libsolidity/SMTChecker.cpp index 497ee867..736aa46c 100644 --- a/test/libsolidity/SMTChecker.cpp +++ b/test/libsolidity/SMTChecker.cpp @@ -110,7 +110,7 @@ BOOST_AUTO_TEST_CASE(simple_assert) function f(uint a) public pure { assert(a == 2); } } )"; - CHECK_WARNING(text, "Assertion violation happens here for"); + CHECK_WARNING(text, "Assertion violation happens here"); } BOOST_AUTO_TEST_CASE(simple_assert_with_require) |