Skip to content

Commit c8908e8

Browse files
fix #2609 fix #2610
Signed-off-by: Nikolaj Bjorner <[email protected]>
1 parent feff1f7 commit c8908e8

File tree

2 files changed

+20
-23
lines changed

2 files changed

+20
-23
lines changed

src/math/polynomial/polynomial.cpp

Lines changed: 19 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -374,10 +374,10 @@ namespace polynomial {
374374
return y;
375375
}
376376

377-
void display(std::ostream & out, display_var_proc const & proc = display_var_proc(), bool use_star = false) const {
377+
std::ostream& display(std::ostream & out, display_var_proc const & proc = display_var_proc(), bool use_star = false) const {
378378
if (m_size == 0) {
379379
out << "1";
380-
return;
380+
return out;
381381
}
382382
for (unsigned i = 0; i < m_size; i++) {
383383
if (i > 0) {
@@ -390,6 +390,7 @@ namespace polynomial {
390390
if (degree(i) > 1)
391391
out << "^" << degree(i);
392392
}
393+
return out;
393394
}
394395

395396
void display_smt2(std::ostream & out, display_var_proc const & proc = display_var_proc()) const {
@@ -795,7 +796,7 @@ namespace polynomial {
795796
CTRACE("polynomial", !m_monomials.empty(),
796797
tout << "monomials leaked\n";
797798
for (auto * m : m_monomials) {
798-
m->display(tout); tout << "\n";
799+
m->display(tout << m->id() << " " << m->ref_count() << " ") << "\n";
799800
});
800801
SASSERT(m_monomials.empty());
801802
if (m_own_allocator)
@@ -1044,7 +1045,7 @@ namespace polynomial {
10441045
return div_core<false>(m1->size(), m1->get_powers(), m2->size(), m2->get_powers(), m_tmp1);
10451046
}
10461047

1047-
bool div(monomial const * m1, monomial const * m2, monomial * & r) {
1048+
bool div(monomial const * m1, monomial const * m2, monomial_ref & r) {
10481049
if (m1->total_degree() < m2->total_degree())
10491050
return false;
10501051
if (m1 == m2) {
@@ -1513,10 +1514,10 @@ namespace polynomial {
15131514

15141515
bool is_zero() const { return m_size == 0; }
15151516

1516-
void display(std::ostream & out, mpzzp_manager & nm, display_var_proc const & proc = display_var_proc(), bool use_star = false) const {
1517+
std::ostream& display(std::ostream & out, mpzzp_manager & nm, display_var_proc const & proc = display_var_proc(), bool use_star = false) const {
15171518
if (is_zero()) {
15181519
out << "0";
1519-
return;
1520+
return out;
15201521
}
15211522

15221523
for (unsigned i = 0; i < m_size; i++) {
@@ -1552,6 +1553,7 @@ namespace polynomial {
15521553
m(i)->display(out, proc, use_star);
15531554
}
15541555
}
1556+
return out;
15551557
}
15561558

15571559
static void display_num_smt2(std::ostream & out, mpzzp_manager & nm, numeral const & a) {
@@ -2366,17 +2368,12 @@ namespace polynomial {
23662368
m_manager.del(m_zero_numeral);
23672369
m_mgcd_iterpolators.flush();
23682370
m_mgcd_skeletons.reset();
2369-
DEBUG_CODE({
2370-
TRACE("polynomial",
2371-
tout << "leaked polynomials\n";
2372-
for (unsigned i = 0; i < m_polynomials.size(); i++) {
2373-
if (m_polynomials[i] != nullptr) {
2374-
m_polynomials[i]->display(tout, m_manager);
2375-
tout << "\n";
2376-
}
2377-
});
2378-
m_polynomials.reset();
2379-
});
2371+
CTRACE("polynomial", !m_polynomials.empty(),
2372+
tout << "leaked polynomials\n";
2373+
for (auto* p : m_polynomials) {
2374+
if (p) p->display(tout, m_manager) << "\n";
2375+
});
2376+
m_polynomials.reset();
23802377
SASSERT(m_polynomials.empty());
23812378
m_iccp_ZpX_buffers.clear();
23822379
m_monomial_manager->dec_ref();
@@ -2655,7 +2652,7 @@ namespace polynomial {
26552652
return mm().div(m1, m2);
26562653
}
26572654

2658-
bool div(monomial const * m1, monomial const * m2, monomial * & r) {
2655+
bool div(monomial const * m1, monomial const * m2, monomial_ref & r) {
26592656
return mm().div(m1, m2, r);
26602657
}
26612658

@@ -5151,7 +5148,7 @@ namespace polynomial {
51515148
}
51525149
monomial const * m_r = R.m(max_R);
51535150
numeral const & a_r = R.a(max_R);
5154-
monomial * m_r_q = nullptr;
5151+
monomial_ref m_r_q(pm());
51555152
VERIFY(div(m_r, m_q, m_r_q));
51565153
TRACE("polynomial", tout << "m_r: "; m_r->display(tout); tout << "\nm_q: "; m_q->display(tout); tout << "\n";
51575154
if (m_r_q) { tout << "m_r_q: "; m_r_q->display(tout); tout << "\n"; });
@@ -5188,7 +5185,7 @@ namespace polynomial {
51885185
}
51895186
monomial const * m_r = R.m(max_R);
51905187
numeral const & a_r = R.a(max_R);
5191-
monomial * m_r_q = nullptr;
5188+
monomial_ref m_r_q(pm());
51925189
bool q_div_r = div(m_r, m_q, m_r_q);
51935190
m_r_q_ref = m_r_q;
51945191
TRACE("polynomial", tout << "m_r: "; m_r->display(tout); tout << "\nm_q: "; m_q->display(tout); tout << "\n";
@@ -6048,7 +6045,7 @@ namespace polynomial {
60486045
return true;
60496046
}
60506047
monomial * m = C.m(curr_max);
6051-
monomial * m_i;
6048+
monomial_ref m_i(pm());
60526049
if (!div(m, m1, m_i)) {
60536050
// m1 does not divide maximal monomial of C.
60546051
R.reset();
@@ -7088,7 +7085,7 @@ namespace polynomial {
70887085
return m_imp->div(m1, m2);
70897086
}
70907087

7091-
bool manager::div(monomial const * m1, monomial const * m2, monomial * & r) {
7088+
bool manager::div(monomial const * m1, monomial const * m2, monomial_ref & r) {
70927089
return m_imp->div(m1, m2, r);
70937090
}
70947091

src/math/polynomial/polynomial.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -644,7 +644,7 @@ namespace polynomial {
644644
/**
645645
\brief Return true if m2 divides m1, and store the result in r.
646646
*/
647-
bool div(monomial const * m1, monomial const * m2, monomial * & r);
647+
bool div(monomial const * m1, monomial const * m2, monomial_ref & r);
648648

649649
/**
650650
\brief Newton interpolation algorithm for multivariate polynomials.

0 commit comments

Comments
 (0)