]> git.proxmox.com Git - rustc.git/blob - src/test/run-pass/static-recursive.rs
New upstream version 1.17.0+dfsg1
[rustc.git] / src / test / run-pass / static-recursive.rs
1 // Copyright 2015 The Rust Project Developers. See the COPYRIGHT
2 // file at the top-level directory of this distribution and at
3 // http://rust-lang.org/COPYRIGHT.
4 //
5 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6 // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8 // option. This file may not be copied, modified, or distributed
9 // except according to those terms.
10
11 static mut S: *const u8 = unsafe { &S as *const *const u8 as *const u8 };
12
13 struct StaticDoubleLinked {
14 prev: &'static StaticDoubleLinked,
15 next: &'static StaticDoubleLinked,
16 data: i32,
17 head: bool
18 }
19
20 static L1: StaticDoubleLinked = StaticDoubleLinked{prev: &L3, next: &L2, data: 1, head: true};
21 static L2: StaticDoubleLinked = StaticDoubleLinked{prev: &L1, next: &L3, data: 2, head: false};
22 static L3: StaticDoubleLinked = StaticDoubleLinked{prev: &L2, next: &L1, data: 3, head: false};
23
24
25 pub fn main() {
26 unsafe { assert_eq!(S, *(S as *const *const u8)); }
27
28 let mut test_vec = Vec::new();
29 let mut cur = &L1;
30 loop {
31 test_vec.push(cur.data);
32 cur = cur.next;
33 if cur.head { break }
34 }
35 assert_eq!(&test_vec, &[1,2,3]);
36
37 let mut test_vec = Vec::new();
38 let mut cur = &L1;
39 loop {
40 cur = cur.prev;
41 test_vec.push(cur.data);
42 if cur.head { break }
43 }
44 assert_eq!(&test_vec, &[3,2,1]);
45 }