From 34886ed488f6cc18c3fdc20cdeccab6178e00c0f Mon Sep 17 00:00:00 2001 From: Ben Blum Date: Thu, 23 Aug 2012 22:20:34 -0400 Subject: [PATCH] Add a test case for helpful errors when copying into closures (#2942) --- src/test/compile-fail/copy-into-closure.rs | 39 ++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 src/test/compile-fail/copy-into-closure.rs diff --git a/src/test/compile-fail/copy-into-closure.rs b/src/test/compile-fail/copy-into-closure.rs new file mode 100644 index 00000000000..8ee2a4fd3ae --- /dev/null +++ b/src/test/compile-fail/copy-into-closure.rs @@ -0,0 +1,39 @@ +fn closure1(+x: ~str) -> (~str, fn@() -> ~str) { + let f = fn@() -> ~str { + copy x + //~^ WARNING implicitly copying a non-implicitly-copyable value + //~^^ NOTE to copy values into a @fn closure, use a capture clause + }; + (x,f) +} + +fn closure2(+x: util::NonCopyable) -> (util::NonCopyable, + fn@() -> util::NonCopyable) { + let f = fn@() -> util::NonCopyable { + copy x + //~^ ERROR copying a noncopyable value + //~^^ NOTE non-copyable value cannot be copied into a @fn closure + //~^^^ ERROR copying a noncopyable value + }; + (x,f) +} +fn closure3(+x: util::NonCopyable) { + do task::spawn { + let s = copy x; + //~^ ERROR copying a noncopyable value + //~^^ NOTE non-copyable value cannot be copied into a ~fn closure + //~^^^ ERROR copying a noncopyable value + error!("%?", s); + } + error!("%?", x); +} +fn main() { + let x = ~"hello"; + do task::spawn { + let s = copy x; + //~^ WARNING implicitly copying a non-implicitly-copyable value + //~^^ NOTE to copy values into a ~fn closure, use a capture clause + error!("%s from child", s); + } + error!("%s", x); +}