Fixes Rust-GCC#3927
gcc/rust/ChangeLog:
* typecheck/rust-hir-type-check-expr.cc (TypeCheckExpr::visit): check
and properly emit an error when the tuple index is on a non-tuple-struct.
gcc/testsuite/ChangeLog:
* rust/compile/tuple_index_on_non_tuple.rs: New test.
Signed-off-by: Ryo Yoshida <low.ryoshida@gmail.com>
}
TyTy::ADTType *adt = static_cast<TyTy::ADTType *> (resolved);
- rust_assert (!adt->is_enum ());
+ if (!adt->is_tuple_struct ())
+ {
+ rust_error_at (expr.get_locus (),
+ "expected tuple or tuple struct, found %qs",
+ adt->get_name ().c_str ());
+ return;
+ }
rust_assert (adt->number_of_variants () == 1);
TyTy::VariantDef *variant = adt->get_variants ().at (0);
--- /dev/null
+enum E {
+ V(usize),
+}
+
+struct S {
+ field: i32,
+}
+
+fn main() {
+ let e = E::V(0);
+ let _ = e.0; // { dg-error "expected tuple or tuple struct, found 'E'" }
+
+ let s = S { field: 0 };
+ let _ = s.0; // { dg-error "expected tuple or tuple struct, found 'S'" }
+}