diff options
| author | Tim Chevalier <chevalier@alum.wellesley.edu> | 2012-06-25 12:21:01 -0700 |
|---|---|---|
| committer | Tim Chevalier <chevalier@alum.wellesley.edu> | 2012-06-25 12:21:01 -0700 |
| commit | 91b69aeb63440d0d8ba09fdff57be2e343e6b2e8 (patch) | |
| tree | c8c83226706fa3366fe93a55c51fd10f03ac7518 | |
| parent | e9f19283b3e52db2f591b8c2d5c80e50d2a988a3 (diff) | |
| download | rust-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
| -rw-r--r-- | src/test/run-pass/issue-2718.rs | 38 |
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)})); +} |
