summaryrefslogtreecommitdiffstats
path: root/src/test/ui/expr/malformed_closure/ruby_style_closure.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/ui/expr/malformed_closure/ruby_style_closure.rs')
-rw-r--r--src/test/ui/expr/malformed_closure/ruby_style_closure.rs16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/test/ui/expr/malformed_closure/ruby_style_closure.rs b/src/test/ui/expr/malformed_closure/ruby_style_closure.rs
new file mode 100644
index 000000000..e4341e196
--- /dev/null
+++ b/src/test/ui/expr/malformed_closure/ruby_style_closure.rs
@@ -0,0 +1,16 @@
+// Part of issue #27300.
+// The problem here is that ruby-style closures are parsed as blocks whose
+// first statement is a closure. See the issue for more details:
+// https://github.com/rust-lang/rust/issues/27300
+
+// Note: this test represents what the compiler currently emits. The error
+// message will be improved later.
+
+fn main() {
+ let p = Some(45).and_then({
+ //~^ expected a `FnOnce<({integer},)>` closure, found `Option<_>`
+ |x| println!("doubling {}", x);
+ Some(x * 2)
+ //~^ ERROR: cannot find value `x` in this scope
+ });
+}