diff --git a/src/parsers/smt2/smt2parser.cpp b/src/parsers/smt2/smt2parser.cpp index c41d8490b..85990c871 100644 --- a/src/parsers/smt2/smt2parser.cpp +++ b/src/parsers/smt2/smt2parser.cpp @@ -541,8 +541,6 @@ namespace smt2 { unsigned epos = sexpr_stack().size(); SASSERT(epos >= spos); unsigned num = epos - spos; - if (num == 0) - throw parser_exception("invalid empty s-expression"); sexpr * r = sm().mk_composite(num, sexpr_stack().c_ptr() + spos, line, pos); sexpr_stack().shrink(spos); sexpr_stack().push_back(r); diff --git a/src/sat/sat_drat.cpp b/src/sat/sat_drat.cpp index 20d7c8f1e..c6e1fc87c 100644 --- a/src/sat/sat_drat.cpp +++ b/src/sat/sat_drat.cpp @@ -112,6 +112,11 @@ namespace sat { } } + if (n == 3 && c[0] == literal(9357, true) && c[1] == literal(25, true) && c[2] == literal(8691, false)) { + SASSERT(false); + UNREACHABLE(); + } + if (!st.is_sat()) { for (char ch : m_theory[st.get_th()]) buffer[len++] = ch; diff --git a/src/sat/smt/dt_solver.cpp b/src/sat/smt/dt_solver.cpp index 9578ff5d3..df9c743fa 100644 --- a/src/sat/smt/dt_solver.cpp +++ b/src/sat/smt/dt_solver.cpp @@ -745,8 +745,7 @@ namespace dt { else if (is_recognizer(term)) { enode* arg = n->get_arg(0); theory_var v = mk_var(arg); - add_recognizer(v, n); - mk_var(n); + add_recognizer(v, n); } else { SASSERT(is_accessor(term)); diff --git a/src/shell/drat_frontend.cpp b/src/shell/drat_frontend.cpp index 419d9e281..31646009b 100644 --- a/src/shell/drat_frontend.cpp +++ b/src/shell/drat_frontend.cpp @@ -188,6 +188,15 @@ public: result = bvu.mk_numeral(val, n); return; } + if (name == "is" && sz == 3) { + name = sexpr->get_child(2)->get_child(0)->get_symbol(); + f = ctx.find_func_decl(name, params.size(), params.c_ptr(), args.size(), sorts.c_ptr(), rng.get()); + if (!f) + goto bail; + datatype_util dtu(m); + result = dtu.mk_is(f, args[0]); + return; + } for (unsigned i = 2; i < sz; ++i) { auto* child = sexpr->get_child(i); if (child->is_numeral() && child->get_numeral().is_unsigned()) diff --git a/src/util/debug.h b/src/util/debug.h index 170049bdb..9ad55a7c2 100644 --- a/src/util/debug.h +++ b/src/util/debug.h @@ -64,9 +64,9 @@ bool is_debug_enabled(const char * tag); #define XASSERT(COND, EXTRA_CODE) DEBUG_CODE(if (assertions_enabled() && !(COND)) { notify_assertion_violation(__FILE__, __LINE__, #COND); { EXTRA_CODE } INVOKE_DEBUGGER(); }) #ifdef Z3DEBUG -# define UNREACHABLE() DEBUG_CODE(notify_assertion_violation(__FILE__, __LINE__, "UNREACHABLE CODE WAS REACHED."); INVOKE_DEBUGGER();) +# define UNREACHABLE() DEBUG_CODE(notify_assertion_violation(__FILE__, __LINE__, "UNEXPECTED CODE WAS REACHED."); INVOKE_DEBUGGER();) #else -# define UNREACHABLE() { notify_assertion_violation(__FILE__, __LINE__, "UNREACHABLE CODE WAS REACHED."); exit(ERR_UNREACHABLE); } ((void) 0) +# define UNREACHABLE() { notify_assertion_violation(__FILE__, __LINE__, "UNEXPECTED CODE WAS REACHED."); exit(ERR_UNREACHABLE); } ((void) 0) #endif #ifdef Z3DEBUG diff --git a/src/util/sexpr.cpp b/src/util/sexpr.cpp index 93acf7a45..53de22d79 100644 --- a/src/util/sexpr.cpp +++ b/src/util/sexpr.cpp @@ -194,6 +194,8 @@ void sexpr::display(std::ostream & out) const { sexpr_composite const * n = todo.back().first; unsigned & idx = todo.back().second; unsigned num = n->get_num_children(); + if (num == 0) + out << "("; while (idx < num) { sexpr const * child = n->get_child(idx); if (idx == 0)