mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Deprecate pragma experimental SMTChecker
This commit is contained in:
@@ -21,6 +21,8 @@
|
||||
#include <libsmtutil/Z3Interface.h>
|
||||
#endif
|
||||
|
||||
#include <range/v3/algorithm/any_of.hpp>
|
||||
|
||||
using namespace std;
|
||||
using namespace solidity;
|
||||
using namespace solidity::util;
|
||||
@@ -34,6 +36,7 @@ ModelChecker::ModelChecker(
|
||||
ReadCallback::Callback const& _smtCallback,
|
||||
smtutil::SMTSolverChoice _enabledSolvers
|
||||
):
|
||||
m_errorReporter(_errorReporter),
|
||||
m_settings(_settings),
|
||||
m_context(),
|
||||
m_bmc(m_context, _errorReporter, _smtlib2Responses, _smtCallback, _enabledSolvers, m_settings),
|
||||
@@ -41,9 +44,43 @@ ModelChecker::ModelChecker(
|
||||
{
|
||||
}
|
||||
|
||||
// TODO This should be removed for 0.9.0.
|
||||
void ModelChecker::enableAllEnginesIfPragmaPresent(vector<shared_ptr<SourceUnit>> const& _sources)
|
||||
{
|
||||
bool hasPragma = ranges::any_of(_sources, [](auto _source) {
|
||||
return _source && _source->annotation().experimentalFeatures.count(ExperimentalFeature::SMTChecker);
|
||||
});
|
||||
if (hasPragma)
|
||||
m_settings.engine = ModelCheckerEngine::All();
|
||||
}
|
||||
|
||||
void ModelChecker::analyze(SourceUnit const& _source)
|
||||
{
|
||||
if (!_source.annotation().experimentalFeatures.count(ExperimentalFeature::SMTChecker))
|
||||
// TODO This should be removed for 0.9.0.
|
||||
if (_source.annotation().experimentalFeatures.count(ExperimentalFeature::SMTChecker))
|
||||
{
|
||||
PragmaDirective const* smtPragma = nullptr;
|
||||
for (auto node: _source.nodes())
|
||||
if (auto pragma = dynamic_pointer_cast<PragmaDirective>(node))
|
||||
if (
|
||||
pragma->literals().size() >= 2 &&
|
||||
pragma->literals().at(1) == "SMTChecker"
|
||||
)
|
||||
{
|
||||
smtPragma = pragma.get();
|
||||
break;
|
||||
}
|
||||
solAssert(smtPragma, "");
|
||||
m_errorReporter.warning(
|
||||
5523_error,
|
||||
smtPragma->location(),
|
||||
"The SMTChecker pragma has been deprecated and will be removed in the future. "
|
||||
"Please use the \"model checker engine\" compiler setting to activate the SMTChecker instead. "
|
||||
"If the pragma is enabled, all engines will be used."
|
||||
);
|
||||
}
|
||||
|
||||
if (m_settings.engine.none())
|
||||
return;
|
||||
|
||||
if (m_settings.engine.chc)
|
||||
|
||||
Reference in New Issue
Block a user