|
| void | check (const expr2tc &expr, const locationt &location) |
| void | check_rec (const expr2tc &expr, guard2tc &guard, const locationt &loc, bool address) |
| void | div_by_zero_check (const expr2tc &expr, const guard2tc &guard, const locationt &loc) |
| void | bounds_check (const expr2tc &expr, const guard2tc &guard, const locationt &loc) |
| void | pointer_rel_check (const expr2tc &expr, const guard2tc &guard, const locationt &loc) |
| void | overflow_check (const expr2tc &expr, const guard2tc &guard, const locationt &loc) |
| void | float_overflow_check (const expr2tc &expr, const guard2tc &guard, const locationt &loc) |
| void | cast_overflow_check (const expr2tc &expr, const guard2tc &guard, const locationt &loc) |
| void | fp_to_int_range_check (const expr2tc &expr, const guard2tc &guard, const locationt &loc) |
| | check a floating-point value converts into the destination integer type
|
| void | input_overflow_check (const expr2tc &expr, const locationt &loc) |
| | check for the buffer overflow in scanf/fscanf
|
| void | clz_zero_check (const expr2tc &code, const locationt &loc) |
| | check __builtin_clz* is not called with a zero argument (UB)
|
| void | input_overflow_check_int (const BigInt &width, const BigInt &limit, bool &buf_overflow) |
| void | input_overflow_check_arr (const BigInt &width, const BigInt &limit, bool &buf_overflow) |
| void | shift_check (const expr2tc &expr, const guard2tc &guard, const locationt &loc) |
| void | nan_check (const expr2tc &expr, const guard2tc &guard, const locationt &loc) |
| void | is_instance_check (goto_programt::targett target, goto_programt &goto_program, const expr2tc &lhs, const expr2tc &rhs, const locationt &loc) |
| expr2tc | build_python_type_assertion (const expr2tc &value_expr, const symbolt &symbol) const |
| expr2tc | build_python_isinstance_check (const expr2tc &value_expr, const typet &annotated_type) const |
| expr2tc | build_python_is_none_check (const expr2tc &value_expr) const |
| bool | python_should_skip_type_assertion (const typet &annotated_type) const |
| typet | resolve_python_effective_type (const typet &annotated_type) const |
| expr2tc | build_python_type_operand (const typet &type) const |
| void | add_guarded_claim (const expr2tc &expr, const std::string &comment, const std::string &property, const locationt &location, const guard2tc &guard) |
check a floating-point value converts into the destination integer type
C11 6.3.1.4p1 and [conv.fpint]/1: converting a floating value whose integral part is not representable in the destination integer type is undefined.
cast_overflow_check's bitvector check is gated on –int-encoding, so in the default mode this conversion went unchecked (#7572). A NaN operand fails both comparisons, which is right – it is equally undefined.
–no-fp-conversion-check exists for SV-COMP: its no-overflow property is only about signed-integer arithmetic, and the rules say so explicitly – "Hence, conversions to signed-integer types do not violate this property." esbmc-wrapper.py reports any violated property under that run as FALSE_OVERFLOW, so leaving this on turns a real conversion UB into a wrong competition verdict.