Skip to content

Commit d868948

Browse files
committed
value_set_dereferencet::build_reference_to: make returns local
Improve readability by making each block return when the work is done.
1 parent 78a884e commit d868948

File tree

1 file changed

+28
-24
lines changed

1 file changed

+28
-24
lines changed

src/pointer-analysis/value_set_dereference.cpp

Lines changed: 28 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -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

667671
static bool is_a_bv_type(const typet &type)

0 commit comments

Comments
 (0)