about summary refs log tree commit diff
path: root/tests/ui/impl-trait/impl_fn_associativity.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ui/impl-trait/impl_fn_associativity.rs')
-rw-r--r--tests/ui/impl-trait/impl_fn_associativity.rs26
1 files changed, 26 insertions, 0 deletions
diff --git a/tests/ui/impl-trait/impl_fn_associativity.rs b/tests/ui/impl-trait/impl_fn_associativity.rs
new file mode 100644
index 00000000000..71a8f9c7796
--- /dev/null
+++ b/tests/ui/impl-trait/impl_fn_associativity.rs
@@ -0,0 +1,26 @@
+// run-pass
+#![feature(impl_trait_in_fn_trait_return)]
+use std::fmt::Debug;
+
+fn f_debug() -> impl Fn() -> impl Debug {
+    || ()
+}
+
+fn ff_debug() -> impl Fn() -> impl Fn() -> impl Debug {
+    || f_debug()
+}
+
+fn multi() -> impl Fn() -> (impl Debug + Send) {
+    || ()
+}
+
+fn main() {
+    // Check that `ff_debug` is `() -> (() -> Debug)` and not `(() -> ()) -> Debug`
+    let debug = ff_debug()()();
+    assert_eq!(format!("{:?}", debug), "()");
+
+    let x = multi()();
+    assert_eq!(format!("{:?}", x), "()");
+    fn assert_send(_: &impl Send) {}
+    assert_send(&x);
+}