diff options
Diffstat (limited to 'src')
| -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)})); +} |
