diff options
author | Segher Boessenkool <segher@kernel.crashing.org> | 2021-03-19 15:02:00 +0000 |
---|---|---|
committer | Segher Boessenkool <segher@kernel.crashing.org> | 2021-03-22 16:32:42 +0000 |
commit | ba16797fe69a0fae47355aa2c102ffac1c48c3bd (patch) | |
tree | 18cd628ca878ee21f1b56b719bbb3e2b8051616f | |
parent | 00b46c00c8d9003c61e8f817668ad3380e16fedb (diff) | |
download | gcc-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.c | 12 |
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; |