diff options
author | Philip Herron <herron.philip@googlemail.com> | 2023-03-24 22:17:36 +0000 |
---|---|---|
committer | Philip Herron <philip.herron@embecosm.com> | 2023-03-24 23:23:18 +0000 |
commit | 03bce1d0847bff5870e8ed18799a8b2c6ab4728d (patch) | |
tree | 42e7b59d60d990d90fc2bb10e242bfbf1e45627b /gcc/rust | |
parent | c6c02b9135e54e181ea6bdd8892a243c50cb6c7a (diff) | |
download | gcc-03bce1d0847bff5870e8ed18799a8b2c6ab4728d.zip gcc-03bce1d0847bff5870e8ed18799a8b2c6ab4728d.tar.gz gcc-03bce1d0847bff5870e8ed18799a8b2c6ab4728d.tar.bz2 |
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 <herron.philip@googlemail.com>
Diffstat (limited to 'gcc/rust')
-rw-r--r-- | gcc/rust/typecheck/rust-hir-type-check-item.cc | 12 |
1 files changed, 11 insertions, 1 deletions
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 |