From: Liam Naddell <[email protected]>
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 <[email protected]>
---
.../typecheck/rust-hir-type-check-expr.cc | 9 +++++++-
gcc/testsuite/rust/compile/issue-3046.rs | 23 +++++++++++++++++++
2 files changed, 31 insertions(+), 1 deletion(-)
create mode 100644 gcc/testsuite/rust/compile/issue-3046.rs
diff --git a/gcc/rust/typecheck/rust-hir-type-check-expr.cc
b/gcc/rust/typecheck/rust-hir-type-check-expr.cc
index 6212660e571..0e897813d8f 100644
--- a/gcc/rust/typecheck/rust-hir-type-check-expr.cc
+++ b/gcc/rust/typecheck/rust-hir-type-check-expr.cc
@@ -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);
diff --git a/gcc/testsuite/rust/compile/issue-3046.rs
b/gcc/testsuite/rust/compile/issue-3046.rs
new file mode 100644
index 00000000000..c982cc98f58
--- /dev/null
+++ b/gcc/testsuite/rust/compile/issue-3046.rs
@@ -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 }
+}
--
2.45.2