RS.CLIPPY.CAST_POSSIBLE_WRAP

Casts that may cause wrapping around the value, e.g., `x as i32` where `x: u32` and `x > i32::MAX`

This checker is a Clippy lint created by The Rust Project Contributors. The documentation shown here is a copy of the original documentation for: cast_possible_wrap. Copyright ©2025 The Rust Team. All rights reserved.

What it does

Checks for casts from an unsigned type to a signed type of the same size, or possibly smaller due to target-dependent integers. Performing such a cast is a no-op for the compiler (that is, nothing is changed at the bit level), and the binary representation of the value is reinterpreted. This can cause wrapping if the value is too big for the target signed type. However, the cast works as defined, so this lint is Allow by default.

Why is this bad?

While such a cast is not bad in itself, the results can be surprising when this is not the intended behavior:

Example

let _ = u32::MAX as i32; // will yield a value of `-1`

Use instead:

let _ = i32::try_from(u32::MAX).ok();