Suggest casting on numeric type error
This commit is contained in:
parent
bb345a0be3
commit
aec16237e4
7 changed files with 1946 additions and 4 deletions
|
|
@ -6,6 +6,10 @@ error[E0308]: mismatched types
|
|||
...
|
||||
37 | write!(hello);
|
||||
| -------------- in this macro invocation
|
||||
help: you can cast an `usize` to `u64`, which will truncate or zero-extend depending on the bit width of `usize`
|
||||
|
|
||||
26 | ($arr.len() * size_of($arr[0]) as )u64); //~ ERROR mismatched types
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error[E0605]: non-primitive cast: `{integer}` as `()`
|
||||
--> $DIR/issue-26480.rs:32:19
|
||||
|
|
|
|||
17
src/test/ui/suggestions/numeric-cast-2.rs
Normal file
17
src/test/ui/suggestions/numeric-cast-2.rs
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
// Copyright 2018 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
fn foo() -> i32 {
|
||||
4
|
||||
}
|
||||
fn main() {
|
||||
let x: u32 = foo();
|
||||
let z: i32 = x + x;
|
||||
}
|
||||
22
src/test/ui/suggestions/numeric-cast-2.stderr
Normal file
22
src/test/ui/suggestions/numeric-cast-2.stderr
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
error[E0308]: mismatched types
|
||||
--> $DIR/numeric-cast-2.rs:15:18
|
||||
|
|
||||
15 | let x: u32 = foo();
|
||||
| ^^^^^ expected u32, found i32
|
||||
help: you can cast an `i32` to `u32`, which will sign-extend the source value
|
||||
|
|
||||
15 | let x: u32 = foo() as u32;
|
||||
| ^^^^^^^^^^^^
|
||||
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/numeric-cast-2.rs:16:18
|
||||
|
|
||||
16 | let z: i32 = x + x;
|
||||
| ^^^^^ expected i32, found u32
|
||||
help: you can cast an `u32` to `i32`, which will truncate the source value
|
||||
|
|
||||
16 | let z: i32 = (x + x as )i32;
|
||||
| ^^^^^^^^^^^^^^
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
336
src/test/ui/suggestions/numeric-cast.rs
Normal file
336
src/test/ui/suggestions/numeric-cast.rs
Normal file
|
|
@ -0,0 +1,336 @@
|
|||
// Copyright 2018 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
|
||||
fn foo<N>(_x: N) {}
|
||||
|
||||
fn main() {
|
||||
let x_usize: usize = 1;
|
||||
let x_u64: u64 = 2;
|
||||
let x_u32: u32 = 3;
|
||||
let x_u16: u16 = 4;
|
||||
let x_u8: u8 = 5;
|
||||
let x_isize: isize = 6;
|
||||
let x_i64: i64 = 7;
|
||||
let x_i32: i32 = 8;
|
||||
let x_i16: i16 = 9;
|
||||
let x_i8: i8 = 10;
|
||||
let x_f64: f64 = 11.0;
|
||||
let x_f32: f32 = 12.0;
|
||||
|
||||
foo::<usize>(x_usize);
|
||||
foo::<usize>(x_u64);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<usize>(x_u32);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<usize>(x_u16);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<usize>(x_u8);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<usize>(x_isize);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<usize>(x_i64);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<usize>(x_i32);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<usize>(x_i16);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<usize>(x_i8);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<usize>(x_f64);
|
||||
//~^ ERROR mismatched types
|
||||
//~| WARN casting here will cause Undefined Behavior
|
||||
foo::<usize>(x_f32);
|
||||
//~^ ERROR mismatched types
|
||||
//~| WARN casting here will cause Undefined Behavior
|
||||
|
||||
foo::<isize>(x_usize);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<isize>(x_u64);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<isize>(x_u32);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<isize>(x_u16);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<isize>(x_u8);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<isize>(x_isize);
|
||||
foo::<isize>(x_i64);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<isize>(x_i32);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<isize>(x_i16);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<isize>(x_i8);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<isize>(x_f64);
|
||||
//~^ ERROR mismatched types
|
||||
//~| WARN casting here will cause Undefined Behavior
|
||||
foo::<isize>(x_f32);
|
||||
//~^ ERROR mismatched types
|
||||
//~| WARN casting here will cause Undefined Behavior
|
||||
|
||||
foo::<u64>(x_usize);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<u64>(x_u64);
|
||||
foo::<u64>(x_u32);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<u64>(x_u16);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<u64>(x_u8);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<u64>(x_isize);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<u64>(x_i64);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<u64>(x_i32);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<u64>(x_i16);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<u64>(x_i8);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<u64>(x_f64);
|
||||
//~^ ERROR mismatched types
|
||||
//~| WARN casting here will cause Undefined Behavior
|
||||
foo::<u64>(x_f32);
|
||||
//~^ ERROR mismatched types
|
||||
//~| WARN casting here will cause Undefined Behavior
|
||||
|
||||
foo::<i64>(x_usize);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<i64>(x_u64);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<i64>(x_u32);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<i64>(x_u16);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<i64>(x_u8);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<i64>(x_isize);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<i64>(x_i64);
|
||||
foo::<i64>(x_i32);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<i64>(x_i16);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<i64>(x_i8);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<i64>(x_f64);
|
||||
//~^ ERROR mismatched types
|
||||
//~| WARN casting here will cause Undefined Behavior
|
||||
foo::<i64>(x_f32);
|
||||
//~^ ERROR mismatched types
|
||||
//~| WARN casting here will cause Undefined Behavior
|
||||
|
||||
foo::<u32>(x_usize);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<u32>(x_u64);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<u32>(x_u32);
|
||||
foo::<u32>(x_u16);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<u32>(x_u8);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<u32>(x_isize);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<u32>(x_i64);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<u32>(x_i32);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<u32>(x_i16);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<u32>(x_i8);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<u32>(x_f64);
|
||||
//~^ ERROR mismatched types
|
||||
//~| WARN casting here will cause Undefined Behavior
|
||||
foo::<u32>(x_f32);
|
||||
//~^ ERROR mismatched types
|
||||
//~| WARN casting here will cause Undefined Behavior
|
||||
|
||||
foo::<i32>(x_usize);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<i32>(x_u64);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<i32>(x_u32);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<i32>(x_u16);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<i32>(x_u8);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<i32>(x_isize);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<i32>(x_i64);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<i32>(x_i32);
|
||||
foo::<i32>(x_i16);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<i32>(x_i8);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<i32>(x_f64);
|
||||
//~^ ERROR mismatched types
|
||||
//~| WARN casting here will cause Undefined Behavior
|
||||
foo::<i32>(x_f32);
|
||||
//~^ ERROR mismatched types
|
||||
//~| WARN casting here will cause Undefined Behavior
|
||||
|
||||
foo::<u16>(x_usize);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<u16>(x_u64);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<u16>(x_u32);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<u16>(x_u16);
|
||||
foo::<u16>(x_u8);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<u16>(x_isize);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<u16>(x_i64);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<u16>(x_i32);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<u16>(x_i16);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<u16>(x_i8);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<u16>(x_f64);
|
||||
//~^ ERROR mismatched types
|
||||
//~| WARN casting here will cause Undefined Behavior
|
||||
foo::<u16>(x_f32);
|
||||
//~^ ERROR mismatched types
|
||||
//~| WARN casting here will cause Undefined Behavior
|
||||
|
||||
foo::<i16>(x_usize);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<i16>(x_u64);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<i16>(x_u32);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<i16>(x_u16);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<i16>(x_u8);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<i16>(x_isize);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<i16>(x_i64);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<i16>(x_i32);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<i16>(x_i16);
|
||||
foo::<i16>(x_i8);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<i16>(x_f64);
|
||||
//~^ ERROR mismatched types
|
||||
//~| WARN casting here will cause Undefined Behavior
|
||||
foo::<i16>(x_f32);
|
||||
//~^ ERROR mismatched types
|
||||
//~| WARN casting here will cause Undefined Behavior
|
||||
|
||||
foo::<u8>(x_usize);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<u8>(x_u64);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<u8>(x_u32);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<u8>(x_u16);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<u8>(x_u8);
|
||||
foo::<u8>(x_isize);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<u8>(x_i64);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<u8>(x_i32);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<u8>(x_i16);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<u8>(x_i8);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<u8>(x_f64);
|
||||
//~^ ERROR mismatched types
|
||||
//~| WARN casting here will cause Undefined Behavior
|
||||
foo::<u8>(x_f32);
|
||||
//~^ ERROR mismatched types
|
||||
//~| WARN casting here will cause Undefined Behavior
|
||||
|
||||
foo::<i8>(x_usize);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<i8>(x_u64);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<i8>(x_u32);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<i8>(x_u16);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<i8>(x_u8);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<i8>(x_isize);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<i8>(x_i64);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<i8>(x_i32);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<i8>(x_i16);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<i8>(x_i8);
|
||||
foo::<i8>(x_f64);
|
||||
//~^ ERROR mismatched types
|
||||
//~| WARN casting here will cause Undefined Behavior
|
||||
foo::<i8>(x_f32);
|
||||
//~^ ERROR mismatched types
|
||||
//~| WARN casting here will cause Undefined Behavior
|
||||
|
||||
foo::<f64>(x_usize);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<f64>(x_u64);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<f64>(x_u32);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<f64>(x_u16);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<f64>(x_u8);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<f64>(x_isize);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<f64>(x_i64);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<f64>(x_i32);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<f64>(x_i16);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<f64>(x_i8);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<f64>(x_f64);
|
||||
foo::<f64>(x_f32);
|
||||
//~^ ERROR mismatched types
|
||||
|
||||
foo::<f32>(x_usize);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<f32>(x_u64);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<f32>(x_u32);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<f32>(x_u16);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<f32>(x_u8);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<f32>(x_isize);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<f32>(x_i64);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<f32>(x_i32);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<f32>(x_i16);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<f32>(x_i8);
|
||||
//~^ ERROR mismatched types
|
||||
foo::<f32>(x_f64);
|
||||
//~^ ERROR mismatched types
|
||||
//~| WARN casting here will cause Undefined Behavior
|
||||
foo::<f32>(x_f32);
|
||||
}
|
||||
1364
src/test/ui/suggestions/numeric-cast.stderr
Normal file
1364
src/test/ui/suggestions/numeric-cast.stderr
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Add table
Add a link
Reference in a new issue