about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorTim Chevalier <chevalier@alum.wellesley.edu>2012-06-25 12:21:01 -0700
committerTim Chevalier <chevalier@alum.wellesley.edu>2012-06-25 12:21:01 -0700
commit91b69aeb63440d0d8ba09fdff57be2e343e6b2e8 (patch)
treec8c83226706fa3366fe93a55c51fd10f03ac7518 /src
parente9f19283b3e52db2f591b8c2d5c80e50d2a988a3 (diff)
downloadrust-91b69aeb63440d0d8ba09fdff57be2e343e6b2e8.tar.gz
rust-91b69aeb63440d0d8ba09fdff57be2e343e6b2e8.zip
Test case for issue 2718
This was already fixed by the time I read the issue, but more test
cases are always good.

Closes #2718
Diffstat (limited to 'src')
-rw-r--r--src/test/run-pass/issue-2718.rs38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/test/run-pass/issue-2718.rs b/src/test/run-pass/issue-2718.rs
new file mode 100644
index 00000000000..e31e57d9213
--- /dev/null
+++ b/src/test/run-pass/issue-2718.rs
@@ -0,0 +1,38 @@
+fn sender_terminate<T:send>(p: *packet<T>) {
+}
+
+class send_packet<T: send> {
+        let mut p: option<*packet<T>>;
+        new(p: *packet<T>) { self.p = some(p); }
+        drop {
+            if self.p != none {
+                let mut p = none;
+                p <-> self.p;
+                sender_terminate(option::unwrap(p))
+            }
+        }
+        fn unwrap() -> *packet<T> {
+            let mut p = none;
+            p <-> self.p;
+            option::unwrap(p)
+        }
+}
+
+enum state {
+        empty,
+        full,
+        blocked,
+        terminated
+}
+
+type packet<T: send> = {
+        mut state: state,
+        mut blocked_task: option<task::task>,
+        mut payload: option<T>
+};
+
+fn main() {
+  let _s: send_packet<int> = send_packet(ptr::addr_of({mut state: empty,
+        mut blocked_task: none,
+        mut payload: some(42)}));
+}