]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
gccrs: [E0308] mismatch types on assignment
authorMuhammad Mahad <mahadtxt@gmail.com>
Wed, 2 Aug 2023 11:21:15 +0000 (16:21 +0500)
committerArthur Cohen <arthur.cohen@embecosm.com>
Tue, 16 Jan 2024 18:00:26 +0000 (19:00 +0100)
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>
27 files changed:
gcc/rust/typecheck/rust-unify.cc
gcc/testsuite/rust/compile/arrays1.rs
gcc/testsuite/rust/compile/bad_type1.rs
gcc/testsuite/rust/compile/bad_type2.rs
gcc/testsuite/rust/compile/const_generics_6.rs
gcc/testsuite/rust/compile/deadcode_err1.rs
gcc/testsuite/rust/compile/deadcode_err2.rs
gcc/testsuite/rust/compile/func1.rs
gcc/testsuite/rust/compile/func3.rs
gcc/testsuite/rust/compile/func4.rs
gcc/testsuite/rust/compile/func5.rs
gcc/testsuite/rust/compile/generics1.rs
gcc/testsuite/rust/compile/generics2.rs
gcc/testsuite/rust/compile/generics3.rs
gcc/testsuite/rust/compile/implicit_returns_err1.rs
gcc/testsuite/rust/compile/implicit_returns_err2.rs
gcc/testsuite/rust/compile/implicit_returns_err3.rs
gcc/testsuite/rust/compile/implicit_returns_err4.rs
gcc/testsuite/rust/compile/issue-1152.rs
gcc/testsuite/rust/compile/issue-2477.rs
gcc/testsuite/rust/compile/mismatched-types.rs [new file with mode: 0644]
gcc/testsuite/rust/compile/reference1.rs
gcc/testsuite/rust/compile/stmt_with_block_err1.rs
gcc/testsuite/rust/compile/traits1.rs
gcc/testsuite/rust/compile/traits2.rs
gcc/testsuite/rust/compile/tuple_mismatch.rs
gcc/testsuite/rust/compile/tuple_struct3.rs

index 43cb57b85abe96da151cb809c65a2deb34fa0b63..3027f0997390e70e90d04e9711a50de8a61091f0 100644 (file)
@@ -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 ());
 }
 
index 714a6be7afb55713d39105b393a7ed67dddc4ec8..2db56676b0142e53849ee8e240691abd91a88cab 100644 (file)
@@ -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." }
 }
index 93de439704fde9ecaeba299915fb34f32b67be16..88ab13b1e994c1bc0f10a1a589805fbf44284ca1 100644 (file)
@@ -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>." }
 }
index e47b8aac0e7ca19e0bfac35c552304a194b342a4..0fe320632dc7494351ef162f645c2c4bea645ac8 100644 (file)
@@ -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);
 }
index de261236d933188dcea0dccd51bb358c56583efb..b810b9560d39162a156bdebd40fac88c2f3b8203 100644 (file)
@@ -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." }
index 1dbe95731e1d7ef1763dc6fef9a0d5fb34bb31ae..e77cef6852e86bf579967df777c9e984facbbe26 100644 (file)
@@ -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() {
index 8c0eb4617a76b3d8451f2e1c99f157cd70e831fe..832fe998466054723608baa39277cfa69a28f075 100644 (file)
@@ -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 } 
 }
index 6758a3898e308308d6c41306d8fa89952f8aed6a..037d377fff7b2af5c56aaa9889ae792a387d5d90 100644 (file)
@@ -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() {
index 002e5c90ab5cb1f5183d75c7e8a7354ea131995e..338971aa8bd4b15174339548dc45c588984f2a99 100644 (file)
@@ -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 }
 }
index 3b2d2b0d773a5080d67fb2bd5622e647964a704d..1b54878c6df3ad3168965ab91c214bb359391afa 100644 (file)
@@ -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() {
index 05624f524e9416f857e7529c779d2e04a55e373a..6f418a22192613a00f5a05a18bacb57ef16e9484 100644 (file)
@@ -1,5 +1,5 @@
 fn func() -> i32 {
-    return; // { dg-error "expected .i32. got ...." }
+    return; // { dg-error "mismatched types, expected .i32. but got ...." }
 }
 
 fn main() {
index e9bdb3a28457a364e5b0fb039c93ac5bfc17705f..9e440af9e3c9233a14c2bb3ef79b211eed930a22 100644 (file)
@@ -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 {}
index fc203abc4510f9364e97b31960a547692c15d65c..4c95fd1a23c47cd3d2a16c9e07712130139e4887 100644 (file)
@@ -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 {}
index e28953c14f8c74287e4c1cc564d4c7f8a49051a2..514d713a954b213ffd9a35215d3c6cf1d96d499e 100644 (file)
@@ -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 {}
 
index 973ba80fb8662e01bf365668c4ea9b82c0985ed9..1e89854104862db2b0d4bfcab78374702f2649e5 100644 (file)
@@ -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
index fb90748871f56a6792b7abf8417ab50a55c4d056..8d9e6e333409979230a9053e3939daba53db0ded 100644 (file)
@@ -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
index 37b1c62414c5d6753f87ed2f281889bdfa570f97..ac9821377989581209c05ce67bbf43fecd5d0ad2 100644 (file)
@@ -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
     }
index 59c6a020d4c9cdda492ab8de573efd225d18e6e5..16a2f4c99ffbb3576c967555b642c64e3a83b170 100644 (file)
@@ -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 }
     ()
index 15697057ec627488a70c2f520475f2823b62b66a..32908c3513b66ce8089edde2d743bbe793675f6f 100644 (file)
@@ -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 }
 }
index 26831a6625d0fac69813b840572972e2efcd045d..ca13ac57da07bb6c362d63b24c339055092b0f9e 100644 (file)
@@ -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 (file)
index 0000000..08c7512
--- /dev/null
@@ -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." }
+}
index ff791533754b3a216da6fcda85b397795dc57610..2f94754bcb02014ec85d900deb698adba2609f04 100644 (file)
@@ -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 }
 }
index 8780d0feeac617483e15e8b2e74fee4c5bce4878..ec75cae312f1f9529f7fd078c4281a1132b60c61 100644 (file)
@@ -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
     }
 
index 68f5abb5aa018c26dc6e38ea439f7993114e579e..779662c3f4189e534eeb642e4d6df404c1261cee 100644 (file)
@@ -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;
index 3631a092e56248dde4c45ec3824db10884a4b04e..a76f4c02ffc8b8753be0b905a20d201272fa29ff 100644 (file)
@@ -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 }
 }
 
index fbeb4b27fd48746827900a1ab33561d3968238b0..828586b0f09d6acde402baff16c2b28ce3b91adb 100644 (file)
@@ -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
 }
index 4af66b8370e23e59e4d01af8bce7bf0a1e74f6c1..e2fb02fe883972d071e670502ccb3d96bfb1b1c2 100644 (file)
@@ -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 }
 }