mirror of
https://github.com/Z3Prover/z3
synced 2025-04-23 17:15:31 +00:00
build warnings #2748
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
30d9ea5c2c
commit
a257ec0cc1
7 changed files with 66 additions and 27 deletions
|
@ -67,7 +67,7 @@ def_module_params(module_name='smt',
|
|||
('dack.threshold', UINT, 10, ' number of times the congruence rule must be used before Leibniz\'s axiom is expanded'),
|
||||
('theory_case_split', BOOL, False, 'Allow the context to use heuristics involving theory case splits, which are a set of literals of which exactly one can be assigned True. If this option is false, the context will generate extra axioms to enforce this instead.'),
|
||||
('string_solver', SYMBOL, 'seq', 'solver for string/sequence theories. options are: \'z3str3\' (specialized string solver), \'seq\' (sequence solver), \'auto\' (use static features to choose best solver), \'empty\' (a no-op solver that forces an answer unknown if strings were used), \'none\' (no solver)'),
|
||||
('core.validate', BOOL, False, 'validate unsat core produced by SMT context'),
|
||||
('core.validate', BOOL, False, '[internal] validate unsat core produced by SMT context. This option is intended for debugging'),
|
||||
('seq.split_w_len', BOOL, True, 'enable splitting guided by length constraints'),
|
||||
('str.strong_arrangements', BOOL, True, 'assert equivalences instead of implications when generating string arrangement axioms'),
|
||||
('str.aggressive_length_testing', BOOL, False, 'prioritize testing concrete length values over generating more options'),
|
||||
|
|
|
@ -325,7 +325,7 @@ namespace smt {
|
|||
TRACE("phase_selection", tout << "saving phase, is_pos: " << d.m_phase << " l: " << l << "\n";);
|
||||
|
||||
TRACE("relevancy",
|
||||
tout << "is_atom: " << d.is_atom() << " is relevant: " << is_relevant_core(l) << "\n";);
|
||||
tout << "is_atom: " << d.is_atom() << " is relevant: " << is_relevant_core(l) << " relevancy-lvl: " << relevancy_lvl() << "\n";);
|
||||
if (d.is_atom() && (relevancy_lvl() == 0 || (relevancy_lvl() == 1 && !d.is_quantifier()) || is_relevant_core(l)))
|
||||
m_atom_propagation_queue.push_back(l);
|
||||
|
||||
|
|
|
@ -430,6 +430,7 @@ namespace smt {
|
|||
if (!get_fparams().m_core_validate) {
|
||||
return;
|
||||
}
|
||||
warning_msg("Users should not set smt.core.validate. This option is for debugging only.");
|
||||
context ctx(get_manager(), get_fparams(), get_params());
|
||||
ptr_vector<expr> assertions;
|
||||
get_assertions(assertions);
|
||||
|
@ -443,10 +444,13 @@ namespace smt {
|
|||
}
|
||||
lbool res = ctx.check();
|
||||
switch (res) {
|
||||
case l_false:
|
||||
case l_false:
|
||||
break;
|
||||
default:
|
||||
case l_true:
|
||||
throw default_exception("Core could not be validated");
|
||||
case l_undef:
|
||||
IF_VERBOSE(1, verbose_stream() << "core validation produced unknown\n");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -92,8 +92,9 @@ namespace smt {
|
|||
obj_map<expr, unsigned> const & get_elems() const { return m_elems; }
|
||||
|
||||
void insert(expr * n, unsigned generation) {
|
||||
if (m_elems.contains(n) || contains_model_value(n))
|
||||
if (m_elems.contains(n) || contains_model_value(n)) {
|
||||
return;
|
||||
}
|
||||
TRACE("model_finder", tout << mk_pp(n, m) << "\n";);
|
||||
m.inc_ref(n);
|
||||
m_elems.insert(n, generation);
|
||||
|
@ -255,8 +256,8 @@ namespace smt {
|
|||
void merge(node * other) {
|
||||
node * r1 = get_root();
|
||||
node * r2 = other->get_root();
|
||||
SASSERT(r1->m_set == 0);
|
||||
SASSERT(r2->m_set == 0);
|
||||
SASSERT(r1->m_set == nullptr);
|
||||
SASSERT(r2->m_set == nullptr);
|
||||
SASSERT(r1->get_sort() == r2->get_sort());
|
||||
if (r1 == r2)
|
||||
return;
|
||||
|
|
|
@ -7701,11 +7701,11 @@ namespace smt {
|
|||
lbool theory_str::validate_unsat_core(expr_ref_vector & unsat_core) {
|
||||
app * target_term = to_app(get_manager().mk_not(m_theoryStrOverlapAssumption_term));
|
||||
get_context().internalize(target_term, false);
|
||||
enode* e1 = get_context().get_enode(target_term);
|
||||
enode* e1 = get_context().get_enode(target_term);
|
||||
for (unsigned i = 0; i < unsat_core.size(); ++i) {
|
||||
app * core_term = to_app(unsat_core.get(i));
|
||||
// not sure if this is the correct way to compare terms in this context
|
||||
if (!get_context().e_internalized(core_term)) continue;
|
||||
if (!get_context().e_internalized(core_term)) continue;
|
||||
enode *e2 = get_context().get_enode(core_term);
|
||||
if (e1 == e2) {
|
||||
TRACE("str", tout << "overlap detected in unsat core, changing UNSAT to UNKNOWN" << std::endl;);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue