gccrs: [gccrs#3046] ICE on failing to find enum variant

gcc/rust/ChangeLog:
	* typecheck/rust-hir-type-check-expr.cc:
	Fix ICE caused by not finding enum variant by adding new error
	message

gcc/testsuite/ChangeLog:
	* rust/compile/issue-3046.rs:
	Add test for new error message

Signed-off-by: Liam Naddell <liam.naddell@mail.utoronto.ca>
This commit is contained in:
Liam Naddell 2024-07-12 20:56:08 -04:00 committed by Arthur Cohen
parent f89b07d358
commit 75dce4d629
2 changed files with 31 additions and 1 deletions

View file

@ -194,7 +194,14 @@ TypeCheckExpr::visit (HIR::CallExpr &expr)
HirId variant_id;
bool ok = context->lookup_variant_definition (
expr.get_fnexpr ()->get_mappings ().get_hirid (), &variant_id);
rust_assert (ok);
if (!ok)
{
rust_error_at (expr.get_locus (), ErrorCode::E0423,
"expected function, tuple struct or tuple "
"variant, found enum");
return;
}
TyTy::VariantDef *lookup_variant = nullptr;
ok = adt->lookup_variant_by_id (variant_id, &lookup_variant);

View file

@ -0,0 +1,23 @@
enum Res {
OK,
BAD,
}
enum LOption {
Some(i32),
None,
}
fn test(v: LOption) -> Res {
return Res::BAD;
}
fn main() {
// Should be:
// test(LOption::Some(2));
//
test(LOption(2));
// { dg-error "expected function, tuple struct or tuple variant, found enum" "" { target *-*-* } .-1 }
// { dg-error "failed to resolve type for argument expr in CallExpr" "" { target *-*-* } .-2 }
}