public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r14-7880] gccrs: [E0308] mismatch types on assignment
@ 2024-01-16 18:03 Arthur Cohen
0 siblings, 0 replies; only message in thread
From: Arthur Cohen @ 2024-01-16 18:03 UTC (permalink / raw)
To: gcc-cvs
https://gcc.gnu.org/g:5db4f84f883513ff062f77c7eca5fdceeb58c825
commit r14-7880-g5db4f84f883513ff062f77c7eca5fdceeb58c825
Author: Muhammad Mahad <mahadtxt@gmail.com>
Date: Wed Aug 2 16:21:15 2023 +0500
gccrs: [E0308] mismatch types on assignment
This errorcode emits when there are
mismatch types between lhs & rhs of
assignment operator & refactored
message. This error code was used
in many test cases, so updated the
error comments.
gcc/rust/ChangeLog:
* typecheck/rust-unify.cc (UnifyRules::emit_type_mismatch):
refactored & called error function.
gcc/testsuite/ChangeLog:
* rust/compile/arrays1.rs: changed comment to pass testcase.
* rust/compile/bad_type1.rs: likewise.
* rust/compile/bad_type2.rs: likewise.
* rust/compile/const_generics_6.rs: likewise.
* rust/compile/deadcode_err1.rs: likewise.
* rust/compile/deadcode_err2.rs: likewise.
* rust/compile/func1.rs: likewise.
* rust/compile/func3.rs: likewise.
* rust/compile/func4.rs: likewise.
* rust/compile/func5.rs: likewise.
* rust/compile/generics1.rs: likewise.
* rust/compile/generics2.rs: likewise.
* rust/compile/generics3.rs: likewise.
* rust/compile/implicit_returns_err1.rs: likewise.
* rust/compile/implicit_returns_err2.rs: likewise.
* rust/compile/implicit_returns_err3.rs: likewise.
* rust/compile/implicit_returns_err4.rs: likewise.
* rust/compile/issue-1152.rs: likewise.
* rust/compile/issue-2477.rs: likewise.
* rust/compile/reference1.rs: likewise.
* rust/compile/stmt_with_block_err1.rs: likewise.
* rust/compile/traits1.rs: likewise.
* rust/compile/traits2.rs: likewise.
* rust/compile/tuple_mismatch.rs: likewise.
* rust/compile/tuple_struct3.rs: likewise.
* rust/compile/mismatched-types.rs: New test from rustc.
Signed-off-by: Muhammad Mahad <mahadtxt@gmail.com>
Diff:
---
gcc/rust/typecheck/rust-unify.cc | 3 ++-
gcc/testsuite/rust/compile/arrays1.rs | 2 +-
gcc/testsuite/rust/compile/bad_type1.rs | 2 +-
gcc/testsuite/rust/compile/bad_type2.rs | 2 +-
gcc/testsuite/rust/compile/const_generics_6.rs | 2 +-
gcc/testsuite/rust/compile/deadcode_err1.rs | 2 +-
gcc/testsuite/rust/compile/deadcode_err2.rs | 4 ++--
gcc/testsuite/rust/compile/func1.rs | 2 +-
gcc/testsuite/rust/compile/func3.rs | 2 +-
gcc/testsuite/rust/compile/func4.rs | 2 +-
gcc/testsuite/rust/compile/func5.rs | 2 +-
gcc/testsuite/rust/compile/generics1.rs | 2 +-
gcc/testsuite/rust/compile/generics2.rs | 2 +-
gcc/testsuite/rust/compile/generics3.rs | 2 +-
gcc/testsuite/rust/compile/implicit_returns_err1.rs | 2 +-
gcc/testsuite/rust/compile/implicit_returns_err2.rs | 2 +-
gcc/testsuite/rust/compile/implicit_returns_err3.rs | 2 +-
gcc/testsuite/rust/compile/implicit_returns_err4.rs | 2 +-
gcc/testsuite/rust/compile/issue-1152.rs | 4 ++--
gcc/testsuite/rust/compile/issue-2477.rs | 2 +-
gcc/testsuite/rust/compile/mismatched-types.rs | 9 +++++++++
gcc/testsuite/rust/compile/reference1.rs | 2 +-
gcc/testsuite/rust/compile/stmt_with_block_err1.rs | 4 ++--
gcc/testsuite/rust/compile/traits1.rs | 2 +-
gcc/testsuite/rust/compile/traits2.rs | 4 ++--
gcc/testsuite/rust/compile/tuple_mismatch.rs | 2 +-
gcc/testsuite/rust/compile/tuple_struct3.rs | 2 +-
27 files changed, 40 insertions(+), 30 deletions(-)
diff --git a/gcc/rust/typecheck/rust-unify.cc b/gcc/rust/typecheck/rust-unify.cc
index 43cb57b85ab..3027f099739 100644
--- a/gcc/rust/typecheck/rust-unify.cc
+++ b/gcc/rust/typecheck/rust-unify.cc
@@ -122,7 +122,8 @@ UnifyRules::emit_type_mismatch () const
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 ());
}
diff --git a/gcc/testsuite/rust/compile/arrays1.rs b/gcc/testsuite/rust/compile/arrays1.rs
index 714a6be7afb..2db56676b01 100644
--- a/gcc/testsuite/rust/compile/arrays1.rs
+++ b/gcc/testsuite/rust/compile/arrays1.rs
@@ -1,4 +1,4 @@
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." }
}
diff --git a/gcc/testsuite/rust/compile/bad_type1.rs b/gcc/testsuite/rust/compile/bad_type1.rs
index 93de439704f..88ab13b1e99 100644
--- a/gcc/testsuite/rust/compile/bad_type1.rs
+++ b/gcc/testsuite/rust/compile/bad_type1.rs
@@ -1,3 +1,3 @@
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>." }
}
diff --git a/gcc/testsuite/rust/compile/bad_type2.rs b/gcc/testsuite/rust/compile/bad_type2.rs
index e47b8aac0e7..0fe320632dc 100644
--- a/gcc/testsuite/rust/compile/bad_type2.rs
+++ b/gcc/testsuite/rust/compile/bad_type2.rs
@@ -8,7 +8,7 @@ fn main() {
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);
}
diff --git a/gcc/testsuite/rust/compile/const_generics_6.rs b/gcc/testsuite/rust/compile/const_generics_6.rs
index de261236d93..b810b9560d3 100644
--- a/gcc/testsuite/rust/compile/const_generics_6.rs
+++ b/gcc/testsuite/rust/compile/const_generics_6.rs
@@ -1,2 +1,2 @@
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." }
diff --git a/gcc/testsuite/rust/compile/deadcode_err1.rs b/gcc/testsuite/rust/compile/deadcode_err1.rs
index 1dbe95731e1..e77cef6852e 100644
--- a/gcc/testsuite/rust/compile/deadcode_err1.rs
+++ b/gcc/testsuite/rust/compile/deadcode_err1.rs
@@ -3,7 +3,7 @@ fn foo() -> 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() {
diff --git a/gcc/testsuite/rust/compile/deadcode_err2.rs b/gcc/testsuite/rust/compile/deadcode_err2.rs
index 8c0eb4617a7..832fe998466 100644
--- a/gcc/testsuite/rust/compile/deadcode_err2.rs
+++ b/gcc/testsuite/rust/compile/deadcode_err2.rs
@@ -1,11 +1,11 @@
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 }
}
diff --git a/gcc/testsuite/rust/compile/func1.rs b/gcc/testsuite/rust/compile/func1.rs
index 6758a3898e3..037d377fff7 100644
--- a/gcc/testsuite/rust/compile/func1.rs
+++ b/gcc/testsuite/rust/compile/func1.rs
@@ -1,5 +1,5 @@
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() {
diff --git a/gcc/testsuite/rust/compile/func3.rs b/gcc/testsuite/rust/compile/func3.rs
index 002e5c90ab5..338971aa8bd 100644
--- a/gcc/testsuite/rust/compile/func3.rs
+++ b/gcc/testsuite/rust/compile/func3.rs
@@ -4,5 +4,5 @@ fn test(a: i32, b: i32) -> i32 {
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 }
}
diff --git a/gcc/testsuite/rust/compile/func4.rs b/gcc/testsuite/rust/compile/func4.rs
index 3b2d2b0d773..1b54878c6df 100644
--- a/gcc/testsuite/rust/compile/func4.rs
+++ b/gcc/testsuite/rust/compile/func4.rs
@@ -1,4 +1,4 @@
-fn func() -> i32 { // { dg-error "expected .i32. got ...." }
+fn func() -> i32 { // { dg-error "mismatched types, expected .i32. but got ...." }
}
fn main() {
diff --git a/gcc/testsuite/rust/compile/func5.rs b/gcc/testsuite/rust/compile/func5.rs
index 05624f524e9..6f418a22192 100644
--- a/gcc/testsuite/rust/compile/func5.rs
+++ b/gcc/testsuite/rust/compile/func5.rs
@@ -1,5 +1,5 @@
fn func() -> i32 {
- return; // { dg-error "expected .i32. got ...." }
+ return; // { dg-error "mismatched types, expected .i32. but got ...." }
}
fn main() {
diff --git a/gcc/testsuite/rust/compile/generics1.rs b/gcc/testsuite/rust/compile/generics1.rs
index e9bdb3a2845..9e440af9e3c 100644
--- a/gcc/testsuite/rust/compile/generics1.rs
+++ b/gcc/testsuite/rust/compile/generics1.rs
@@ -1,4 +1,4 @@
-// { dg-error "expected .i32. got .i8." "" { target *-*-* } 0 }
+// { dg-error "mismatched types, expected .i32. but got .i8." "" { target *-*-* } 0 }
#[lang = "sized"]
pub trait Sized {}
diff --git a/gcc/testsuite/rust/compile/generics2.rs b/gcc/testsuite/rust/compile/generics2.rs
index fc203abc451..4c95fd1a23c 100644
--- a/gcc/testsuite/rust/compile/generics2.rs
+++ b/gcc/testsuite/rust/compile/generics2.rs
@@ -1,4 +1,4 @@
-// { dg-error "expected .i32. got .i8." "" { target *-*-* } 0 }
+// { dg-error "mismatched types, expected .i32. but got .i8." "" { target *-*-* } 0 }
#[lang = "sized"]
pub trait Sized {}
diff --git a/gcc/testsuite/rust/compile/generics3.rs b/gcc/testsuite/rust/compile/generics3.rs
index e28953c14f8..514d713a954 100644
--- a/gcc/testsuite/rust/compile/generics3.rs
+++ b/gcc/testsuite/rust/compile/generics3.rs
@@ -1,4 +1,4 @@
-// { dg-error "expected .i32. got .i8." "" { target *-*-* } 0 }
+// { dg-error "mismatched types, expected .i32. but got .i8." "" { target *-*-* } 0 }
#[lang = "sized"]
pub trait Sized {}
diff --git a/gcc/testsuite/rust/compile/implicit_returns_err1.rs b/gcc/testsuite/rust/compile/implicit_returns_err1.rs
index 973ba80fb86..1e898541048 100644
--- a/gcc/testsuite/rust/compile/implicit_returns_err1.rs
+++ b/gcc/testsuite/rust/compile/implicit_returns_err1.rs
@@ -1,5 +1,5 @@
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
diff --git a/gcc/testsuite/rust/compile/implicit_returns_err2.rs b/gcc/testsuite/rust/compile/implicit_returns_err2.rs
index fb90748871f..8d9e6e33340 100644
--- a/gcc/testsuite/rust/compile/implicit_returns_err2.rs
+++ b/gcc/testsuite/rust/compile/implicit_returns_err2.rs
@@ -1,5 +1,5 @@
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
diff --git a/gcc/testsuite/rust/compile/implicit_returns_err3.rs b/gcc/testsuite/rust/compile/implicit_returns_err3.rs
index 37b1c62414c..ac982137798 100644
--- a/gcc/testsuite/rust/compile/implicit_returns_err3.rs
+++ b/gcc/testsuite/rust/compile/implicit_returns_err3.rs
@@ -1,4 +1,4 @@
-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
}
diff --git a/gcc/testsuite/rust/compile/implicit_returns_err4.rs b/gcc/testsuite/rust/compile/implicit_returns_err4.rs
index 59c6a020d4c..16a2f4c99ff 100644
--- a/gcc/testsuite/rust/compile/implicit_returns_err4.rs
+++ b/gcc/testsuite/rust/compile/implicit_returns_err4.rs
@@ -1,5 +1,5 @@
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 }
()
diff --git a/gcc/testsuite/rust/compile/issue-1152.rs b/gcc/testsuite/rust/compile/issue-1152.rs
index 15697057ec6..32908c3513b 100644
--- a/gcc/testsuite/rust/compile/issue-1152.rs
+++ b/gcc/testsuite/rust/compile/issue-1152.rs
@@ -1,6 +1,6 @@
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 }
}
diff --git a/gcc/testsuite/rust/compile/issue-2477.rs b/gcc/testsuite/rust/compile/issue-2477.rs
index 26831a6625d..ca13ac57da0 100644
--- a/gcc/testsuite/rust/compile/issue-2477.rs
+++ b/gcc/testsuite/rust/compile/issue-2477.rs
@@ -1,3 +1,3 @@
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 }
diff --git a/gcc/testsuite/rust/compile/mismatched-types.rs b/gcc/testsuite/rust/compile/mismatched-types.rs
new file mode 100644
index 00000000000..08c751235f4
--- /dev/null
+++ b/gcc/testsuite/rust/compile/mismatched-types.rs
@@ -0,0 +1,9 @@
+// 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." }
+}
diff --git a/gcc/testsuite/rust/compile/reference1.rs b/gcc/testsuite/rust/compile/reference1.rs
index ff791533754..2f94754bcb0 100644
--- a/gcc/testsuite/rust/compile/reference1.rs
+++ b/gcc/testsuite/rust/compile/reference1.rs
@@ -2,5 +2,5 @@ fn main() {
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 }
}
diff --git a/gcc/testsuite/rust/compile/stmt_with_block_err1.rs b/gcc/testsuite/rust/compile/stmt_with_block_err1.rs
index 8780d0feeac..ec75cae312f 100644
--- a/gcc/testsuite/rust/compile/stmt_with_block_err1.rs
+++ b/gcc/testsuite/rust/compile/stmt_with_block_err1.rs
@@ -1,11 +1,11 @@
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
}
diff --git a/gcc/testsuite/rust/compile/traits1.rs b/gcc/testsuite/rust/compile/traits1.rs
index 68f5abb5aa0..779662c3f41 100644
--- a/gcc/testsuite/rust/compile/traits1.rs
+++ b/gcc/testsuite/rust/compile/traits1.rs
@@ -3,7 +3,7 @@ pub trait Sized {}
trait Foo {
fn Bar() -> i32 {}
- // { dg-error "expected .i32. got .()." "" { target *-*-* } .-1 }
+ // { dg-error "mismatched types, expected .i32. but got .()." "" { target *-*-* } .-1 }
}
struct Baz;
diff --git a/gcc/testsuite/rust/compile/traits2.rs b/gcc/testsuite/rust/compile/traits2.rs
index 3631a092e56..a76f4c02ffc 100644
--- a/gcc/testsuite/rust/compile/traits2.rs
+++ b/gcc/testsuite/rust/compile/traits2.rs
@@ -3,14 +3,14 @@ pub trait Sized {}
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 }
}
diff --git a/gcc/testsuite/rust/compile/tuple_mismatch.rs b/gcc/testsuite/rust/compile/tuple_mismatch.rs
index fbeb4b27fd4..828586b0f09 100644
--- a/gcc/testsuite/rust/compile/tuple_mismatch.rs
+++ b/gcc/testsuite/rust/compile/tuple_mismatch.rs
@@ -7,7 +7,7 @@ fn main() {
// 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
}
diff --git a/gcc/testsuite/rust/compile/tuple_struct3.rs b/gcc/testsuite/rust/compile/tuple_struct3.rs
index 4af66b8370e..e2fb02fe883 100644
--- a/gcc/testsuite/rust/compile/tuple_struct3.rs
+++ b/gcc/testsuite/rust/compile/tuple_struct3.rs
@@ -2,5 +2,5 @@ struct Foo(i32, i32, bool);
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 }
}
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2024-01-16 18:03 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-01-16 18:03 [gcc r14-7880] gccrs: [E0308] mismatch types on assignment Arthur Cohen
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).