fix cast_lossless with macro call

This commit is contained in:
mojave2 2023-09-16 23:17:47 +08:00
parent f54275f20f
commit af2a8478ba
No known key found for this signature in database
4 changed files with 43 additions and 2 deletions

View file

@ -49,3 +49,14 @@ mod cast_lossless_in_impl {
enum Test {
A = u32::MAX as i64 + 1,
}
fn issue11458() {
macro_rules! sign_cast {
($var: ident, $src: ty, $dest: ty) => {
<$dest>::from_ne_bytes(($var as $src).to_ne_bytes())
};
}
let x = 10_u128;
let _ = i32::from(sign_cast!(x, u8, i8));
let _ = i32::from(sign_cast!(x, u8, i8) + 1);
}

View file

@ -49,3 +49,14 @@ mod cast_lossless_in_impl {
enum Test {
A = u32::MAX as i64 + 1,
}
fn issue11458() {
macro_rules! sign_cast {
($var: ident, $src: ty, $dest: ty) => {
<$dest>::from_ne_bytes(($var as $src).to_ne_bytes())
};
}
let x = 10_u128;
let _ = sign_cast!(x, u8, i8) as i32;
let _ = (sign_cast!(x, u8, i8) + 1) as i32;
}

View file

@ -115,5 +115,17 @@ error: casting `u8` to `u16` may become silently lossy if you later change the t
LL | let _ = (1u8 + 1u8) as u16;
| ^^^^^^^^^^^^^^^^^^ help: try: `u16::from(1u8 + 1u8)`
error: aborting due to 19 previous errors
error: casting `i8` to `i32` may become silently lossy if you later change the type
--> $DIR/cast_lossless_integer.rs:60:13
|
LL | let _ = sign_cast!(x, u8, i8) as i32;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `i32::from(sign_cast!(x, u8, i8))`
error: casting `i8` to `i32` may become silently lossy if you later change the type
--> $DIR/cast_lossless_integer.rs:61:13
|
LL | let _ = (sign_cast!(x, u8, i8) + 1) as i32;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `i32::from(sign_cast!(x, u8, i8) + 1)`
error: aborting due to 21 previous errors