aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSegher Boessenkool <segher@kernel.crashing.org>2021-03-19 15:02:00 +0000
committerSegher Boessenkool <segher@kernel.crashing.org>2021-03-22 16:32:42 +0000
commitba16797fe69a0fae47355aa2c102ffac1c48c3bd (patch)
tree18cd628ca878ee21f1b56b719bbb3e2b8051616f
parent00b46c00c8d9003c61e8f817668ad3380e16fedb (diff)
downloadgcc-ba16797fe69a0fae47355aa2c102ffac1c48c3bd.zip
gcc-ba16797fe69a0fae47355aa2c102ffac1c48c3bd.tar.gz
gcc-ba16797fe69a0fae47355aa2c102ffac1c48c3bd.tar.bz2
ubsan: Don't test for NaNs if those do not exist (PR97926)
2021-03-22 Segher Boessenkool <segher@kernel.crashing.org> PR target/97926 * ubsan.c (ubsan_instrument_float_cast): Don't test for unordered if there are no NaNs.
-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;