Skip to content

Commit e08abb3

Browse files
fix #2504
Signed-off-by: Nikolaj Bjorner <[email protected]>
1 parent 2f60bcb commit e08abb3

File tree

2 files changed

+16
-12
lines changed

2 files changed

+16
-12
lines changed

src/ast/datatype_decl_plugin.cpp

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@ namespace datatype {
121121
};
122122

123123
namespace param_size {
124+
void size::dec_ref() { --m_ref; if (m_ref == 0) dealloc(this); }
124125
size* size::mk_offset(sort_size const& s) { return alloc(offset, s); }
125126
size* size::mk_param(sort_ref& p) { return alloc(sparam, p); }
126127
size* size::mk_plus(size* a1, size* a2) { return alloc(plus, a1, a2); }
@@ -545,7 +546,9 @@ namespace datatype {
545546

546547
void plugin::remove(symbol const& s) {
547548
def* d = nullptr;
548-
if (m_defs.find(s, d)) dealloc(d);
549+
if (m_defs.find(s, d)) {
550+
dealloc(d);
551+
}
549552
m_defs.remove(s);
550553
}
551554

@@ -722,22 +725,21 @@ namespace datatype {
722725
if (is_datatype(s)) {
723726
param_size::size* sz;
724727
obj_map<sort, param_size::size*> S;
725-
sref_vector<param_size::size> refs;
726728
unsigned n = get_datatype_num_parameter_sorts(s);
727729
def & d = get_def(s->get_name());
728730
SASSERT(n == d.params().size());
729731
for (unsigned i = 0; i < n; ++i) {
730732
sort* ps = get_datatype_parameter_sort(s, i);
731733
sz = get_sort_size(params, ps);
732-
refs.push_back(sz);
734+
m_refs.push_back(sz);
733735
S.insert(d.params().get(i), sz);
734736
}
735737
auto ss = d.sort_size();
736738
if (!ss) {
737739
d.set_sort_size(param_size::size::mk_offset(sort_size::mk_infinite()));
738740
ss = d.sort_size();
739741
}
740-
return ss->subst(S);
742+
return ss->subst(S);
741743
}
742744
array_util autil(m);
743745
if (autil.is_array(s)) {
@@ -821,6 +823,7 @@ namespace datatype {
821823
}
822824
TRACE("datatype", tout << "set sort size " << s << "\n";);
823825
d.set_sort_size(param_size::size::mk_plus(s_add));
826+
m_refs.reset();
824827
}
825828
}
826829

src/ast/datatype_decl_plugin.h

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ namespace datatype {
108108
size(): m_ref(0) {}
109109
virtual ~size() {}
110110
void inc_ref() { ++m_ref; }
111-
void dec_ref() { --m_ref; if (m_ref == 0) dealloc(this); }
111+
void dec_ref();
112112
static size* mk_offset(sort_size const& s);
113113
static size* mk_param(sort_ref& p);
114114
static size* mk_plus(size* a1, size* a2);
@@ -159,13 +159,13 @@ namespace datatype {
159159
};
160160

161161
class def {
162-
ast_manager& m;
163-
util& m_util;
164-
symbol m_name;
165-
unsigned m_class_id;
166-
param_size::size* m_sort_size;
167-
sort_ref_vector m_params;
168-
mutable sort_ref m_sort;
162+
ast_manager& m;
163+
util& m_util;
164+
symbol m_name;
165+
unsigned m_class_id;
166+
param_size::size* m_sort_size;
167+
sort_ref_vector m_params;
168+
mutable sort_ref m_sort;
169169
ptr_vector<constructor> m_constructors;
170170
public:
171171
def(ast_manager& m, util& u, symbol const& n, unsigned class_id, unsigned num_params, sort * const* params):
@@ -304,6 +304,7 @@ namespace datatype {
304304
obj_map<sort, bool> m_is_enum;
305305
mutable obj_map<sort, bool> m_is_fully_interp;
306306
mutable ast_ref_vector m_asts;
307+
sref_vector<param_size::size> m_refs;
307308
ptr_vector<ptr_vector<func_decl> > m_vectors;
308309
unsigned m_start;
309310
mutable ptr_vector<sort> m_fully_interp_trail;

0 commit comments

Comments
 (0)