Skip to content

Commit ce0ec56

Browse files
author
Thomas Kiley
committed
Consolidate check for void* pointer initilization
1 parent ef48fe2 commit ce0ec56

File tree

1 file changed

+18
-18
lines changed

1 file changed

+18
-18
lines changed

src/goto-harness/recursive_initialization.cpp

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,15 @@ void recursive_initializationt::initialize(
230230
{depth, address_of_exprt{lhs}}});
231231
}
232232

233+
code_blockt build_null_pointer(const symbol_exprt &result_symbol)
234+
{
235+
const typet &type_to_construct = result_symbol.type().subtype();
236+
const null_pointer_exprt nullptr_expr{to_pointer_type(type_to_construct)};
237+
const code_assignt assign_null{dereference_exprt{result_symbol},
238+
nullptr_expr};
239+
return code_blockt{{assign_null, code_returnt{}}};
240+
}
241+
233242
code_blockt recursive_initializationt::build_constructor_body(
234243
const exprt &depth_symbol,
235244
const symbol_exprt &result_symbol,
@@ -249,6 +258,11 @@ code_blockt recursive_initializationt::build_constructor_body(
249258
{
250259
return build_function_pointer_constructor(result_symbol, is_nullable);
251260
}
261+
if(type.subtype().id() == ID_empty)
262+
{
263+
// always initalize void* pointers as NULL
264+
return build_null_pointer(result_symbol);
265+
}
252266
if(lhs_name.has_value())
253267
{
254268
if(should_be_treated_as_cstring(*lhs_name) && type == char_type())
@@ -620,15 +634,7 @@ code_blockt recursive_initializationt::build_pointer_constructor(
620634
PRECONDITION(result.type().id() == ID_pointer);
621635
const typet &type = result.type().subtype();
622636
PRECONDITION(type.id() == ID_pointer);
623-
624-
null_pointer_exprt nullptr_expr{pointer_type(type.subtype())};
625-
const code_assignt assign_null{dereference_exprt{result}, nullptr_expr};
626-
627-
// always initalize void* pointers as NULL
628-
if(type.subtype().id() == ID_empty)
629-
{
630-
return code_blockt{{assign_null, code_returnt{}}};
631-
}
637+
PRECONDITION(type.subtype().id() != ID_empty);
632638

633639
code_blockt body{};
634640
// build:
@@ -663,6 +669,8 @@ code_blockt recursive_initializationt::build_pointer_constructor(
663669
should_not_recurse.push_back(has_seen_expr);
664670
}
665671

672+
null_pointer_exprt nullptr_expr{pointer_type(type.subtype())};
673+
const code_assignt assign_null{dereference_exprt{result}, nullptr_expr};
666674
code_blockt null_and_return{{assign_null, code_returnt{}}};
667675
body.add(code_ifthenelset{conjunction(should_not_recurse), null_and_return});
668676

@@ -792,15 +800,7 @@ code_blockt recursive_initializationt::build_dynamic_array_constructor(
792800
const typet &pointer_type = result.type().subtype();
793801
PRECONDITION(pointer_type.id() == ID_pointer);
794802
const typet &element_type = pointer_type.subtype();
795-
796-
null_pointer_exprt nullptr_expr{::pointer_type(element_type)};
797-
const code_assignt assign_null{dereference_exprt{result}, nullptr_expr};
798-
799-
// always initalize void* pointers as NULL
800-
if(element_type.id() == ID_empty)
801-
{
802-
return code_blockt{{assign_null, code_returnt{}}};
803-
}
803+
PRECONDITION(element_type.id() != ID_empty);
804804

805805
// builds:
806806
// void type_constructor_ptr_T(int depth, T** result, int* size)

0 commit comments

Comments
 (0)