Encode codemap and span information in crate metadata.
This allows to create proper debuginfo line information for items inlined from other crates (e.g. instantiations of generics). Only the codemap's 'metadata' is stored in a crate's metadata. That is, just filename, line-beginnings, etc. but not the actual source code itself. We are thus missing the opportunity of making Rust the first "open-source-only" programming language out there. Pity.
This commit is contained in:
parent
fed12499e7
commit
2f8865556b
12 changed files with 693 additions and 172 deletions
26
src/test/auxiliary/cross_crate_spans.rs
Normal file
26
src/test/auxiliary/cross_crate_spans.rs
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
// Copyright 2013-2015 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.
|
||||
|
||||
#![crate_type = "rlib"]
|
||||
#![omit_gdb_pretty_printer_section]
|
||||
|
||||
// no-prefer-dynamic
|
||||
// compile-flags:-g
|
||||
|
||||
pub fn generic_function<T: Clone>(val: T) -> (T, T) {
|
||||
let result = (val.clone(), val.clone());
|
||||
let a_variable: u32 = 123456789;
|
||||
let another_variable: f64 = 123456789.5;
|
||||
zzz();
|
||||
result
|
||||
}
|
||||
|
||||
#[inline(never)]
|
||||
fn zzz() {()}
|
||||
74
src/test/debuginfo/cross-crate-spans.rs
Normal file
74
src/test/debuginfo/cross-crate-spans.rs
Normal file
|
|
@ -0,0 +1,74 @@
|
|||
// Copyright 2013-2015 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.
|
||||
|
||||
#![omit_gdb_pretty_printer_section]
|
||||
|
||||
// ignore-android: FIXME(#10381)
|
||||
// min-lldb-version: 310
|
||||
|
||||
// aux-build:cross_crate_spans.rs
|
||||
extern crate cross_crate_spans;
|
||||
|
||||
// compile-flags:-g
|
||||
|
||||
|
||||
// === GDB TESTS ===================================================================================
|
||||
|
||||
// gdb-command:break cross_crate_spans.rs:21
|
||||
// gdb-command:run
|
||||
|
||||
// gdb-command:print result
|
||||
// gdb-check:$1 = {17, 17}
|
||||
// gdb-command:print a_variable
|
||||
// gdb-check:$2 = 123456789
|
||||
// gdb-command:print another_variable
|
||||
// gdb-check:$3 = 123456789.5
|
||||
// gdb-command:continue
|
||||
|
||||
// gdb-command:print result
|
||||
// gdb-check:$4 = {1212, 1212}
|
||||
// gdb-command:print a_variable
|
||||
// gdb-check:$5 = 123456789
|
||||
// gdb-command:print another_variable
|
||||
// gdb-check:$6 = 123456789.5
|
||||
// gdb-command:continue
|
||||
|
||||
|
||||
|
||||
// === LLDB TESTS ==================================================================================
|
||||
|
||||
// lldb-command:b cross_crate_spans.rs:21
|
||||
// lldb-command:run
|
||||
|
||||
// lldb-command:print result
|
||||
// lldb-check:[...]$0 = (17, 17)
|
||||
// lldb-command:print a_variable
|
||||
// lldb-check:[...]$1 = 123456789
|
||||
// lldb-command:print another_variable
|
||||
// lldb-check:[...]$2 = 123456789.5
|
||||
// lldb-command:continue
|
||||
|
||||
// lldb-command:print result
|
||||
// lldb-check:[...]$3 = (1212, 1212)
|
||||
// lldb-command:print a_variable
|
||||
// lldb-check:[...]$4 = 123456789
|
||||
// lldb-command:print another_variable
|
||||
// lldb-check:[...]$5 = 123456789.5
|
||||
// lldb-command:continue
|
||||
|
||||
|
||||
// This test makes sure that we can break in functions inlined from other crates.
|
||||
|
||||
fn main() {
|
||||
|
||||
let _ = cross_crate_spans::generic_function(17u32);
|
||||
let _ = cross_crate_spans::generic_function(1212i16);
|
||||
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue