From: Muhammad Mahad Date: Mon, 10 Jul 2023 12:26:45 +0000 (+0500) Subject: gccrs: [E0124] field x is already declared in struct X-Git-Tag: basepoints/gcc-15~2364 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9c99d52d00a941f48d93ae116cd425440bdfa5b2;p=thirdparty%2Fgcc.git gccrs: [E0124] field x is already declared in struct Refactored error message for more than one duplicate fields. gcc/rust/ChangeLog: * hir/rust-ast-lower-base.cc (struct_field_name_exists): called error function. gcc/testsuite/ChangeLog: * rust/compile/bad_pub_enumitems.rs: changed comment to pass test cases. * rust/compile/dup_fields.rs: likewise. * rust/execute/same_field_name.rs: New test. Signed-off-by: Muhammad Mahad --- diff --git a/gcc/rust/hir/rust-ast-lower-base.cc b/gcc/rust/hir/rust-ast-lower-base.cc index 82d1d2cb0013..5a1ce74588a2 100644 --- a/gcc/rust/hir/rust-ast-lower-base.cc +++ b/gcc/rust/hir/rust-ast-lower-base.cc @@ -681,7 +681,8 @@ struct_field_name_exists (std::vector &fields, { RichLocation r (new_field.get_locus ()); r.add_range (field.get_locus ()); - rust_error_at (r, "duplicate field name %qs", + rust_error_at (r, ErrorCode ("E0124"), + "field %qs is already declared", field.get_field_name ().as_string ().c_str ()); return true; } diff --git a/gcc/testsuite/rust/compile/bad_pub_enumitems.rs b/gcc/testsuite/rust/compile/bad_pub_enumitems.rs index e7fd5edb9811..e7eb1caa779f 100644 --- a/gcc/testsuite/rust/compile/bad_pub_enumitems.rs +++ b/gcc/testsuite/rust/compile/bad_pub_enumitems.rs @@ -18,7 +18,7 @@ enum E1 enum E2 { pub A (u8, i32, u64), // { dg-error "visibility qualifier" } - B { a: u8, a: u8 } // { dg-error "duplicate field" }} + B { a: u8, a: u8 } // { dg-error "field .a. is already declared" }} } fn main () @@ -41,7 +41,7 @@ fn main () enum E2 { - Alpha { a: u8, a: u8 }, // { dg-error "duplicate field" }} + Alpha { a: u8, a: u8 }, // { dg-error "field .a. is already declared" }} pub Beta (u8, i32, u64) // { dg-error "visibility qualifier" } } } diff --git a/gcc/testsuite/rust/compile/dup_fields.rs b/gcc/testsuite/rust/compile/dup_fields.rs index ab39955eca05..67003dbed687 100644 --- a/gcc/testsuite/rust/compile/dup_fields.rs +++ b/gcc/testsuite/rust/compile/dup_fields.rs @@ -1,23 +1,23 @@ struct S { a: i32, b: i32, c: u8, a: i128 } -// { dg-error "duplicate field" "" { target *-*-* } .-1 } +// { dg-error "field .a. is already declared" "" { target *-*-* } .-1 } union U { a: i32, b: i32, c: u8, - b: char // { dg-error "duplicate field" "" { target *-*-* } } + b: char // { dg-error "field .b. is already declared" "" { target *-*-* } } } fn main () { struct SS { alpha: i32, beta: i32, gamma: u8, gamma: i128 } - // { dg-error "duplicate field" "" { target *-*-* } .-1 } + // { dg-error "field .gamma. is already declared" "" { target *-*-* } .-1 } union UU { alpha: i32, beta: i32, gamma: u8, beta: char - // { dg-error "duplicate field" "" { target *-*-* } .-1 } + // { dg-error "field .beta. is already declared" "" { target *-*-* } .-1 } } } diff --git a/gcc/testsuite/rust/execute/same_field_name.rs b/gcc/testsuite/rust/execute/same_field_name.rs new file mode 100644 index 000000000000..d57562b39a64 --- /dev/null +++ b/gcc/testsuite/rust/execute/same_field_name.rs @@ -0,0 +1,8 @@ +// https://doc.rust-lang.org/error_codes/E0124.html +fn main() { + struct Foo { + field1: i32, // { dg-error "field .field1. is already declared" } + field1: i32, // { dg-error "field .field1. is already declared" } + field1: i32, // { dg-error "field .field1. is already declared" } + } +}