]>
Commit | Line | Data |
---|---|---|
ba9703b0 | 1 | // Require a gdb or lldb that can read DW_TAG_variant_part. |
a1dfa0c6 XL |
2 | // min-gdb-version: 8.2 |
3 | // rust-lldb | |
1a4d82fc JJ |
4 | |
5 | // compile-flags:-g | |
6 | ||
7 | // === GDB TESTS =================================================================================== | |
8 | ||
9 | // gdb-command:run | |
10 | ||
11 | // gdb-command:print *the_a_ref | |
c30ab7b3 | 12 | // gdbr-check:$1 = borrowed_enum::ABC::TheA{x: 0, y: 8970181431921507452} |
1a4d82fc JJ |
13 | |
14 | // gdb-command:print *the_b_ref | |
c30ab7b3 | 15 | // gdbr-check:$2 = borrowed_enum::ABC::TheB(0, 286331153, 286331153) |
1a4d82fc JJ |
16 | |
17 | // gdb-command:print *univariant_ref | |
c30ab7b3 | 18 | // gdbr-check:$3 = borrowed_enum::Univariant::TheOnlyCase(4820353753753434) |
1a4d82fc JJ |
19 | |
20 | ||
21 | // === LLDB TESTS ================================================================================== | |
22 | ||
23 | // lldb-command:run | |
24 | ||
25 | // lldb-command:print *the_a_ref | |
a1dfa0c6 | 26 | // lldbr-check:(borrowed_enum::ABC::TheA) *the_a_ref = TheA { TheA: 0, TheB: 8970181431921507452 } |
1a4d82fc | 27 | // lldb-command:print *the_b_ref |
0bf4aa26 | 28 | // lldbr-check:(borrowed_enum::ABC::TheB) *the_b_ref = { = 0 = 286331153 = 286331153 } |
1a4d82fc | 29 | // lldb-command:print *univariant_ref |
a1dfa0c6 | 30 | // lldbr-check:(borrowed_enum::Univariant) *univariant_ref = { TheOnlyCase = { = 4820353753753434 } } |
1a4d82fc JJ |
31 | |
32 | #![allow(unused_variables)] | |
b039eaaf | 33 | #![feature(omit_gdb_pretty_printer_section)] |
1a4d82fc JJ |
34 | #![omit_gdb_pretty_printer_section] |
35 | ||
36 | // The first element is to ensure proper alignment, irrespective of the machines word size. Since | |
37 | // the size of the discriminant value is machine dependent, this has be taken into account when | |
38 | // datatype layout should be predictable as in this case. | |
39 | enum ABC { | |
40 | TheA { x: i64, y: i64 }, | |
41 | TheB (i64, i32, i32), | |
42 | } | |
43 | ||
44 | // This is a special case since it does not have the implicit discriminant field. | |
45 | enum Univariant { | |
46 | TheOnlyCase(i64) | |
47 | } | |
48 | ||
49 | fn main() { | |
50 | ||
51 | // 0b0111110001111100011111000111110001111100011111000111110001111100 = 8970181431921507452 | |
52 | // 0b01111100011111000111110001111100 = 2088533116 | |
53 | // 0b0111110001111100 = 31868 | |
54 | // 0b01111100 = 124 | |
55 | let the_a = ABC::TheA { x: 0, y: 8970181431921507452 }; | |
56 | let the_a_ref: &ABC = &the_a; | |
57 | ||
58 | // 0b0001000100010001000100010001000100010001000100010001000100010001 = 1229782938247303441 | |
59 | // 0b00010001000100010001000100010001 = 286331153 | |
60 | // 0b0001000100010001 = 4369 | |
61 | // 0b00010001 = 17 | |
62 | let the_b = ABC::TheB (0, 286331153, 286331153); | |
63 | let the_b_ref: &ABC = &the_b; | |
64 | ||
65 | let univariant = Univariant::TheOnlyCase(4820353753753434); | |
66 | let univariant_ref: &Univariant = &univariant; | |
67 | ||
68 | zzz(); // #break | |
69 | } | |
70 | ||
71 | fn zzz() {()} |