From 03bce1d0847bff5870e8ed18799a8b2c6ab4728d Mon Sep 17 00:00:00 2001 From: Philip Herron Date: Fri, 24 Mar 2023 22:17:36 +0000 Subject: gccrs: Fix ICE on parsing trait object missing dyn keyword Trait objects are not required to use the 'dyn' keyword though it is depreciated in later editions/version of Rustc. This patch handles the case when we query the type for an HIR::Item which happens to be an HIR::Trait and return a trait object or error. Fixes #2037 gcc/rust/ChangeLog: * typecheck/rust-hir-type-check-item.cc (TypeCheckItem::visit): return a TraitObject gcc/testsuite/ChangeLog: * rust/compile/issue-2037.rs: New test. Signed-off-by: Philip Herron --- gcc/rust/typecheck/rust-hir-type-check-item.cc | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'gcc/rust') diff --git a/gcc/rust/typecheck/rust-hir-type-check-item.cc b/gcc/rust/typecheck/rust-hir-type-check-item.cc index ab7292f..c826536 100644 --- a/gcc/rust/typecheck/rust-hir-type-check-item.cc +++ b/gcc/rust/typecheck/rust-hir-type-check-item.cc @@ -456,7 +456,17 @@ TypeCheckItem::visit (HIR::Module &module) void TypeCheckItem::visit (HIR::Trait &trait) { - TraitResolver::Resolve (trait); + TraitReference *trait_ref = TraitResolver::Resolve (trait); + if (trait_ref->is_error ()) + { + infered = new TyTy::ErrorType (trait.get_mappings ().get_hirid ()); + return; + } + + RustIdent ident{CanonicalPath::create_empty (), trait.get_locus ()}; + infered = new TyTy::DynamicObjectType ( + trait.get_mappings ().get_hirid (), ident, + {TyTy::TypeBoundPredicate (*trait_ref, trait.get_locus ())}); } void -- cgit v1.1