about summary refs log tree commit diff
diff options
context:
space:
mode:
authorGuillaume Gomez <guillaume1.gomez@gmail.com>2021-07-22 13:39:21 +0200
committerGitHub <noreply@github.com>2021-07-22 13:39:21 +0200
commite16d023a5e9fc26112699ef3ad5bbc9c5b55ab38 (patch)
tree4bb270620c09143b2149dd44a9c7c68f25a4fb9f
parentaa3d64ef909de336268a37f04fd202019675f234 (diff)
parent3d464947d421744017b9709215f14911ea25947e (diff)
downloadrust-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.rs1
-rw-r--r--src/test/ui/generic-associated-types/issue-81487.rs19
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() {}