mirror of
https://github.com/rust-lang/rust-clippy
synced 2024-11-27 15:11:30 +00:00
fix cast_lossless with macro call
This commit is contained in:
parent
f54275f20f
commit
af2a8478ba
4 changed files with 43 additions and 2 deletions
|
@ -25,7 +25,14 @@ pub(super) fn check(
|
|||
// The suggestion is to use a function call, so if the original expression
|
||||
// has parens on the outside, they are no longer needed.
|
||||
let mut applicability = Applicability::MachineApplicable;
|
||||
let opt = snippet_opt(cx, cast_op.span);
|
||||
let opt = snippet_opt(
|
||||
cx,
|
||||
if cast_op.span.from_expansion() {
|
||||
cast_op.span.source_callsite()
|
||||
} else {
|
||||
cast_op.span
|
||||
},
|
||||
);
|
||||
let sugg = opt.as_ref().map_or_else(
|
||||
|| {
|
||||
applicability = Applicability::HasPlaceholders;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
Loading…
Reference in a new issue