suggest_to_change_suffix_or_into(err, is_fallible);
true
}
- (&ty::Int(_), &ty::Uint(_)) | (&ty::Uint(_), &ty::Int(_)) => {
+ (&ty::Int(exp), &ty::Uint(found)) => {
+ let is_fallible = match (exp.bit_width(), found.bit_width()) {
+ (Some(exp), Some(found)) if found < exp => false,
+ (None, Some(found)) if found <= 16 => false,
+ _ => true
+ };
+ suggest_to_change_suffix_or_into(err, is_fallible);
+ true
+ },
+ (&ty::Uint(_), &ty::Int(_)) => {
suggest_to_change_suffix_or_into(err, true);
true
}
--- /dev/null
+fn main() {
+ let a = 1u8;
+ let _: i64 = a;
+ //~^ ERROR mismatched types
+
+ let b = 1i8;
+ let _: isize = b;
+ //~^ ERROR mismatched types
+
+ let c = 1u8;
+ let _: isize = c;
+ //~^ ERROR mismatched types
+
+ let d = 1u8;
+ let _: usize = d;
+ //~^ ERROR mismatched types
+}
--- /dev/null
+error[E0308]: mismatched types
+ --> $DIR/integer-into.rs:3:18
+ |
+LL | let _: i64 = a;
+ | --- ^
+ | | |
+ | | expected `i64`, found `u8`
+ | | help: you can convert an `u8` to `i64`: `a.into()`
+ | expected due to this
+
+error[E0308]: mismatched types
+ --> $DIR/integer-into.rs:7:20
+ |
+LL | let _: isize = b;
+ | ----- ^
+ | | |
+ | | expected `isize`, found `i8`
+ | | help: you can convert an `i8` to `isize`: `b.into()`
+ | expected due to this
+
+error[E0308]: mismatched types
+ --> $DIR/integer-into.rs:11:20
+ |
+LL | let _: isize = c;
+ | ----- ^
+ | | |
+ | | expected `isize`, found `u8`
+ | | help: you can convert an `u8` to `isize`: `c.into()`
+ | expected due to this
+
+error[E0308]: mismatched types
+ --> $DIR/integer-into.rs:15:20
+ |
+LL | let _: usize = d;
+ | ----- ^
+ | | |
+ | | expected `usize`, found `u8`
+ | | help: you can convert an `u8` to `usize`: `d.into()`
+ | expected due to this
+
+error: aborting due to 4 previous errors
+
+For more information about this error, try `rustc --explain E0308`.