debuginfo: Support for tuple-style enums (WIP)

This commit is contained in:
Michael Woerister 2013-07-02 18:10:24 +02:00
parent 739f3eece9
commit f389bd8f2a
6 changed files with 268 additions and 97 deletions

View file

@ -31,19 +31,25 @@
// debugger:print manual_one_million
// check:$6 = OneMillion
// debugger:print single_variant
// check:$7 = TheOnlyVariant
enum AutoDiscriminator {
enum AutoDiscriminant {
One,
Two,
Three
}
enum ManualDiscriminator {
enum ManualDiscriminant {
OneHundred = 100,
OneThousand = 1000,
OneMillion = 1000000
}
enum SingleVariant {
TheOnlyVariant
}
fn main() {
let auto_one = One;
@ -54,6 +60,8 @@ fn main() {
let manual_one_thousand = OneThousand;
let manual_one_million = OneMillion;
let single_variant = TheOnlyVariant;
zzz();
}

View file

@ -0,0 +1,38 @@
// Copyright 2013 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.
// compile-flags:-Z extra-debug-info
// debugger:break zzz
// debugger:run
// debugger:finish
// debugger:print first
// check:$1 = {<No data fields>}
// debugger:print second
// check:$2 = {<No data fields>}
enum ANilEnum {}
enum AnotherNilEnum {}
// I (mw) am not sure this test case makes much sense...
// Also, it relies on some implementation details:
// 1. That empty enums as well as '()' are represented as empty structs
// 2. That gdb prints the string "{<No data fields>}" for empty structs (which may change some time)
fn main() {
unsafe {
let first : ANilEnum = std::cast::transmute(());
let second : AnotherNilEnum = std::cast::transmute(());
zzz();
}
}
fn zzz() {()}

View file

@ -0,0 +1,33 @@
// Copyright 2013 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.
// compile-flags:-Z extra-debug-info
// debugger:set print union on
// debugger:break zzz
// debugger:run
// debugger:finish
// debugger:print case2
// check:$1 = {Case1, 0, 1}
enum Test {
Case1(i32, i64),
Case2(bool, i16, i32)
}
fn main() {
let case1 = Case1(110, 220);
let case2 = Case2(false, 2, 3);
zzz();
}
fn zzz() {()}