@@ -477,24 +477,28 @@ value_set_dereferencet::valuet value_set_dereferencet::build_reference_to(
477477 std::cout << "O: " << format(root_object) << '\n';
478478 #endif
479479
480- valuet result;
481-
482480 if (root_object.id () == ID_null_object)
483481 {
484- if (o.offset ().is_zero ())
485- result.pointer = null_pointer_exprt{pointer_type};
486- else
487- return valuet{};
482+ if (!o.offset ().is_zero ())
483+ return {};
484+
485+ valuet result;
486+ result.pointer = null_pointer_exprt{pointer_type};
487+ return result;
488488 }
489489 else if (root_object.id ()==ID_dynamic_object)
490490 {
491+ valuet result;
492+
491493 // constraint that it actually is a dynamic object
492494 // this is also our guard
493495 result.pointer_guard = is_dynamic_object_exprt (pointer_expr);
494496
495497 // can't remove here, turn into *p
496498 result.value = dereference_exprt{pointer_expr};
497499 result.pointer = pointer_expr;
500+
501+ return result;
498502 }
499503 else if (root_object.id ()==ID_integer_address)
500504 {
@@ -514,8 +518,10 @@ value_set_dereferencet::valuet value_set_dereferencet::build_reference_to(
514518 pointer_offset (pointer_expr),
515519 to_array_type (memory_symbol.type ).element_type ());
516520
521+ valuet result;
517522 result.value =index_expr;
518523 result.pointer = address_of_exprt{index_expr};
524+ return result;
519525 }
520526 else if (dereference_type_compare (
521527 to_array_type (memory_symbol.type ).element_type (),
@@ -526,28 +532,32 @@ value_set_dereferencet::valuet value_set_dereferencet::build_reference_to(
526532 symbol_expr,
527533 pointer_offset (pointer_expr),
528534 to_array_type (memory_symbol.type ).element_type ());
535+
536+ valuet result;
529537 result.value =typecast_exprt (index_expr, dereference_type);
530538 result.pointer =
531539 typecast_exprt{address_of_exprt{index_expr}, pointer_type};
540+ return result;
532541 }
533542 else
534543 {
535544 // We need to use byte_extract.
536545 // Won't do this without a commitment to an endianness.
537546
538547 if (config.ansi_c .endianness ==configt::ansi_ct::endiannesst::NO_ENDIANNESS)
539- {
540- }
541- else
542- {
543- result.value = make_byte_extract (
544- symbol_expr, pointer_offset (pointer_expr), dereference_type);
545- result.pointer = address_of_exprt{result.value };
546- }
548+ return {};
549+
550+ valuet result;
551+ result.value = make_byte_extract (
552+ symbol_expr, pointer_offset (pointer_expr), dereference_type);
553+ result.pointer = address_of_exprt{result.value };
554+ return result;
547555 }
548556 }
549557 else
550558 {
559+ valuet result;
560+
551561 // something generic -- really has to be a symbol
552562 address_of_exprt object_pointer (object);
553563
@@ -651,17 +661,11 @@ value_set_dereferencet::valuet value_set_dereferencet::build_reference_to(
651661 result.pointer = typecast_exprt::conditional_cast (
652662 address_of_exprt{skip_typecast (o.root_object ())}, pointer_type);
653663
654- if (memory_model (result.value , dereference_type, offset, ns))
655- {
656- // ok, done
657- }
658- else
659- {
660- return valuet (); // give up, no way that this is ok
661- }
662- }
664+ if (!memory_model (result.value , dereference_type, offset, ns))
665+ return {}; // give up, no way that this is ok
663666
664- return result;
667+ return result;
668+ }
665669}
666670
667671static bool is_a_bv_type (const typet &type)
0 commit comments