diff options
| author | Mark Rousskov <mark.simulacrum@gmail.com> | 2020-04-17 21:42:22 -0400 |
|---|---|---|
| committer | Mark Rousskov <mark.simulacrum@gmail.com> | 2020-05-06 08:14:21 -0400 |
| commit | 9907ad6ed9fde5ccdb58a7d59d652a4c8a98a346 (patch) | |
| tree | 7470f8e3ea081729bd155d40dab7310f601c5940 /src/test/codegen/unchecked-float-casts.rs | |
| parent | a0c61a904482129989f5c1e5cb9f1008efb76f7f (diff) | |
| download | rust-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/test/codegen/unchecked-float-casts.rs')
| -rw-r--r-- | src/test/codegen/unchecked-float-casts.rs | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/src/test/codegen/unchecked-float-casts.rs b/src/test/codegen/unchecked-float-casts.rs index 34e96122223..789feea12d6 100644 --- a/src/test/codegen/unchecked-float-casts.rs +++ b/src/test/codegen/unchecked-float-casts.rs @@ -1,7 +1,7 @@ -// compile-flags: -C no-prepopulate-passes +// This file tests that we don't generate any code for saturation when using the +// unchecked intrinsics. -// This file tests that we don't generate any code for saturation if -// -Z saturating-float-casts is not enabled. +// compile-flags: -C opt-level=3 #![crate_type = "lib"] @@ -12,7 +12,7 @@ pub fn f32_to_u32(x: f32) -> u32 { // CHECK-NOT: fcmp // CHECK-NOT: icmp // CHECK-NOT: select - x as u32 + unsafe { x.to_int_unchecked() } } // CHECK-LABEL: @f32_to_i32 @@ -22,7 +22,7 @@ pub fn f32_to_i32(x: f32) -> i32 { // CHECK-NOT: fcmp // CHECK-NOT: icmp // CHECK-NOT: select - x as i32 + unsafe { x.to_int_unchecked() } } #[no_mangle] @@ -31,5 +31,5 @@ pub fn f64_to_u16(x: f64) -> u16 { // CHECK-NOT: fcmp // CHECK-NOT: icmp // CHECK-NOT: select - x as u16 + unsafe { x.to_int_unchecked() } } |
