Skip to content

Commit adca517

Browse files
committed
__builtin_isinf{,_sign} require a floating-point argument
This isn't necessarily spelled out in the signature of the function, but GCC's documentation states this requirement.
1 parent 4c2b413 commit adca517

File tree

3 files changed

+18
-5
lines changed

3 files changed

+18
-5
lines changed

regression/cbmc-library/Float_lib1/main.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,10 @@ int main()
4343

4444
_Static_assert(__builtin_isnormal(DBL_MIN), "__builtin_isnormal is constant");
4545

46-
_Static_assert(!__builtin_isinf(0), "__builtin_isinf is constant");
46+
_Static_assert(!__builtin_isinf(0.0), "__builtin_isinf is constant");
4747

4848
_Static_assert(
49-
__builtin_isinf_sign(0) == 0, "__builtin_isinf_sign is constant");
49+
__builtin_isinf_sign(0.0) == 0, "__builtin_isinf_sign is constant");
5050

5151
#endif
5252

src/ansi-c/c_typecheck_expr.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2457,6 +2457,15 @@ exprt c_typecheck_baset::do_special_functions(
24572457

24582458
typecheck_function_call_arguments(expr);
24592459

2460+
const exprt &fp_value = expr.arguments().front();
2461+
2462+
if(fp_value.type().id() != ID_floatbv)
2463+
{
2464+
error().source_location = fp_value.source_location();
2465+
error() << "non-floating-point argument for " << identifier << eom;
2466+
throw 0;
2467+
}
2468+
24602469
isinf_exprt isinf_expr(expr.arguments().front());
24612470
isinf_expr.add_source_location()=source_location;
24622471

@@ -2477,6 +2486,13 @@ exprt c_typecheck_baset::do_special_functions(
24772486

24782487
const exprt &fp_value = expr.arguments().front();
24792488

2489+
if(fp_value.type().id() != ID_floatbv)
2490+
{
2491+
error().source_location = fp_value.source_location();
2492+
error() << "non-floating-point argument for " << identifier << eom;
2493+
throw 0;
2494+
}
2495+
24802496
isinf_exprt isinf_expr(fp_value);
24812497
isinf_expr.add_source_location() = source_location;
24822498

src/util/simplify_expr_floatbv.cpp

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,6 @@ Author: Daniel Kroening, [email protected]
2020
simplify_exprt::resultt<>
2121
simplify_exprt::simplify_isinf(const unary_exprt &expr)
2222
{
23-
if(expr.op().type().id() != ID_floatbv)
24-
return unchanged(expr);
25-
2623
if(expr.op().is_constant())
2724
{
2825
ieee_floatt value(to_constant_expr(expr.op()));

0 commit comments

Comments
 (0)