aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ubsan.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/gcc/ubsan.c b/gcc/ubsan.c
index d752b89..1089aef 100644
--- a/gcc/ubsan.c
+++ b/gcc/ubsan.c
@@ -1890,8 +1890,16 @@ ubsan_instrument_float_cast (location_t loc, tree type, tree expr)
else
return NULL_TREE;
- t = fold_build2 (UNLE_EXPR, boolean_type_node, expr, min);
- tt = fold_build2 (UNGE_EXPR, boolean_type_node, expr, max);
+ if (HONOR_NANS (mode))
+ {
+ t = fold_build2 (UNLE_EXPR, boolean_type_node, expr, min);
+ tt = fold_build2 (UNGE_EXPR, boolean_type_node, expr, max);
+ }
+ else
+ {
+ t = fold_build2 (LE_EXPR, boolean_type_node, expr, min);
+ tt = fold_build2 (GE_EXPR, boolean_type_node, expr, max);
+ }
t = fold_build2 (TRUTH_OR_EXPR, boolean_type_node, t, tt);
if (integer_zerop (t))
return NULL_TREE;