Skip to content

Commit

Permalink
Auto merge of rust-lang#8778 - sunfishcode:main, r=giraffate
Browse files Browse the repository at this point in the history
Fix `cast_lossless` to avoid warning on `usize` to `f64` conversion.

Previously, the `cast_lossless` lint would issue a warning on code that
converted a `usize` value to `f64`, on 32-bit targets.

`usize` to `f64` is a lossless cast on 32-bit targets, however there is
no corresponding `f64::from` that takes a `usize`, so `cast_lossless`'s
suggested replacement does not compile.

This PR disables the lint in the case of casting from `usize` or `isize`.

Fixes rust-lang#3689.

changelog: [`cast_lossless`] no longer gives wrong suggestion on usize,isize->f64
  • Loading branch information
bors committed May 6, 2022
2 parents bf7182c + 6ff77b9 commit 5dad517
Show file tree
Hide file tree
Showing 2 changed files with 1 addition and 15 deletions.
2 changes: 1 addition & 1 deletion clippy_lints/src/casts/cast_lossless.rs
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ fn should_lint(
} else {
64
};
from_nbits < to_nbits
!is_isize_or_usize(cast_from) && from_nbits < to_nbits
},
(false, true) if matches!(cast_from.kind(), ty::Bool) && meets_msrv(msrv.as_ref(), &msrvs::FROM_BOOL) => true,
(_, _) => {
Expand Down
14 changes: 0 additions & 14 deletions tests/ui/cast_size_32bit.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -14,26 +14,12 @@ LL | x0 as f64;
|
= note: `-D clippy::cast-precision-loss` implied by `-D warnings`

error: casting `isize` to `f64` may become silently lossy if you later change the type
--> $DIR/cast_size_32bit.rs:15:5
|
LL | x0 as f64;
| ^^^^^^^^^ help: try: `f64::from(x0)`
|
= note: `-D clippy::cast-lossless` implied by `-D warnings`

error: casting `usize` to `f64` causes a loss of precision on targets with 64-bit wide pointers (`usize` is 64 bits wide, but `f64`'s mantissa is only 52 bits wide)
--> $DIR/cast_size_32bit.rs:16:5
|
LL | x1 as f64;
| ^^^^^^^^^

error: casting `usize` to `f64` may become silently lossy if you later change the type
--> $DIR/cast_size_32bit.rs:16:5
|
LL | x1 as f64;
| ^^^^^^^^^ help: try: `f64::from(x1)`

error: casting `isize` to `f32` causes a loss of precision (`isize` is 32 or 64 bits wide, but `f32`'s mantissa is only 23 bits wide)
--> $DIR/cast_size_32bit.rs:17:5
|
Expand Down

0 comments on commit 5dad517

Please sign in to comment.