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).