From 432cdee6a6e28c52dae6b69079db301b9681485b Mon Sep 17 00:00:00 2001 From: Philip Herron Date: Sun, 30 Jul 2023 18:59:06 +0100 Subject: gccrs: Fix ICE by adding check for enum candidate's in TypePath resolution Fixes #2479 gcc/rust/ChangeLog: * typecheck/rust-hir-trait-resolve.cc (TraitItemReference::resolve_item): always resolve the type even when its an a mandatory trait item * typecheck/rust-hir-type-check-type.cc (TypeCheckType::resolve_root_path): Add check for enum candidates otherwise you get undefined behaviour gcc/testsuite/ChangeLog: * rust/compile/issue-2479.rs: New test. Signed-off-by: Philip Herron --- gcc/testsuite/rust/compile/issue-2479.rs | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 gcc/testsuite/rust/compile/issue-2479.rs (limited to 'gcc/testsuite/rust/compile') diff --git a/gcc/testsuite/rust/compile/issue-2479.rs b/gcc/testsuite/rust/compile/issue-2479.rs new file mode 100644 index 0000000..4a0d354 --- /dev/null +++ b/gcc/testsuite/rust/compile/issue-2479.rs @@ -0,0 +1,22 @@ +#![allow(unused)] +fn main() { +enum Dragon { + Born, +} + +fn oblivion() -> Dragon::Born { +// { dg-error "expected type, found variant of Dragon" "" { target *-*-* } .-1 } +// { dg-error "failed to resolve return type" "" { target *-*-* } .-2 } + Dragon::Born +} + +enum Wizard { + Gandalf, + Saruman, +} + +trait Isengard { + fn wizard(_: Wizard::Saruman); + // { dg-error "expected type, found variant of Wizard" "" { target *-*-* } .-1 } +} +} -- cgit v1.1