Skip to content

debuginfo: Support for borrowed pointers & extended test suite for structs, tuples, basic types, borrowed pointers. #7432

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 18 commits into from
Jun 28, 2013
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
fda193d
Extended test cases for struct debug information.
michaelwoerister Jun 19, 2013
7bb189e
Fixed debug information bug regarding struct padding.
michaelwoerister Jun 19, 2013
36aa04b
debuginfo: Added test cases for tuples.
michaelwoerister Jun 20, 2013
5f97a6e
debuginfo: Added test cases for tuples contained in structs.
michaelwoerister Jun 20, 2013
4d8f2fd
debuginfo: Many little formatting improvements.
michaelwoerister Jun 20, 2013
1dc8e76
debuginfo: Made test cases use correct naming convention for variables.
michaelwoerister Jun 20, 2013
0b5fef3
debuginfo: Added test case for local variable scopes.
michaelwoerister Jun 21, 2013
168eba9
debuginfo: Added test case for structs with destructor.
michaelwoerister Jun 21, 2013
46d28c8
debuginfo: Replaced many instances of @ with &.
michaelwoerister Jun 24, 2013
6af7861
debuginfo: Added support for region pointers.
michaelwoerister Jun 24, 2013
751f0fb
debuginfo: Added test case for region pointers pointing to stack valu…
michaelwoerister Jun 24, 2013
fb3e17b
debuginfo: Added test cases for region pointers into heap boxes for b…
michaelwoerister Jun 24, 2013
6a30941
debuginfo: Fixed some instances of gdb wrongly printing u8/i8 values …
michaelwoerister Jun 24, 2013
9102ad0
debuginfo: Added more tests for region pointers (tuples, structs).
michaelwoerister Jun 25, 2013
074e0fa
debuginfo: Added test case for local variables declared with destruct…
michaelwoerister Jun 25, 2013
4fb471a
debuginfo: Added test case for function arguments.
michaelwoerister Jun 25, 2013
42dbae7
debuginfo: Formatting cleanup.
michaelwoerister Jun 26, 2013
2f5e33d
debuginfo: Some corrections after review.
michaelwoerister Jun 27, 2013
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
245 changes: 177 additions & 68 deletions src/librustc/middle/trans/debuginfo.rs

Large diffs are not rendered by default.

8 changes: 4 additions & 4 deletions src/test/debug-info/basic-types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@
// check:$2 = -1
// debugger:print c
// check:$3 = 97
// debugger:print i8
// check:$4 = 68 'D'
// debugger:print/d i8
// check:$4 = 68
// debugger:print i16
// check:$5 = -16
// debugger:print i32
Expand All @@ -36,8 +36,8 @@
// check:$7 = -64
// debugger:print u
// check:$8 = 1
// debugger:print u8
// check:$9 = 100 'd'
// debugger:print/d u8
// check:$9 = 100
// debugger:print u16
// check:$10 = 16
// debugger:print u32
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,19 +8,26 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.

// xfail-win32 Broken because of LLVM bug: http://llvm.org/bugs/show_bug.cgi?id=16249
// xfail-test

// GDB doesn't know about UTF-32 character encoding and will print a rust char as only its numerical
// value.

// compile-flags:-Z extra-debug-info
// debugger:set print pretty off
// debugger:break _zzz
// debugger:break zzz
// debugger:run
// debugger:finish
// debugger:print t
// check:$1 = {4, 5.5, true}

// debugger:print a
// check:$1 = 9898

// debugger:print b
// check:$2 = false

fn main() {
let t = (4, 5.5, true);
_zzz();
let (a, b) : (int, bool) = (9898, false);

zzz();
}

fn _zzz() {()}
fn zzz() {()}
51 changes: 51 additions & 0 deletions src/test/debug-info/function-arguments.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
// 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.

// xfail-test

// GDB doesn't know about UTF-32 character encoding and will print a rust char as only its numerical
// value.

// compile-flags:-Z extra-debug-info
// debugger:break zzz
// debugger:run
// debugger:finish

// debugger:print x
// check:$1 = 111102
// debugger:print y
// check:$2 = true

// debugger:continue
// debugger:finish

// debugger:print a
// check:$3 = 2000
// debugger:print b
// check:$4 = 3000

fn main() {

fun(111102, true);
nested(2000, 3000);

fn nested(a: i32, b: i64) -> (i32, i64) {
zzz()
(a, b)
}
}

fn fun(x: int, y: bool) -> (int, bool) {
zzz();

(x, y)
}

fn zzz() {()}
116 changes: 116 additions & 0 deletions src/test/debug-info/reference-to-basic.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
// 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.

// xfail-win32 Broken because of LLVM bug: http://llvm.org/bugs/show_bug.cgi?id=16249

// Caveats - gdb prints any 8-bit value (meaning rust i8 and u8 values)
// as its numerical value along with its associated ASCII char, there
// doesn't seem to be any way around this. Also, gdb doesn't know
// about UTF-32 character encoding and will print a rust char as only
// its numerical value.

