1
+ // Copyright 2013 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
+ // compile-flags:-Z extra-debug-info
12
+ // debugger:break zzz
13
+ // debugger:run
14
+ // debugger:finish
15
+
16
+ // debugger:print some
17
+ // check:$1 = {0x12345678}
18
+
19
+ // debugger:print none
20
+ // check:$2 = {0x0}
21
+
22
+ // debugger:print full
23
+ // check:$3 = {454545, 0x87654321, 9988}
24
+
25
+ // debugger:print empty
26
+ // check:$4 = {0, 0x0, 0}
27
+
28
+ // debugger:print droid
29
+ // check:$5 = {id = 675675, range = 10000001, internals = 0x43218765}
30
+
31
+ // debugger:print void_droid
32
+ // check:$6 = {id = 0, range = 0, internals = 0x0}
33
+
34
+
35
+ // If a struct has exactly two variants, one of them is empty, and the other one
36
+ // contains a non-nullable pointer, then this value is used as the discriminator.
37
+ // The test cases in this file make sure that something readable is generated for
38
+ // this kind of types.
39
+
40
+ enum MoreFields < ' self > {
41
+ Full ( u32 , & ' self int , i16 ) ,
42
+ Empty
43
+ }
44
+
45
+ enum NamedFields < ' self > {
46
+ Droid { id : i32 , range : i64 , internals : & ' self int } ,
47
+ Void
48
+ }
49
+
50
+ fn main ( ) {
51
+
52
+ let some : Option < & u32 > = Some ( unsafe { std:: cast:: transmute ( 0x12345678 ) } ) ;
53
+ let none : Option < & u32 > = None ;
54
+
55
+ let full = Full ( 454545 , unsafe { std:: cast:: transmute ( 0x87654321 ) } , 9988 ) ;
56
+
57
+ let int_val = 0 ;
58
+ let mut empty = Full ( 0 , & int_val, 0 ) ;
59
+ empty = Empty ;
60
+
61
+ let droid = Droid { id : 675675 , range : 10000001 , internals : unsafe { std:: cast:: transmute ( 0x43218765 ) } } ;
62
+
63
+ let mut void_droid = Droid { id : 0 , range : 0 , internals : & int_val } ;
64
+ void_droid = Void ;
65
+
66
+ zzz ( ) ;
67
+ }
68
+
69
+ fn zzz ( ) { ( ) }
0 commit comments