diff options
| author | Guillaume Gomez <guillaume1.gomez@gmail.com> | 2021-07-22 13:39:21 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-07-22 13:39:21 +0200 |
| commit | e16d023a5e9fc26112699ef3ad5bbc9c5b55ab38 (patch) | |
| tree | 4bb270620c09143b2149dd44a9c7c68f25a4fb9f | |
| parent | aa3d64ef909de336268a37f04fd202019675f234 (diff) | |
| parent | 3d464947d421744017b9709215f14911ea25947e (diff) | |
| download | rust-e16d023a5e9fc26112699ef3ad5bbc9c5b55ab38.tar.gz rust-e16d023a5e9fc26112699ef3ad5bbc9c5b55ab38.zip | |
Rollup merge of #87281 - rust-lang:issue-81487, r=nikomatsakis
Normalize generic_ty before checking if bound is met Fixes #81487 r? `@nikomatsakis`
| -rw-r--r-- | compiler/rustc_infer/src/infer/lexical_region_resolve/mod.rs | 1 | ||||
| -rw-r--r-- | src/test/ui/generic-associated-types/issue-81487.rs | 19 |
2 files changed, 20 insertions, 0 deletions
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 ab34cda8cc1..869fd225d51 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 00000000000..7f399c4f9a2 --- /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 <T as Trait>::Ref<'a>); + +fn wrap<'a, T: Trait>(reff: &'a <T as Trait>::Ref<'a>) -> RefRef<'a, T> { + RefRef(reff) +} + +fn main() {} |