// compile-flags:-Z extra-debug-info
// debugger:break zzz
// debugger:run
// debugger:finish
// debugger:print *bool_ref
// check:$1 = true

// debugger:print *int_ref
// check:$2 = -1

// debugger:print *char_ref
// check:$3 = 97

// debugger:print *i8_ref
// check:$4 = 68 'D'

// debugger:print *i16_ref
// check:$5 = -16

// debugger:print *i32_ref
// check:$6 = -32

// debugger:print *i64_ref
// check:$7 = -64

// debugger:print *uint_ref
// check:$8 = 1

// debugger:print *u8_ref
// check:$9 = 100 'd'

// debugger:print *u16_ref
// check:$10 = 16

// debugger:print *u32_ref
// check:$11 = 32

// debugger:print *u64_ref
// check:$12 = 64

// debugger:print *float_ref
// check:$13 = 1.5

// debugger:print *f32_ref
// check:$14 = 2.5

// debugger:print *f64_ref
// check:$15 = 3.5

fn main() {
let bool_val: bool = true;
let bool_ref : &bool = &bool_val;

let int_val: int = -1;
let int_ref : &int = &int_val;

let char_val: char = 'a';
let char_ref : &char = &char_val;

let i8_val: i8 = 68;
let i8_ref : &i8 = &i8_val;

let i16_val: i16 = -16;
let i16_ref : &i16 = &i16_val;

let i32_val: i32 = -32;
let i32_ref : &i32 = &i32_val;

let uint_val: i64 = -64;
let i64_ref : &i64 = &uint_val;

let uint_val: uint = 1;
let uint_ref : &uint = &uint_val;

let u8_val: u8 = 100;
let u8_ref : &u8 = &u8_val;

let u16_val: u16 = 16;
let u16_ref : &u16 = &u16_val;

let u32_val: u32 = 32;
let u32_ref : &u32 = &u32_val;

let u64_val: u64 = 64;
let u64_ref : &u64 = &u64_val;

let float_val: float = 1.5;
let float_ref : &float = &float_val;

let f32_val: f32 = 2.5;
let f32_ref : &f32 = &f32_val;

let f64_val: f64 = 3.5;
let f64_ref : &f64 = &f64_val;
zzz();
}

fn zzz() {()}
114 changes: 114 additions & 0 deletions src/test/debug-info/reference-to-managed-basic.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
// 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.

// xfail-win32 Broken because of LLVM bug: http://llvm.org/bugs/show_bug.cgi?id=16249

// Gdb doesn't know about UTF-32 character encoding and will print a rust char as only
// its numerical value.

// compile-flags:-Z extra-debug-info
// debugger:break zzz
// debugger:run
// debugger:finish
// debugger:print *bool_ref
// check:$1 = true

// debugger:print *int_ref
// check:$2 = -1

// debugger:print *char_ref
// check:$3 = 97

// debugger:print/d *i8_ref
// check:$4 = 68

// debugger:print *i16_ref
// check:$5 = -16

// debugger:print *i32_ref
// check:$6 = -32

// debugger:print *i64_ref
// check:$7 = -64

// debugger:print *uint_ref
// check:$8 = 1

// debugger:print/d *u8_ref
// check:$9 = 100

// debugger:print *u16_ref
// check:$10 = 16

// debugger:print *u32_ref
// check:$11 = 32

// debugger:print *u64_ref
// check:$12 = 64

// debugger:print *float_ref
// check:$13 = 1.5

// debugger:print *f32_ref
// check:$14 = 2.5

// debugger:print *f64_ref
// check:$15 = 3.5


fn main() {
let bool_box: @bool = @true;
let bool_ref : &bool = bool_box;

let int_box: @int = @-1;
let int_ref : &int = int_box;

let char_box: @char = @'a';
let char_ref : &char = char_box;

let i8_box: @i8 = @68;
let i8_ref : &i8 = i8_box;

let i16_box: @i16 = @-16;
let i16_ref : &i16 = i16_box;

let i32_box: @i32 = @-32;
let i32_ref : &i32 = i32_box;

let i64_box: @i64 = @-64;
let i64_ref : &i64 = i64_box;

let uint_box: @uint = @1;
let uint_ref : &uint = uint_box;

let u8_box: @u8 = @100;
let u8_ref : &u8 = u8_box;

let u16_box: @u16 = @16;
let u16_ref : &u16 = u16_box;

let u32_box: @u32 = @32;
let u32_ref : &u32 = u32_box;

let u64_box: @u64 = @64;
let u64_ref : &u64 = u64_box;

let float_box: @float = @1.5;
let float_ref : &float = float_box;

let f32_box: @f32 = @2.5;
let f32_ref : &f32 = f32_box;

let f64_box: @f64 = @3.5;
let f64_ref : &f64 = f64_box;
zzz();
}

fn zzz() {()}
Loading