diff options
author | Muhammad Mahad <mahadtxt@gmail.com> | 2024-08-15 16:44:55 +0000 |
---|---|---|
committer | Arthur Cohen <arthur.cohen@embecosm.com> | 2025-03-19 15:32:03 +0100 |
commit | bc2331a565d8005b91495df627f3fa72870770cc (patch) | |
tree | b30f7f4098018db011dab9457f7c0a25c68056b7 /gcc | |
parent | 5c2ecc630d95077e533d6cac6bf6c4e0f16ba623 (diff) | |
download | gcc-bc2331a565d8005b91495df627f3fa72870770cc.zip gcc-bc2331a565d8005b91495df627f3fa72870770cc.tar.gz gcc-bc2331a565d8005b91495df627f3fa72870770cc.tar.bz2 |
gccrs: Attempted to access a nonexistent field [E0609]
gcc/rust/ChangeLog:
* typecheck/rust-hir-type-check-expr.cc (TypeCheckExpr::visit):
Add error code and update error message
gcc/testsuite/ChangeLog:
* rust/compile/nonexistent-field.rs: New test.
Signed-off-by: Muhammad Mahad <mahadtxt@gmail.com>
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/rust/typecheck/rust-hir-type-check-expr.cc | 7 | ||||
-rw-r--r-- | gcc/testsuite/rust/compile/nonexistent-field.rs | 14 |
2 files changed, 19 insertions, 2 deletions
diff --git a/gcc/rust/typecheck/rust-hir-type-check-expr.cc b/gcc/rust/typecheck/rust-hir-type-check-expr.cc index 0e897813..81d8295 100644 --- a/gcc/rust/typecheck/rust-hir-type-check-expr.cc +++ b/gcc/rust/typecheck/rust-hir-type-check-expr.cc @@ -85,7 +85,9 @@ TypeCheckExpr::visit (HIR::TupleIndexExpr &expr) TupleIndex index = expr.get_tuple_index (); if ((size_t) index >= tuple->num_fields ()) { - rust_error_at (expr.get_locus (), "unknown field at index %i", index); + rust_error_at (expr.get_locus (), ErrorCode::E0609, + "no field %qi on type %qs", index, + resolved->get_name ().c_str ()); return; } @@ -1078,7 +1080,8 @@ TypeCheckExpr::visit (HIR::FieldAccessExpr &expr) &lookup, nullptr); if (!found) { - rust_error_at (expr.get_locus (), "unknown field [%s] for type [%s]", + rust_error_at (expr.get_locus (), ErrorCode::E0609, + "no field %qs on type %qs", expr.get_field_name ().as_string ().c_str (), adt->as_string ().c_str ()); return; diff --git a/gcc/testsuite/rust/compile/nonexistent-field.rs b/gcc/testsuite/rust/compile/nonexistent-field.rs new file mode 100644 index 0000000..e20c49d --- /dev/null +++ b/gcc/testsuite/rust/compile/nonexistent-field.rs @@ -0,0 +1,14 @@ +#![allow(unused)] +fn main() { + struct StructWithFields { + x: u32, + } + + let s = StructWithFields { x: 0 }; + s.foo; + // { dg-error "no field .foo. on type .StructWithFields.StructWithFields .x.u32... .E0609." "" { target *-*-* } .-1 } + + let numbers = (1, 2, 3); + numbers.3; + // { dg-error "no field .3. on type ..<integer>, <integer>, <integer>.. .E0609." "" { target *-*-* } .-1 } +} |