Fix ICE on unique errors

This commit is contained in:
Leo Alt 2021-09-06 22:23:24 +02:00
parent 3e2e3d1baa
commit d91f75deb8
3 changed files with 28 additions and 7 deletions

View File

@ -58,11 +58,7 @@ public:
void warning(ErrorId _error, std::string const& _description)
{
if (!seen(_error, {}, _description))
{
m_errorReporter.warning(_error, _description);
markAsSeen(_error, {}, _description);
}
m_errorReporter.warning(_error, _description);
}
bool seen(ErrorId _error, SourceLocation const& _location, std::string const& _description) const
@ -77,8 +73,8 @@ public:
void markAsSeen(ErrorId _error, SourceLocation const& _location, std::string const& _description)
{
solAssert(!seen(_error, _location, _description), "");
m_seenErrors[{_error, _location}] = _description;
if (_location != SourceLocation{})
m_seenErrors[{_error, _location}] = _description;
}
ErrorList const& errors() const { return m_errorReporter.errors(); }

View File

@ -35,6 +35,7 @@ SMTCheckerTest::SMTCheckerTest(string const& _filename): SyntaxTest(_filename, E
else
BOOST_THROW_EXCEPTION(runtime_error("Invalid SMT \"show unproved\" choice."));
m_modelCheckerSettings.solvers = smtutil::SMTSolverChoice::None();
auto const& choice = m_reader.stringSetting("SMTSolvers", "any");
if (choice == "any")
m_modelCheckerSettings.solvers = smtutil::SMTSolverChoice::All();

View File

@ -0,0 +1,24 @@
==== Source: a.sol ====
contract A {
uint x;
}
==== Source: b.sol ====
import "a.sol";
contract B is A {
function g() public view { assert(x > x); }
}
==== Source: c.sol ====
import "b.sol";
contract C is B {
function h(uint x) public pure { assert(x < x); }
}
// ====
// SMTEngine: all
// SMTSolvers: smtlib2
// ----
// Warning 6328: (b.sol:62-75): CHC: Assertion violation might happen here.
// Warning 3996: CHC analysis was not possible. No Horn solver was available. None of the installed solvers was enabled.
// Warning 7812: (b.sol:62-75): BMC: Assertion violation might happen here.
// Warning 8084: BMC analysis was not possible. No SMT solver (Z3 or CVC4) was available. None of the installed solvers was enabled.
// Warning 6328: (c.sol:68-81): CHC: Assertion violation might happen here.
// Warning 7812: (c.sol:68-81): BMC: Assertion violation might happen here.