forked from rust-lang/rust
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
debuginfo: Fix type description generic enum discriminants.
- Loading branch information
1 parent
e4e9319
commit f9a20bb
Showing
3 changed files
with
98 additions
and
9 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
91 changes: 91 additions & 0 deletions
91
src/test/debuginfo/generic-enum-with-different-disr-sizes.rs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,91 @@ | ||
// Copyright 2013-2014 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. | ||
|
||
// ignore-tidy-linelength | ||
// min-lldb-version: 310 | ||
|
||
// compile-flags:-g | ||
|
||
// === GDB TESTS =================================================================================== | ||
// gdb-command:run | ||
|
||
// gdb-command:print eight_bytes1 | ||
// gdb-check:$1 = {{RUST$ENUM$DISR = Variant1, __0 = 100}, {RUST$ENUM$DISR = Variant1, __0 = 100}} | ||
// gdb-command:print four_bytes1 | ||
// gdb-check:$2 = {{RUST$ENUM$DISR = Variant1, __0 = 101}, {RUST$ENUM$DISR = Variant1, __0 = 101}} | ||
// gdb-command:print two_bytes1 | ||
// gdb-check:$3 = {{RUST$ENUM$DISR = Variant1, __0 = 102}, {RUST$ENUM$DISR = Variant1, __0 = 102}} | ||
// gdb-command:print one_byte1 | ||
// gdb-check:$4 = {{RUST$ENUM$DISR = Variant1, __0 = 65 'A'}, {RUST$ENUM$DISR = Variant1, __0 = 65 'A'}} | ||
|
||
// gdb-command:print eight_bytes2 | ||
// gdb-check:$5 = {{RUST$ENUM$DISR = Variant2, __0 = 100}, {RUST$ENUM$DISR = Variant2, __0 = 100}} | ||
// gdb-command:print four_bytes2 | ||
// gdb-check:$6 = {{RUST$ENUM$DISR = Variant2, __0 = 101}, {RUST$ENUM$DISR = Variant2, __0 = 101}} | ||
// gdb-command:print two_bytes2 | ||
// gdb-check:$7 = {{RUST$ENUM$DISR = Variant2, __0 = 102}, {RUST$ENUM$DISR = Variant2, __0 = 102}} | ||
// gdb-command:print one_byte2 | ||
// gdb-check:$8 = {{RUST$ENUM$DISR = Variant2, __0 = 65 'A'}, {RUST$ENUM$DISR = Variant2, __0 = 65 'A'}} | ||
|
||
// gdb-command:continue | ||
|
||
// === LLDB TESTS ================================================================================== | ||
// lldb-command:run | ||
|
||
// lldb-command:print eight_bytes1 | ||
// lldb-check:[...]$0 = Variant1(100) | ||
// lldb-command:print four_bytes1 | ||
// lldb-check:[...]$1 = Variant1(101) | ||
// lldb-command:print two_bytes1 | ||
// lldb-check:[...]$2 = Variant1(102) | ||
// lldb-command:print one_byte1 | ||
// lldb-check:[...]$3 = Variant1('A') | ||
|
||
// lldb-command:print eight_bytes2 | ||
// lldb-check:[...]$4 = Variant2(100) | ||
// lldb-command:print four_bytes2 | ||
// lldb-check:[...]$5 = Variant2(101) | ||
// lldb-command:print two_bytes2 | ||
// lldb-check:[...]$6 = Variant2(102) | ||
// lldb-command:print one_byte2 | ||
// lldb-check:[...]$7 = Variant2('A') | ||
|
||
// lldb-command:continue | ||
|
||
#![allow(unused_variables)] | ||
#![allow(dead_code)] | ||
#![omit_gdb_pretty_printer_section] | ||
|
||
// This test case makes sure that we get correct type descriptions for the enum | ||
// discriminant of different instantiations of the same generic enum type where, | ||
// dependending on the generic type parameter(s), the discriminant has a | ||
// different size in memory. | ||
|
||
enum Enum<T> { | ||
Variant1(T), | ||
Variant2(T) | ||
} | ||
|
||
fn main() { | ||
// These are ordered for descending size on purpose | ||
let eight_bytes1 = Enum::Variant1(100.0f64); | ||
let four_bytes1 = Enum::Variant1(101i32); | ||
let two_bytes1 = Enum::Variant1(102i16); | ||
let one_byte1 = Enum::Variant1(65u8); | ||
|
||
let eight_bytes2 = Enum::Variant2(100.0f64); | ||
let four_bytes2 = Enum::Variant2(101i32); | ||
let two_bytes2 = Enum::Variant2(102i16); | ||
let one_byte2 = Enum::Variant2(65u8); | ||
|
||
zzz(); // #break | ||
} | ||
|
||
fn zzz() { () } |