@@ -761,12 +761,13 @@ void goto_check_ct::conversion_check(const exprt &expr, const guardt &guard)
761761 else if (old_type.id () == ID_floatbv) // float -> signed
762762 {
763763 // Note that the fractional part is truncated!
764- ieee_floatt upper (to_floatbv_type (old_type));
764+ auto rm = ieee_floatt::rounding_modet::ROUND_TO_EVEN;
765+ ieee_floatt upper (to_floatbv_type (old_type), rm);
765766 upper.from_integer (power (2 , new_width - 1 ));
766767 const binary_relation_exprt no_overflow_upper (
767768 op, ID_lt, upper.to_expr ());
768769
769- ieee_floatt lower (to_floatbv_type (old_type));
770+ ieee_floatt lower (to_floatbv_type (old_type), rm );
770771 lower.from_integer (-power (2 , new_width - 1 ) - 1 );
771772 const binary_relation_exprt no_overflow_lower (
772773 op, ID_gt, lower.to_expr ());
@@ -844,12 +845,13 @@ void goto_check_ct::conversion_check(const exprt &expr, const guardt &guard)
844845 else if (old_type.id () == ID_floatbv) // float -> unsigned
845846 {
846847 // Note that the fractional part is truncated!
847- ieee_floatt upper (to_floatbv_type (old_type));
848+ auto rm = ieee_floatt::rounding_modet::ROUND_TO_EVEN;
849+ ieee_floatt upper (to_floatbv_type (old_type), rm);
848850 upper.from_integer (power (2 , new_width));
849851 const binary_relation_exprt no_overflow_upper (
850852 op, ID_lt, upper.to_expr ());
851853
852- ieee_floatt lower (to_floatbv_type (old_type));
854+ ieee_floatt lower (to_floatbv_type (old_type), rm );
853855 lower.from_integer (-1 );
854856 const binary_relation_exprt no_overflow_lower (
855857 op, ID_gt, lower.to_expr ());
@@ -1295,8 +1297,8 @@ void goto_check_ct::nan_check(const exprt &expr, const guardt &guard)
12951297 // -inf + +inf = NaN and +inf + -inf = NaN,
12961298 // i.e., signs differ
12971299 ieee_float_spect spec = ieee_float_spect (to_floatbv_type (plus_expr.type ()));
1298- exprt plus_inf = ieee_floatt ::plus_infinity (spec).to_expr ();
1299- exprt minus_inf = ieee_floatt ::minus_infinity (spec).to_expr ();
1300+ exprt plus_inf = ieee_float_valuet ::plus_infinity (spec).to_expr ();
1301+ exprt minus_inf = ieee_float_valuet ::minus_infinity (spec).to_expr ();
13001302
13011303 isnan = or_exprt (
13021304 and_exprt (
@@ -1315,8 +1317,8 @@ void goto_check_ct::nan_check(const exprt &expr, const guardt &guard)
13151317
13161318 ieee_float_spect spec =
13171319 ieee_float_spect (to_floatbv_type (minus_expr.type ()));
1318- exprt plus_inf = ieee_floatt ::plus_infinity (spec).to_expr ();
1319- exprt minus_inf = ieee_floatt ::minus_infinity (spec).to_expr ();
1320+ exprt plus_inf = ieee_float_valuet ::plus_infinity (spec).to_expr ();
1321+ exprt minus_inf = ieee_float_valuet ::minus_infinity (spec).to_expr ();
13201322
13211323 isnan = or_exprt (
13221324 and_exprt (
0 commit comments