diff --git a/src/ast/ast.h b/src/ast/ast.h index 52987b78526..ece6d0005c0 100644 --- a/src/ast/ast.h +++ b/src/ast/ast.h @@ -1899,6 +1899,10 @@ class ast_manager { return mk_app(decl, args.size(), args.c_ptr()); } + app * mk_app(func_decl * decl, ptr_buffer const& args) { + return mk_app(decl, args.size(), args.c_ptr()); + } + app * mk_app(func_decl * decl, ptr_vector const& args) { return mk_app(decl, args.size(), (expr*const*)args.c_ptr()); } diff --git a/src/ast/datatype_decl_plugin.cpp b/src/ast/datatype_decl_plugin.cpp index 76c25e2c556..1ab438e7261 100644 --- a/src/ast/datatype_decl_plugin.cpp +++ b/src/ast/datatype_decl_plugin.cpp @@ -623,7 +623,7 @@ namespace datatype { for (unsigned i = 0; i < c->get_arity(); i++) { args.push_back(m_manager->get_some_value(c->get_domain(i))); } - return m_manager->mk_app(c, args.size(), args.c_ptr()); + return m_manager->mk_app(c, args); } bool plugin::is_fully_interp(sort * s) const { @@ -1045,7 +1045,7 @@ namespace datatype { } app* util::mk_is(func_decl * c, expr *f) { - return m.mk_app(get_constructor_is(c), 1, &f); + return m.mk_app(get_constructor_is(c), f); } func_decl * util::get_recognizer_constructor(func_decl * recognizer) const { diff --git a/src/cmd_context/pdecl.cpp b/src/cmd_context/pdecl.cpp index ec9a6a367c5..c9fb42f9ad2 100644 --- a/src/cmd_context/pdecl.cpp +++ b/src/cmd_context/pdecl.cpp @@ -682,6 +682,7 @@ bool pdatatypes_decl::fix_missing_refs(symbol & missing) { sort* pdecl_manager::instantiate_datatype(psort_decl* p, symbol const& name, unsigned n, sort * const* s) { TRACE("datatype", tout << name << " "; for (unsigned i = 0; i < n; ++i) tout << s[i]->get_name() << " "; tout << "\n";); + pdecl_manager& m = *this; sort * r = p->find(s); if (r) diff --git a/src/smt/params/smt_params.cpp b/src/smt/params/smt_params.cpp index 51225e69079..650200bab5b 100644 --- a/src/smt/params/smt_params.cpp +++ b/src/smt/params/smt_params.cpp @@ -28,7 +28,9 @@ void smt_params::updt_local_params(params_ref const & _p) { m_ematching = p.ematching(); m_clause_proof = p.clause_proof(); m_phase_selection = static_cast(p.phase_selection()); + if (m_phase_selection > PS_THEORY) throw default_exception("illegal phase selection numeral"); m_restart_strategy = static_cast(p.restart_strategy()); + if (m_restart_strategy > RS_ARITHMETIC) throw default_exception("illegal restart strategy numeral"); m_restart_factor = p.restart_factor(); m_case_split_strategy = static_cast(p.case_split()); m_theory_case_split = p.theory_case_split(); diff --git a/src/smt/qi_queue.cpp b/src/smt/qi_queue.cpp index 9611d84858f..98301d6d474 100644 --- a/src/smt/qi_queue.cpp +++ b/src/smt/qi_queue.cpp @@ -150,6 +150,9 @@ namespace smt { void qi_queue::instantiate() { unsigned since_last_check = 0; for (entry & curr : m_new_entries) { + if (m_context.get_cancel_flag()) { + break; + } fingerprint * f = curr.m_qb; quantifier * qa = static_cast(f->get_data()); @@ -171,9 +174,6 @@ namespace smt { if (m_context.resource_limits_exceeded()) { break; } - if (m_context.get_cancel_flag()) { - break; - } since_last_check = 0; } }