rich_location r (line_table, locus);
r.add_range (lhs.get_locus ());
r.add_range (rhs.get_locus ());
- rust_error_at (r, "expected %<%s%> got %<%s%>",
+ rust_error_at (r, ErrorCode::E0308,
+ "mismatched types, expected %qs but got %qs",
expected->get_name ().c_str (), expr->get_name ().c_str ());
}
fn main() {
let xs: [i32; 5] = [1, 2, 3, 4, 5];
- let a: bool = xs[0]; // { dg-error "expected .bool. got .i32." }
+ let a: bool = xs[0]; // { dg-error "mismatched types, expected .bool. but got .i32." }
}
fn main() {
- let logical: bool = 123; // { dg-error "expected .bool. got .<integer>." }
+ let logical: bool = 123; // { dg-error "mismatched types, expected .bool. but got .<integer>." }
}
let mut x;
x = 1;
- x = true; // { dg-error "expected .<integer>. got .bool." }
+ x = true; // { dg-error "mismatched types, expected .<integer>. but got .bool." }
let call_test = test(1);
}
struct Foo<const N: usize>;
-struct Bar<const N: usize = { 15i32 }>; // { dg-error "expected .usize. got .i32." }
+struct Bar<const N: usize = { 15i32 }>; // { dg-error "mismatched types, expected .usize. but got .i32." }
let mut a = 1; // { dg-warning "unreachable statement" }
a = 1.1; // { dg-warning "unreachable statement" }
- // { dg-error "expected .<integer>. got .<float>." "" { target *-*-* } .-1 }
+ // { dg-error "mismatched types, expected .<integer>. but got .<float>." "" { target *-*-* } .-1 }
}
fn main() {
fn foo() -> i32 {
return 1;
- return 1.5; // { dg-error "expected .i32. got .<float>." }
+ return 1.5; // { dg-error "mismatched types, expected .i32. but got .<float>." }
// { dg-warning "unreachable statement" "" { target *-*-* } .-1 }
}
fn bar() -> i32 {
- return 1.5; // { dg-error "expected .i32. got .<float>." }
+ return 1.5; // { dg-error "mismatched types, expected .i32. but got .<float>." }
return 1;
// { dg-warning "unreachable statement" "" { target *-*-* } .-1 }
}
fn test(x: i32) -> bool {
- return x + 1; // { dg-error "expected .bool. got .i32." }
+ return x + 1; // { dg-error "mismatched types, expected .bool. but got .i32." }
}
fn main() {
fn main() {
let a = test(1, true);
- // { dg-error "expected .i32. got .bool." "" { target *-*-* } .-1 }
+ // { dg-error "mismatched types, expected .i32. but got .bool." "" { target *-*-* } .-1 }
}
-fn func() -> i32 { // { dg-error "expected .i32. got ...." }
+fn func() -> i32 { // { dg-error "mismatched types, expected .i32. but got ...." }
}
fn main() {
fn func() -> i32 {
- return; // { dg-error "expected .i32. got ...." }
+ return; // { dg-error "mismatched types, expected .i32. but got ...." }
}
fn main() {
-// { dg-error "expected .i32. got .i8." "" { target *-*-* } 0 }
+// { dg-error "mismatched types, expected .i32. but got .i8." "" { target *-*-* } 0 }
#[lang = "sized"]
pub trait Sized {}
-// { dg-error "expected .i32. got .i8." "" { target *-*-* } 0 }
+// { dg-error "mismatched types, expected .i32. but got .i8." "" { target *-*-* } 0 }
#[lang = "sized"]
pub trait Sized {}
-// { dg-error "expected .i32. got .i8." "" { target *-*-* } 0 }
+// { dg-error "mismatched types, expected .i32. but got .i8." "" { target *-*-* } 0 }
#[lang = "sized"]
pub trait Sized {}
fn test(x: i32) -> i32 {
- if x > 1 { // { dg-error "expected .... got .<integer>." }
+ if x > 1 { // { dg-error "mismatched types, expected .... but got .<integer>." }
1
} else {
2
fn test(x: i32) -> i32 {
- // { dg-error "expected .i32. got .bool." "" { target *-*-* } .-1 }
+ // { dg-error "mismatched types, expected .i32. but got .bool." "" { target *-*-* } .-1 }
return 1;
// { dg-warning "unreachable expression" "" { target *-*-* } .+1 }
true
-fn test(x: i32) -> i32 { // { dg-error "expected .i32. got ...." }
+fn test(x: i32) -> i32 { // { dg-error "mismatched types, expected .i32. but got ...." }
if x > 1 {
1
}
fn test(x: bool) -> bool {
- // { dg-error "expected .bool. got ...." "" { target *-*-*} .-1 }
+ // { dg-error "mismatched types, expected .bool. but got ...." "" { target *-*-*} .-1 }
return x;
// { dg-warning "unreachable expression" "" { target *-*-* } .+1 }
()
fn test() {
let f = [0; -4_isize];
- // { dg-error "expected .usize. got .isize." "" { target *-*-* } .-1 }
+ // { dg-error "mismatched types, expected .usize. but got .isize." "" { target *-*-* } .-1 }
let f = [0_usize; -1_isize];
- // { dg-error "expected .usize. got .isize." "" { target *-*-* } .-1 }
+ // { dg-error "mismatched types, expected .usize. but got .isize." "" { target *-*-* } .-1 }
}
const FOO: u32 = return 0;
// { dg-error "return statement outside of function body" "" { target *-*-* } .-1 }
-// { dg-error "expected .u32. got" "" { target *-*-* } .-2 }
+// { dg-error "mismatched types, expected .u32. but got" "" { target *-*-* } .-2 }
--- /dev/null
+// ErrorCode::E0308
+#![allow(unused)]
+fn main() {
+ fn plus_one(x: i32) -> i32 {
+ x + 1
+ }
+ plus_one("Not a number"); // { dg-error "mismatched types, expected .i32. but got .& str." }
+ let x: f32 = "Not a float"; // { dg-error "mismatched types, expected .f32. but got .& str." }
+}
let a = &123;
let b: &mut i32 = a;
// { dg-error "mismatched mutability" "" { target *-*-* } .-1 }
- // { dg-error "expected .&mut i32. got .& i32." "" { target *-*-* } .-2 }
+ // { dg-error "mismatched types, expected .&mut i32. but got .& i32." "" { target *-*-* } .-2 }
}
fn test(x: i32) -> i32 {
- if x > 1 { // { dg-error "expected .... got .<integer>." }
+ if x > 1 { // { dg-error "mismatched types, expected .... but got .<integer>." }
1
} else {
2
}
- { // { dg-error "expected .... got .<integer>." }
+ { // { dg-error "mismatched types, expected .... but got .<integer>." }
3
}
trait Foo {
fn Bar() -> i32 {}
- // { dg-error "expected .i32. got .()." "" { target *-*-* } .-1 }
+ // { dg-error "mismatched types, expected .i32. but got .()." "" { target *-*-* } .-1 }
}
struct Baz;
trait Foo {
fn Bar() -> i32 {}
- // { dg-error "expected .i32. got .()." "" { target *-*-* } .-1 }
+ // { dg-error "mismatched types, expected .i32. but got .()." "" { target *-*-* } .-1 }
}
struct Baz;
impl Foo for Baz {
fn Bar() {}
- // { dg-error "expected" "" { target *-*-* } .-1 }
+ // { dg-error "mismatched types, expected" "" { target *-*-* } .-1 }
// { dg-error "method .Bar. has an incompatible type for trait .Foo." "" { target *-*-* } .-2 }
}
// The lhs and rhs sizes don't match, but we still resolve 'a' to be bool, we don't
// error out immediately once we notice the size mismatch.
-fn foo() -> i32 { // { dg-error "expected .i32. got .bool." }
+fn foo() -> i32 { // { dg-error "mismatched types, expected .i32. but got .bool." }
let (a, _) = (true, 2, 3); // { dg-error "expected a tuple with 3 elements, found one with 2 elements" }
a
}
fn main() {
let c = Foo(1, 2f32, true);
- // { dg-error "expected .i32. got .f32." "" { target *-*-* } .-1 }
+ // { dg-error "mismatched types, expected .i32. but got .f32." "" { target *-*-* } .-1 }
}