about summary refs log tree commit diff
path: root/src/librustc_codegen_ssa/mir
diff options
context:
space:
mode:
authorMark Rousskov <mark.simulacrum@gmail.com>2020-04-17 21:42:22 -0400
committerMark Rousskov <mark.simulacrum@gmail.com>2020-05-06 08:14:21 -0400
commit9907ad6ed9fde5ccdb58a7d59d652a4c8a98a346 (patch)
tree7470f8e3ea081729bd155d40dab7310f601c5940 /src/librustc_codegen_ssa/mir
parenta0c61a904482129989f5c1e5cb9f1008efb76f7f (diff)
downloadrust-9907ad6ed9fde5ccdb58a7d59d652a4c8a98a346.tar.gz
rust-9907ad6ed9fde5ccdb58a7d59d652a4c8a98a346.zip
Define UB in float-to-int casts to saturate
- Round to zero, and representable values cast directly.
- `NaN` goes to 0
- Values beyond the limits of the type are saturated to the "nearest value"
  (essentially rounding to zero, in some sense) in the integral type, so e.g.
  `f32::INFINITY` would go to `{u,i}N::MAX.`
Diffstat (limited to 'src/librustc_codegen_ssa/mir')
-rw-r--r--src/librustc_codegen_ssa/mir/rvalue.rs2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/librustc_codegen_ssa/mir/rvalue.rs b/src/librustc_codegen_ssa/mir/rvalue.rs
index 19a0138d9cb..bb532abd84b 100644
--- a/src/librustc_codegen_ssa/mir/rvalue.rs
+++ b/src/librustc_codegen_ssa/mir/rvalue.rs
@@ -768,7 +768,7 @@ fn cast_float_to_int<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>>(
 ) -> Bx::Value {
     let fptosui_result = if signed { bx.fptosi(x, int_ty) } else { bx.fptoui(x, int_ty) };
 
-    if !bx.cx().sess().opts.debugging_opts.saturating_float_casts {
+    if let Some(false) = bx.cx().sess().opts.debugging_opts.saturating_float_casts {
         return fptosui_result;
     }