]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
gccrs: [E0323] Implemented associated const, expected another trait
authorMuhammad Mahad <mahadtxt@gmail.com>
Tue, 18 Jul 2023 13:55:32 +0000 (18:55 +0500)
committerArthur Cohen <arthur.cohen@embecosm.com>
Tue, 16 Jan 2024 17:55:59 +0000 (18:55 +0100)
Refactored Error message similiar to rustc.

gcc/rust/ChangeLog:

* typecheck/rust-hir-type-check-implitem.cc (TypeCheckImplItemWithTrait::visit):
called error function.

gcc/testsuite/ChangeLog:

* rust/compile/non_member_const.rs: New test.

Signed-off-by: Muhammad Mahad <mahadtxt@gmail.com>
gcc/rust/typecheck/rust-hir-type-check-implitem.cc
gcc/testsuite/rust/compile/non_member_const.rs [new file with mode: 0644]

index b8a73a731119f158f3b7abb5f4d709acd2b63ba2..189dd8797d112711353876753b4e4fb1327638df 100644 (file)
@@ -389,12 +389,14 @@ TypeCheckImplItemWithTrait::visit (HIR::ConstantItem &constant)
                                       TraitItemReference::TraitItemType::CONST,
                                       &raw_trait_item);
 
-  // unknown trait item
+  // unknown trait item - https://doc.rust-lang.org/error_codes/E0323.html
   if (!found || raw_trait_item->is_error ())
     {
       rich_location r (line_table, constant.get_locus ());
       r.add_range (trait_reference.get_locus ());
-      rust_error_at (r, "constant %<%s%> is not a member of trait %<%s%>",
+      rust_error_at (r, ErrorCode ("E0323"),
+                    "item %qs is an associated const, which does not match "
+                    "its trait %qs",
                     constant.get_identifier ().as_string ().c_str (),
                     trait_reference.get_name ().c_str ());
       return;
diff --git a/gcc/testsuite/rust/compile/non_member_const.rs b/gcc/testsuite/rust/compile/non_member_const.rs
new file mode 100644 (file)
index 0000000..b974002
--- /dev/null
@@ -0,0 +1,15 @@
+// https://doc.rust-lang.org/error_codes/E0323.html
+#![allow(unused)]
+fn main() {
+trait Foo {
+    type N;
+}
+
+struct Bar;
+
+impl Foo for Bar {
+    const N : u32 = 0; // { dg-error "item .N. is an associated const, which does not match its trait .Foo." }
+    // error: item `N` is an associated const, which doesn't match its
+    //        trait `<Bar as Foo>`
+}
+}
\ No newline at end of file