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:
parent
f89b07d358
commit
75dce4d629
2 changed files with 31 additions and 1 deletions
|
@ -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);
|
||||
|
|
23
gcc/testsuite/rust/compile/issue-3046.rs
Normal file
23
gcc/testsuite/rust/compile/issue-3046.rs
Normal 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 }
|
||||
}
|
Loading…
Add table
Reference in a new issue