// normal resolution of the item
TyTy::BaseType *lookup
= TypeCheckImplItem::Resolve (parent, function, self, substitutions);
+ if (lookup == nullptr)
+ return;
// map the impl item to the associated trait item
const auto tref = trait_reference.get ();
: Mutability::Mut;
rust_assert (self_param.has_lifetime ());
+ auto region = TyTy::Region::make_anonymous ();
auto maybe_region = context->lookup_and_resolve_lifetime (
self_param.get_lifetime ());
-
- if (!maybe_region.has_value ())
+ if (maybe_region.has_value ())
+ region = maybe_region.value ();
+ else
{
rust_error_at (self_param.get_locus (),
"failed to resolve lifetime");
- return get_error ();
}
+
self_type = new TyTy::ReferenceType (
self_param.get_mappings ().get_hirid (),
- TyTy::TyVar (self->get_ref ()), mutability,
- maybe_region.value ());
+ TyTy::TyVar (self->get_ref ()), mutability, region);
}
break;
--- /dev/null
+trait MemoryUnit {
+ extern "C" fn read_dword(&'s self) -> u16 {}
+ // { dg-error {failed to resolve lifetime} "" { target *-*-* } .-1 }
+ // { dg-error {mismatched types} "" { target *-*-* } .-2 }
+}
+
+impl MemoryUnit for MemoryUnit {
+ extern "C" fn read_dword(&'s self) -> u16 {
+ let b16 = self.read_word() as u16;
+
+ b16 << 8
+ }
+}