From 3d464947d421744017b9709215f14911ea25947e Mon Sep 17 00:00:00 2001 From: jackh726 Date: Mon, 19 Jul 2021 10:25:20 -0400 Subject: [PATCH] Normalize generic_ty before checking if bound is met --- .../src/infer/lexical_region_resolve/mod.rs | 1 + .../generic-associated-types/issue-81487.rs | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+) create mode 100644 src/test/ui/generic-associated-types/issue-81487.rs diff --git a/compiler/rustc_infer/src/infer/lexical_region_resolve/mod.rs b/compiler/rustc_infer/src/infer/lexical_region_resolve/mod.rs index ab34cda8cc18f..869fd225d5114 100644 --- a/compiler/rustc_infer/src/infer/lexical_region_resolve/mod.rs +++ b/compiler/rustc_infer/src/infer/lexical_region_resolve/mod.rs @@ -638,6 +638,7 @@ impl<'cx, 'tcx> LexicalResolver<'cx, 'tcx> { let sub = var_data.normalize(self.tcx(), verify.region); let verify_kind_ty = verify.kind.to_ty(self.tcx()); + let verify_kind_ty = var_data.normalize(self.tcx(), verify_kind_ty); if self.bound_is_met(&verify.bound, var_data, verify_kind_ty, sub) { continue; } diff --git a/src/test/ui/generic-associated-types/issue-81487.rs b/src/test/ui/generic-associated-types/issue-81487.rs new file mode 100644 index 0000000000000..7f399c4f9a2db --- /dev/null +++ b/src/test/ui/generic-associated-types/issue-81487.rs @@ -0,0 +1,19 @@ +// build-pass + +#![feature(generic_associated_types)] + +trait Trait { + type Ref<'a>; +} + +impl Trait for () { + type Ref<'a> = &'a i8; +} + +struct RefRef<'a, T: Trait>(&'a ::Ref<'a>); + +fn wrap<'a, T: Trait>(reff: &'a ::Ref<'a>) -> RefRef<'a, T> { + RefRef(reff) +} + +fn main() {}