summaryrefslogtreecommitdiffstats
path: root/src/test/ui/higher-rank-trait-bounds/issue-36139-normalize-closure-sig.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/ui/higher-rank-trait-bounds/issue-36139-normalize-closure-sig.rs')
-rw-r--r--src/test/ui/higher-rank-trait-bounds/issue-36139-normalize-closure-sig.rs19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/test/ui/higher-rank-trait-bounds/issue-36139-normalize-closure-sig.rs b/src/test/ui/higher-rank-trait-bounds/issue-36139-normalize-closure-sig.rs
new file mode 100644
index 000000000..2d49151ff
--- /dev/null
+++ b/src/test/ui/higher-rank-trait-bounds/issue-36139-normalize-closure-sig.rs
@@ -0,0 +1,19 @@
+// run-pass
+// Previously the closure's argument would be inferred to
+// <S as ITrait<'a>>::Item, causing an error in MIR type
+// checking
+
+trait ITrait<'a> {type Item;}
+
+struct S {}
+
+impl<'a> ITrait<'a> for S { type Item = &'a mut usize; }
+
+fn m<T, I, F>(_: F)
+ where I: for<'a> ITrait<'a>,
+ F: for<'a> FnMut(<I as ITrait<'a>>::Item) { }
+
+
+fn main() {
+ m::<usize,S,_>(|x| { *x += 1; });
+}