From fb14afd5eb8ab19f08e37e295fb207f0a1bb8e23 Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Tue, 28 Jun 2011 17:47:56 +0200 Subject: [PATCH] Add test cases for resources --- src/comp/middle/trans.rs | 2 +- src/test/compile-fail/copy-a-resource.rs | 8 ++++++++ src/test/run-pass/resource-destruct.rs | 16 ++++++++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 src/test/compile-fail/copy-a-resource.rs create mode 100644 src/test/run-pass/resource-destruct.rs diff --git a/src/comp/middle/trans.rs b/src/comp/middle/trans.rs index 4165ed795ae..e371e0c5264 100644 --- a/src/comp/middle/trans.rs +++ b/src/comp/middle/trans.rs @@ -3137,7 +3137,7 @@ fn copy_val(&@block_ctxt cx, copy_action action, ValueRef dst, ValueRef src, // FIXME this is just a clunky stopgap. we should do proper checking in an // earlier pass. if (!ty::type_is_copyable(ccx.tcx, t)) { - ccx.sess.span_err(cx.sp, "Copying a non-copyable type."); + ccx.sess.span_fatal(cx.sp, "Copying a non-copyable type."); } if (ty::type_is_scalar(ccx.tcx, t) || diff --git a/src/test/compile-fail/copy-a-resource.rs b/src/test/compile-fail/copy-a-resource.rs new file mode 100644 index 00000000000..cbbf12c73f2 --- /dev/null +++ b/src/test/compile-fail/copy-a-resource.rs @@ -0,0 +1,8 @@ +// error-pattern:Copying a non-copyable type + +res foo(int i) {} + +fn main() { + auto x <- foo(10); + auto y = x; +} diff --git a/src/test/run-pass/resource-destruct.rs b/src/test/run-pass/resource-destruct.rs new file mode 100644 index 00000000000..dfde92afede --- /dev/null +++ b/src/test/run-pass/resource-destruct.rs @@ -0,0 +1,16 @@ +res shrinky_pointer(@mutable int i) { + *i -= 1; +} + +fn look_at(&shrinky_pointer pt) -> int { + ret **pt; +} + +fn main() { + auto my_total = @mutable 10; + { + auto pt <- shrinky_pointer(my_total); + assert (look_at(pt) == 10); + } + assert (*my_total == 9); +}