mirror of
https://github.com/Z3Prover/z3
synced 2025-04-23 09:05:31 +00:00
fix crash in poly normalizer exposed by qe. Issue #775
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
856cf7d4f9
commit
152321bce6
3 changed files with 31 additions and 14 deletions
|
@ -43,8 +43,7 @@ bool arith_simplifier_plugin::is_neg_poly(expr * t) const {
|
|||
if (m_util.is_mul(t)) {
|
||||
t = to_app(t)->get_arg(0);
|
||||
rational r;
|
||||
bool is_int;
|
||||
if (m_util.is_numeral(t, r, is_int))
|
||||
if (is_numeral(t, r))
|
||||
return r.is_neg();
|
||||
}
|
||||
return false;
|
||||
|
|
|
@ -607,12 +607,25 @@ void poly_simplifier_plugin::append_to_monomial(expr * n, numeral & k, ptr_buffe
|
|||
k *= val;
|
||||
n = get_monomial_body(n);
|
||||
|
||||
if (is_mul(n)) {
|
||||
for (unsigned i = 0; i < to_app(n)->get_num_args(); i++)
|
||||
result.push_back(to_app(n)->get_arg(i));
|
||||
}
|
||||
else {
|
||||
result.push_back(n);
|
||||
unsigned hd = result.size();
|
||||
result.push_back(n);
|
||||
while (hd < result.size()) {
|
||||
n = result[hd];
|
||||
if (is_mul(n)) {
|
||||
result[hd] = result.back();
|
||||
result.pop_back();
|
||||
for (unsigned i = 0; i < to_app(n)->get_num_args(); i++) {
|
||||
result.push_back(to_app(n)->get_arg(i));
|
||||
}
|
||||
}
|
||||
else if (is_numeral(n, val)) {
|
||||
k *= val;
|
||||
result[hd] = result.back();
|
||||
result.pop_back();
|
||||
}
|
||||
else {
|
||||
++hd;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue