diff --git a/src/test/compile-fail/block-arg-used-as-lambda-with-illegal-cap.rs b/src/test/compile-fail/block-arg-used-as-lambda-with-illegal-cap.rs new file mode 100644 index 000000000000..d5a0042d107a --- /dev/null +++ b/src/test/compile-fail/block-arg-used-as-lambda-with-illegal-cap.rs @@ -0,0 +1,12 @@ +// error-pattern: copying a noncopyable value + +fn to_lambda1(f: lambda(uint) -> uint) -> lambda(uint) -> uint { + ret f; +} + +fn to_lambda2(b: block(uint) -> uint) -> lambda(uint) -> uint { + ret to_lambda1({|x| b(x)}); +} + +fn main() { +} diff --git a/src/test/run-pass/block-arg-used-as-lambda.rs b/src/test/run-pass/block-arg-used-as-lambda.rs new file mode 100644 index 000000000000..6780e3692f59 --- /dev/null +++ b/src/test/run-pass/block-arg-used-as-lambda.rs @@ -0,0 +1,14 @@ +fn to_lambda(f: lambda(uint) -> uint) -> lambda(uint) -> uint { + ret f; +} + +fn main() { + let x: lambda(uint) -> uint = to_lambda({ |x| x * 2u }); + let y = to_lambda(x); + + let x_r = x(22u); + let y_r = y(x_r); + + assert x_r == 44u; + assert y_r == 88u; +}