@@ -569,35 +569,15 @@ void goto_convertt::do_java_new(
569569 const side_effect_exprt &rhs,
570570 goto_programt &dest)
571571{
572- if (lhs.is_nil ())
573- {
574- error ().source_location =lhs.find_source_location ();
575- error () << " do_java_new without lhs is yet to be implemented" << eom;
576- throw 0 ;
577- }
578-
572+ PRECONDITION (!lhs.is_nil ());
573+ PRECONDITION (rhs.operands ().empty ());
574+ PRECONDITION (rhs.type ().id () == ID_pointer);
579575 source_locationt location=rhs.source_location ();
580-
581- assert (rhs.operands ().empty ());
582-
583- if (rhs.type ().id ()!=ID_pointer)
584- {
585- error ().source_location =rhs.find_source_location ();
586- error () << " do_java_new returns pointer" << eom;
587- throw 0 ;
588- }
589-
590576 typet object_type=rhs.type ().subtype ();
591577
592578 // build size expression
593579 exprt object_size=size_of_expr (object_type, ns);
594-
595- if (object_size.is_nil ())
596- {
597- error ().source_location =rhs.find_source_location ();
598- error () << " do_java_new got nil object_size" << eom;
599- throw 0 ;
600- }
580+ CHECK_RETURN (object_size.is_not_nil ());
601581
602582 // we produce a malloc side-effect, which stays
603583 side_effect_exprt malloc_expr (ID_malloc);
@@ -624,36 +604,18 @@ void goto_convertt::do_java_new_array(
624604 const side_effect_exprt &rhs,
625605 goto_programt &dest)
626606{
627- if (lhs.is_nil ())
628- {
629- error ().source_location =lhs.find_source_location ();
630- error () << " do_java_new_array without lhs is yet to be implemented"
631- << eom;
632- throw 0 ;
633- }
607+ PRECONDITION (!lhs.is_nil ()); // do_java_new_array without lhs not implemented
608+ PRECONDITION (rhs.operands ().size () >= 1 ); // one per dimension
609+ PRECONDITION (rhs.type ().id () == ID_pointer);
634610
635611 source_locationt location=rhs.source_location ();
636-
637- assert (rhs.operands ().size ()>=1 ); // one per dimension
638-
639- if (rhs.type ().id ()!=ID_pointer)
640- {
641- error ().source_location =rhs.find_source_location ();
642- error () << " do_java_new_array returns pointer" << eom;
643- throw 0 ;
644- }
645-
646612 typet object_type=rhs.type ().subtype ();
613+ PRECONDITION (ns.follow (object_type).id () == ID_struct);
647614
648615 // build size expression
649616 exprt object_size=size_of_expr (object_type, ns);
650617
651- if (object_size.is_nil ())
652- {
653- error ().source_location =rhs.find_source_location ();
654- error () << " do_java_new_array got nil object_size" << eom;
655- throw 0 ;
656- }
618+ CHECK_RETURN (!object_size.is_nil ());
657619
658620 // we produce a malloc side-effect, which stays
659621 side_effect_exprt malloc_expr (ID_malloc);
@@ -664,9 +626,12 @@ void goto_convertt::do_java_new_array(
664626 t_n->code =code_assignt (lhs, malloc_expr);
665627 t_n->source_location =location;
666628
667- assert (ns.follow (object_type).id ()==ID_struct);
668629 const struct_typet &struct_type=to_struct_type (ns.follow (object_type));
669- assert (struct_type.components ().size ()==3 );
630+
631+ // Ideally we would have a check for `is_valid_java_array(struct_type)` but
632+ // `is_valid_java_array is part of the java_bytecode module and we cannot
633+ // introduce such dependencies. We do this simple check instead:
634+ PRECONDITION (struct_type.components ().size ()==3 );
670635
671636 // Init base class:
672637 dereference_exprt deref (lhs, object_type);
@@ -696,7 +661,6 @@ void goto_convertt::do_java_new_array(
696661 // Allocate a (struct realtype**) instead of a (void**) if possible.
697662 const irept &given_element_type=object_type.find (ID_C_element_type);
698663 typet allocate_data_type;
699- exprt cast_data_member;
700664 if (given_element_type.is_not_nil ())
701665 {
702666 allocate_data_type=
@@ -705,7 +669,8 @@ void goto_convertt::do_java_new_array(
705669 else
706670 allocate_data_type=data.type ();
707671
708- side_effect_exprt data_java_new_expr (ID_java_new_array, allocate_data_type);
672+ side_effect_exprt data_java_new_expr (
673+ ID_java_new_array_data, allocate_data_type);
709674
710675 // The instruction may specify a (hopefully small) upper bound on the
711676 // array size, in which case we allocate a fixed-length array that may
0 commit comments