@@ -157,7 +157,7 @@ void recursive_initializationt::initialize(
157
157
158
158
code_blockt recursive_initializationt::build_constructor_body (
159
159
const exprt &depth_symbol,
160
- const exprt &result_symbol,
160
+ const symbol_exprt &result_symbol,
161
161
const optionalt<exprt> &size_symbol,
162
162
const optionalt<irep_idt> &lhs_name)
163
163
{
@@ -192,7 +192,7 @@ code_blockt recursive_initializationt::build_constructor_body(
192
192
}
193
193
}
194
194
195
- const irep_idt & recursive_initializationt::build_constructor (const exprt &expr)
195
+ irep_idt recursive_initializationt::build_constructor (const exprt &expr)
196
196
{
197
197
// for `expr` of type T builds a declaration of a function:
198
198
//
@@ -207,7 +207,9 @@ const irep_idt &recursive_initializationt::build_constructor(const exprt &expr)
207
207
{
208
208
expr_name = to_symbol_expr (expr).get_identifier ();
209
209
if (should_be_treated_as_array (*expr_name))
210
+ {
210
211
size_var = get_associated_size_variable (*expr_name);
212
+ }
211
213
}
212
214
const typet &type = expr.type ();
213
215
if (type_constructor_names.find (type) != type_constructor_names.end ())
@@ -520,7 +522,7 @@ symbol_exprt recursive_initializationt::get_free_function()
520
522
521
523
code_blockt recursive_initializationt::build_pointer_constructor (
522
524
const exprt &depth,
523
- const exprt &result)
525
+ const symbol_exprt &result)
524
526
{
525
527
PRECONDITION (result.type ().id () == ID_pointer);
526
528
const typet &type = result.type ().subtype ();
@@ -605,7 +607,7 @@ code_blockt recursive_initializationt::build_pointer_constructor(
605
607
}
606
608
607
609
code_blockt recursive_initializationt::build_array_string_constructor (
608
- const exprt &result) const
610
+ const symbol_exprt &result) const
609
611
{
610
612
PRECONDITION (result.type ().id () == ID_pointer);
611
613
const typet &type = result.type ().subtype ();
@@ -634,7 +636,7 @@ code_blockt recursive_initializationt::build_array_string_constructor(
634
636
635
637
code_blockt recursive_initializationt::build_array_constructor (
636
638
const exprt &depth,
637
- const exprt &result)
639
+ const symbol_exprt &result)
638
640
{
639
641
PRECONDITION (result.type ().id () == ID_pointer);
640
642
const typet &type = result.type ().subtype ();
@@ -656,7 +658,7 @@ code_blockt recursive_initializationt::build_array_constructor(
656
658
657
659
code_blockt recursive_initializationt::build_struct_constructor (
658
660
const exprt &depth,
659
- const exprt &result)
661
+ const symbol_exprt &result)
660
662
{
661
663
PRECONDITION (result.type ().id () == ID_pointer);
662
664
const typet &struct_type = result.type ().subtype ();
@@ -671,8 +673,8 @@ code_blockt recursive_initializationt::build_struct_constructor(
671
673
return body;
672
674
}
673
675
674
- code_blockt
675
- recursive_initializationt::build_nondet_constructor ( const exprt &result) const
676
+ code_blockt recursive_initializationt::build_nondet_constructor (
677
+ const symbol_exprt &result) const
676
678
{
677
679
PRECONDITION (result.type ().id () == ID_pointer);
678
680
code_blockt body{};
@@ -684,7 +686,7 @@ recursive_initializationt::build_nondet_constructor(const exprt &result) const
684
686
685
687
code_blockt recursive_initializationt::build_dynamic_array_constructor (
686
688
const exprt &depth,
687
- const exprt &result,
689
+ const symbol_exprt &result,
688
690
const exprt &size,
689
691
const optionalt<irep_idt> &lhs_name)
690
692
{
@@ -786,7 +788,7 @@ code_blockt recursive_initializationt::build_dynamic_array_constructor(
786
788
787
789
bool recursive_initializationt::needs_freeing (const exprt &expr) const
788
790
{
789
- if (expr.type ().id () != ID_pointer)
791
+ if (expr.type ().id () != ID_pointer || expr. type (). subtype (). id () == ID_code )
790
792
return false ;
791
793
if (common_arguments_origin.has_value () && expr.id () == ID_symbol)
792
794
{
0 commit comments