Skip to content

Commit

Permalink
Update float tests to include f16 and f128
Browse files Browse the repository at this point in the history
  • Loading branch information
tgross35 committed Jun 18, 2024
1 parent af397ce commit e9419a9
Show file tree
Hide file tree
Showing 2 changed files with 104 additions and 40 deletions.
28 changes: 28 additions & 0 deletions tests/ui/transmute.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
#![feature(f128)]
#![feature(f16)]
#![allow(
dead_code,
clippy::borrow_as_ptr,
Expand Down Expand Up @@ -117,6 +119,10 @@ fn int_to_bool() {
#[warn(clippy::transmute_int_to_float)]
mod int_to_float {
fn test() {
let _: f16 = unsafe { std::mem::transmute(0_u16) };
//~^ ERROR: transmute from a `u16` to a `f16`
let _: f16 = unsafe { std::mem::transmute(0_i16) };
//~^ ERROR: transmute from a `i16` to a `f16`
let _: f32 = unsafe { std::mem::transmute(0_u32) };
//~^ ERROR: transmute from a `u32` to a `f32`
//~| NOTE: `-D clippy::transmute-int-to-float` implied by `-D warnings`
Expand All @@ -126,11 +132,21 @@ mod int_to_float {
//~^ ERROR: transmute from a `u64` to a `f64`
let _: f64 = unsafe { std::mem::transmute(0_i64) };
//~^ ERROR: transmute from a `i64` to a `f64`
let _: f128 = unsafe { std::mem::transmute(0_u128) };
//~^ ERROR: transmute from a `u128` to a `f128`
let _: f128 = unsafe { std::mem::transmute(0_i128) };
//~^ ERROR: transmute from a `i128` to a `f128`
}

mod issue_5747 {
const VALUE16: f16 = unsafe { std::mem::transmute(0_u16) };
const VALUE32: f32 = unsafe { std::mem::transmute(0_u32) };
const VALUE64: f64 = unsafe { std::mem::transmute(0_i64) };
const VALUE128: f128 = unsafe { std::mem::transmute(0_i128) };

const fn from_bits_16(v: i16) -> f16 {
unsafe { std::mem::transmute(v) }
}

const fn from_bits_32(v: i32) -> f32 {
unsafe { std::mem::transmute(v) }
Expand All @@ -139,6 +155,10 @@ mod int_to_float {
const fn from_bits_64(v: u64) -> f64 {
unsafe { std::mem::transmute(v) }
}

const fn from_bits_128(v: u128) -> f128 {
unsafe { std::mem::transmute(v) }
}
}
}

Expand All @@ -158,10 +178,15 @@ mod num_to_bytes {
//~^ ERROR: transmute from a `i32` to a `[u8; 4]`
let _: [u8; 16] = std::mem::transmute(0i128);
//~^ ERROR: transmute from a `i128` to a `[u8; 16]`

let _: [u8; 2] = std::mem::transmute(0.0f16);
//~^ ERROR: transmute from a `f16` to a `[u8; 2]`
let _: [u8; 4] = std::mem::transmute(0.0f32);
//~^ ERROR: transmute from a `f32` to a `[u8; 4]`
let _: [u8; 8] = std::mem::transmute(0.0f64);
//~^ ERROR: transmute from a `f64` to a `[u8; 8]`
let _: [u8; 16] = std::mem::transmute(0.0f128);
//~^ ERROR: transmute from a `f128` to a `[u8; 16]`
}
}
const fn test_const() {
Expand All @@ -178,8 +203,11 @@ mod num_to_bytes {
//~^ ERROR: transmute from a `i32` to a `[u8; 4]`
let _: [u8; 16] = std::mem::transmute(0i128);
//~^ ERROR: transmute from a `i128` to a `[u8; 16]`

let _: [u8; 2] = std::mem::transmute(0.0f16);
let _: [u8; 4] = std::mem::transmute(0.0f32);
let _: [u8; 8] = std::mem::transmute(0.0f64);
let _: [u8; 16] = std::mem::transmute(0.0f128);
}
}
}
Expand Down
116 changes: 76 additions & 40 deletions tests/ui/transmute.stderr
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
error: transmute from a reference to a pointer
--> tests/ui/transmute.rs:29:23
--> tests/ui/transmute.rs:31:23
|
LL | let _: *const T = core::intrinsics::transmute(t);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `t as *const T`
Expand All @@ -8,61 +8,61 @@ LL | let _: *const T = core::intrinsics::transmute(t);
= help: to override `-D warnings` add `#[allow(clippy::useless_transmute)]`

error: transmute from a reference to a pointer
--> tests/ui/transmute.rs:33:21
--> tests/ui/transmute.rs:35:21
|
LL | let _: *mut T = core::intrinsics::transmute(t);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `t as *const T as *mut T`

error: transmute from a reference to a pointer
--> tests/ui/transmute.rs:36:23
--> tests/ui/transmute.rs:38:23
|
LL | let _: *const U = core::intrinsics::transmute(t);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `t as *const T as *const U`

error: transmute from a type (`std::vec::Vec<i32>`) to itself
--> tests/ui/transmute.rs:43:27
--> tests/ui/transmute.rs:45:27
|
LL | let _: Vec<i32> = core::intrinsics::transmute(my_vec());
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

error: transmute from a type (`std::vec::Vec<i32>`) to itself
--> tests/ui/transmute.rs:46:27
--> tests/ui/transmute.rs:48:27
|
LL | let _: Vec<i32> = core::mem::transmute(my_vec());
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

error: transmute from a type (`std::vec::Vec<i32>`) to itself
--> tests/ui/transmute.rs:49:27
--> tests/ui/transmute.rs:51:27
|
LL | let _: Vec<i32> = std::intrinsics::transmute(my_vec());
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

error: transmute from a type (`std::vec::Vec<i32>`) to itself
--> tests/ui/transmute.rs:52:27
--> tests/ui/transmute.rs:54:27
|
LL | let _: Vec<i32> = std::mem::transmute(my_vec());
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

error: transmute from a type (`std::vec::Vec<i32>`) to itself
--> tests/ui/transmute.rs:55:27
--> tests/ui/transmute.rs:57:27
|
LL | let _: Vec<i32> = my_transmute(my_vec());
| ^^^^^^^^^^^^^^^^^^^^^^

error: transmute from an integer to a pointer
--> tests/ui/transmute.rs:58:31
--> tests/ui/transmute.rs:60:31
|
LL | let _: *const usize = std::mem::transmute(5_isize);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `5_isize as *const usize`

error: transmute from an integer to a pointer
--> tests/ui/transmute.rs:63:31
--> tests/ui/transmute.rs:65:31
|
LL | let _: *const usize = std::mem::transmute(1 + 1usize);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `(1 + 1usize) as *const usize`

error: transmute from a type (`*const Usize`) to the type that it points to (`Usize`)
--> tests/ui/transmute.rs:95:24
--> tests/ui/transmute.rs:97:24
|
LL | let _: Usize = core::intrinsics::transmute(int_const_ptr);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Expand All @@ -71,61 +71,85 @@ LL | let _: Usize = core::intrinsics::transmute(int_const_ptr);
= help: to override `-D warnings` add `#[allow(clippy::crosspointer_transmute)]`

error: transmute from a type (`*mut Usize`) to the type that it points to (`Usize`)
--> tests/ui/transmute.rs:99:24
--> tests/ui/transmute.rs:101:24
|
LL | let _: Usize = core::intrinsics::transmute(int_mut_ptr);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

error: transmute from a type (`Usize`) to a pointer to that type (`*const Usize`)
--> tests/ui/transmute.rs:102:31
--> tests/ui/transmute.rs:104:31
|
LL | let _: *const Usize = core::intrinsics::transmute(my_int());
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

error: transmute from a type (`Usize`) to a pointer to that type (`*mut Usize`)
--> tests/ui/transmute.rs:105:29
--> tests/ui/transmute.rs:107:29
|
LL | let _: *mut Usize = core::intrinsics::transmute(my_int());
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

error: transmute from a `u8` to a `bool`
--> tests/ui/transmute.rs:112:28
--> tests/ui/transmute.rs:114:28
|
LL | let _: bool = unsafe { std::mem::transmute(0_u8) };
| ^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `0_u8 != 0`
|
= note: `-D clippy::transmute-int-to-bool` implied by `-D warnings`
= help: to override `-D warnings` add `#[allow(clippy::transmute_int_to_bool)]`

error: transmute from a `u32` to a `f32`
--> tests/ui/transmute.rs:120:31
error: transmute from a `u16` to a `f16`
--> tests/ui/transmute.rs:122:31
|
LL | let _: f32 = unsafe { std::mem::transmute(0_u32) };
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `f32::from_bits(0_u32)`
LL | let _: f16 = unsafe { std::mem::transmute(0_u16) };
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `f16::from_bits(0_u16)`
|
= note: `-D clippy::transmute-int-to-float` implied by `-D warnings`
= help: to override `-D warnings` add `#[allow(clippy::transmute_int_to_float)]`

error: transmute from a `i16` to a `f16`
--> tests/ui/transmute.rs:124:31
|
LL | let _: f16 = unsafe { std::mem::transmute(0_i16) };
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `f16::from_bits(0_i16 as u16)`

error: transmute from a `u32` to a `f32`
--> tests/ui/transmute.rs:126:31
|
LL | let _: f32 = unsafe { std::mem::transmute(0_u32) };
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `f32::from_bits(0_u32)`

error: transmute from a `i32` to a `f32`
--> tests/ui/transmute.rs:123:31
--> tests/ui/transmute.rs:129:31
|
LL | let _: f32 = unsafe { std::mem::transmute(0_i32) };
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `f32::from_bits(0_i32 as u32)`

error: transmute from a `u64` to a `f64`
--> tests/ui/transmute.rs:125:31
--> tests/ui/transmute.rs:131:31
|
LL | let _: f64 = unsafe { std::mem::transmute(0_u64) };
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `f64::from_bits(0_u64)`

error: transmute from a `i64` to a `f64`
--> tests/ui/transmute.rs:127:31
--> tests/ui/transmute.rs:133:31
|
LL | let _: f64 = unsafe { std::mem::transmute(0_i64) };
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `f64::from_bits(0_i64 as u64)`

error: transmute from a `u128` to a `f128`
--> tests/ui/transmute.rs:135:32
|
LL | let _: f128 = unsafe { std::mem::transmute(0_u128) };
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `f128::from_bits(0_u128)`

error: transmute from a `i128` to a `f128`
--> tests/ui/transmute.rs:137:32
|
LL | let _: f128 = unsafe { std::mem::transmute(0_i128) };
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `f128::from_bits(0_i128 as u128)`

error: transmute from a `u8` to a `[u8; 1]`
--> tests/ui/transmute.rs:148:30
--> tests/ui/transmute.rs:168:30
|
LL | let _: [u8; 1] = std::mem::transmute(0u8);
| ^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `to_ne_bytes()`: `0u8.to_ne_bytes()`
Expand All @@ -134,85 +158,97 @@ LL | let _: [u8; 1] = std::mem::transmute(0u8);
= help: to override `-D warnings` add `#[allow(clippy::transmute_num_to_bytes)]`

error: transmute from a `u32` to a `[u8; 4]`
--> tests/ui/transmute.rs:151:30
--> tests/ui/transmute.rs:171:30
|
LL | let _: [u8; 4] = std::mem::transmute(0u32);
| ^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `to_ne_bytes()`: `0u32.to_ne_bytes()`

error: transmute from a `u128` to a `[u8; 16]`
--> tests/ui/transmute.rs:153:31
--> tests/ui/transmute.rs:173:31
|
LL | let _: [u8; 16] = std::mem::transmute(0u128);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `to_ne_bytes()`: `0u128.to_ne_bytes()`

error: transmute from a `i8` to a `[u8; 1]`
--> tests/ui/transmute.rs:155:30
--> tests/ui/transmute.rs:175:30
|
LL | let _: [u8; 1] = std::mem::transmute(0i8);
| ^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `to_ne_bytes()`: `0i8.to_ne_bytes()`

error: transmute from a `i32` to a `[u8; 4]`
--> tests/ui/transmute.rs:157:30
--> tests/ui/transmute.rs:177:30
|
LL | let _: [u8; 4] = std::mem::transmute(0i32);
| ^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `to_ne_bytes()`: `0i32.to_ne_bytes()`

error: transmute from a `i128` to a `[u8; 16]`
--> tests/ui/transmute.rs:159:31
--> tests/ui/transmute.rs:179:31
|
LL | let _: [u8; 16] = std::mem::transmute(0i128);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `to_ne_bytes()`: `0i128.to_ne_bytes()`

error: transmute from a `f16` to a `[u8; 2]`
--> tests/ui/transmute.rs:182:30
|
LL | let _: [u8; 2] = std::mem::transmute(0.0f16);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `to_ne_bytes()`: `0.0f16.to_ne_bytes()`

error: transmute from a `f32` to a `[u8; 4]`
--> tests/ui/transmute.rs:161:30
--> tests/ui/transmute.rs:184:30
|
LL | let _: [u8; 4] = std::mem::transmute(0.0f32);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `to_ne_bytes()`: `0.0f32.to_ne_bytes()`

error: transmute from a `f64` to a `[u8; 8]`
--> tests/ui/transmute.rs:163:30
--> tests/ui/transmute.rs:186:30
|
LL | let _: [u8; 8] = std::mem::transmute(0.0f64);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `to_ne_bytes()`: `0.0f64.to_ne_bytes()`

error: transmute from a `f128` to a `[u8; 16]`
--> tests/ui/transmute.rs:188:31
|
LL | let _: [u8; 16] = std::mem::transmute(0.0f128);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `to_ne_bytes()`: `0.0f128.to_ne_bytes()`

error: transmute from a `u8` to a `[u8; 1]`
--> tests/ui/transmute.rs:169:30
--> tests/ui/transmute.rs:194:30
|
LL | let _: [u8; 1] = std::mem::transmute(0u8);
| ^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `to_ne_bytes()`: `0u8.to_ne_bytes()`

error: transmute from a `u32` to a `[u8; 4]`
--> tests/ui/transmute.rs:171:30
--> tests/ui/transmute.rs:196:30
|
LL | let _: [u8; 4] = std::mem::transmute(0u32);
| ^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `to_ne_bytes()`: `0u32.to_ne_bytes()`

error: transmute from a `u128` to a `[u8; 16]`
--> tests/ui/transmute.rs:173:31
--> tests/ui/transmute.rs:198:31
|
LL | let _: [u8; 16] = std::mem::transmute(0u128);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `to_ne_bytes()`: `0u128.to_ne_bytes()`

error: transmute from a `i8` to a `[u8; 1]`
--> tests/ui/transmute.rs:175:30
--> tests/ui/transmute.rs:200:30
|
LL | let _: [u8; 1] = std::mem::transmute(0i8);
| ^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `to_ne_bytes()`: `0i8.to_ne_bytes()`

error: transmute from a `i32` to a `[u8; 4]`
--> tests/ui/transmute.rs:177:30
--> tests/ui/transmute.rs:202:30
|
LL | let _: [u8; 4] = std::mem::transmute(0i32);
| ^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `to_ne_bytes()`: `0i32.to_ne_bytes()`

error: transmute from a `i128` to a `[u8; 16]`
--> tests/ui/transmute.rs:179:31
--> tests/ui/transmute.rs:204:31
|
LL | let _: [u8; 16] = std::mem::transmute(0i128);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `to_ne_bytes()`: `0i128.to_ne_bytes()`

error: transmute from a `&[u8]` to a `&str`
--> tests/ui/transmute.rs:190:28
--> tests/ui/transmute.rs:218:28
|
LL | let _: &str = unsafe { std::mem::transmute(B) };
| ^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `std::str::from_utf8(B).unwrap()`
Expand All @@ -221,16 +257,16 @@ LL | let _: &str = unsafe { std::mem::transmute(B) };
= help: to override `-D warnings` add `#[allow(clippy::transmute_bytes_to_str)]`

error: transmute from a `&mut [u8]` to a `&mut str`
--> tests/ui/transmute.rs:193:32
--> tests/ui/transmute.rs:221:32
|
LL | let _: &mut str = unsafe { std::mem::transmute(mb) };
| ^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `std::str::from_utf8_mut(mb).unwrap()`

error: transmute from a `&[u8]` to a `&str`
--> tests/ui/transmute.rs:195:30
--> tests/ui/transmute.rs:223:30
|
LL | const _: &str = unsafe { std::mem::transmute(B) };
| ^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `std::str::from_utf8_unchecked(B)`

error: aborting due to 36 previous errors
error: aborting due to 42 previous errors

0 comments on commit e9419a9

Please sign in to comment.