]> git.proxmox.com Git - rustc.git/blame - src/test/debuginfo/unique-enum.rs
New upstream version 1.17.0+dfsg1
[rustc.git] / src / test / debuginfo / unique-enum.rs
CommitLineData
1a4d82fc
JJ
1// Copyright 2013-2014 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// ignore-tidy-linelength
1a4d82fc 12// min-lldb-version: 310
8bb4bdeb 13// ignore-gdb-version: 7.11.90 - 7.12.9
1a4d82fc
JJ
14
15// compile-flags:-g
16
17// === GDB TESTS ===================================================================================
18
19// gdb-command:run
20
21// gdb-command:print *the_a
476ff2be 22// gdbg-check:$1 = {{RUST$ENUM$DISR = TheA, x = 0, y = 8970181431921507452}, {RUST$ENUM$DISR = TheA, [...]}}
c30ab7b3 23// gdbr-check:$1 = unique_enum::ABC::TheA{x: 0, y: 8970181431921507452}
1a4d82fc
JJ
24
25// gdb-command:print *the_b
476ff2be 26// gdbg-check:$2 = {{RUST$ENUM$DISR = TheB, [...]}, {RUST$ENUM$DISR = TheB, __0 = 0, __1 = 286331153, __2 = 286331153}}
c30ab7b3 27// gdbr-check:$2 = unique_enum::ABC::TheB(0, 286331153, 286331153)
1a4d82fc
JJ
28
29// gdb-command:print *univariant
c30ab7b3
SL
30// gdbg-check:$3 = {{__0 = 123234}}
31// gdbr-check:$3 = unique_enum::Univariant::TheOnlyCase(123234)
1a4d82fc
JJ
32
33
34// === LLDB TESTS ==================================================================================
35
36// lldb-command:run
37
38// lldb-command:print *the_a
39// lldb-check:[...]$0 = TheA { x: 0, y: 8970181431921507452 }
40
41// lldb-command:print *the_b
42// lldb-check:[...]$1 = TheB(0, 286331153, 286331153)
43
44// lldb-command:print *univariant
45// lldb-check:[...]$2 = TheOnlyCase(123234)
46
47#![allow(unused_variables)]
48#![feature(box_syntax)]
b039eaaf 49#![feature(omit_gdb_pretty_printer_section)]
1a4d82fc
JJ
50#![omit_gdb_pretty_printer_section]
51
52// The first element is to ensure proper alignment, irrespective of the machines word size. Since
53// the size of the discriminant value is machine dependent, this has be taken into account when
54// datatype layout should be predictable as in this case.
55enum ABC {
56 TheA { x: i64, y: i64 },
57 TheB (i64, i32, i32),
58}
59
60// This is a special case since it does not have the implicit discriminant field.
61enum Univariant {
62 TheOnlyCase(i64)
63}
64
65fn main() {
66
c34b1796 67 // In order to avoid endianness trouble all of the following test values consist of a single
1a4d82fc
JJ
68 // repeated byte. This way each interpretation of the union should look the same, no matter if
69 // this is a big or little endian machine.
70
71 // 0b0111110001111100011111000111110001111100011111000111110001111100 = 8970181431921507452
72 // 0b01111100011111000111110001111100 = 2088533116
73 // 0b0111110001111100 = 31868
74 // 0b01111100 = 124
c34b1796 75 let the_a: Box<_> = box ABC::TheA { x: 0, y: 8970181431921507452 };
1a4d82fc
JJ
76
77 // 0b0001000100010001000100010001000100010001000100010001000100010001 = 1229782938247303441
78 // 0b00010001000100010001000100010001 = 286331153
79 // 0b0001000100010001 = 4369
80 // 0b00010001 = 17
c34b1796 81 let the_b: Box<_> = box ABC::TheB (0, 286331153, 286331153);
1a4d82fc 82
c34b1796 83 let univariant: Box<_> = box Univariant::TheOnlyCase(123234);
1a4d82fc
JJ
84
85 zzz(); // #break
86}
87
88fn zzz() {()}