debuginfo: Adapted DI generation to new memory layout of unique vecs.
This commit is contained in:
parent
b2aeb4b04b
commit
e9baeab695
@ -581,7 +581,8 @@ fn tuple_metadata(cx: &mut CrateContext,
|
||||
fn enum_metadata(cx: &mut CrateContext,
|
||||
enum_type: ty::t,
|
||||
enum_def_id: ast::def_id,
|
||||
substs: &ty::substs,
|
||||
// _substs is only needed in the other version. Will go away with new snapshot.
|
||||
_substs: &ty::substs,
|
||||
span: span)
|
||||
-> DIType {
|
||||
|
||||
@ -1017,10 +1018,10 @@ fn fixed_vec_metadata(cx: &mut CrateContext,
|
||||
};
|
||||
}
|
||||
|
||||
fn boxed_vec_metadata(cx: &mut CrateContext,
|
||||
element_type: ty::t,
|
||||
span: span)
|
||||
-> DICompositeType {
|
||||
fn vec_metadata(cx: &mut CrateContext,
|
||||
element_type: ty::t,
|
||||
span: span)
|
||||
-> DICompositeType {
|
||||
|
||||
let element_type_metadata = type_metadata(cx, element_type, span);
|
||||
let element_llvm_type = type_of::type_of(cx, element_type);
|
||||
@ -1045,7 +1046,7 @@ fn boxed_vec_metadata(cx: &mut CrateContext,
|
||||
// fill alloc elements
|
||||
let member_type_metadata = &[int_type_metadata, int_type_metadata, array_type_metadata];
|
||||
|
||||
let vec_metadata = composite_type_metadata(
|
||||
return composite_type_metadata(
|
||||
cx,
|
||||
vec_llvm_type,
|
||||
vec_type_name,
|
||||
@ -1053,6 +1054,17 @@ fn boxed_vec_metadata(cx: &mut CrateContext,
|
||||
member_names,
|
||||
member_type_metadata,
|
||||
span);
|
||||
}
|
||||
|
||||
fn boxed_vec_metadata(cx: &mut CrateContext,
|
||||
element_type: ty::t,
|
||||
span: span)
|
||||
-> DICompositeType {
|
||||
|
||||
let element_llvm_type = type_of::type_of(cx, element_type);
|
||||
let vec_llvm_type = Type::vec(cx.sess.targ_cfg.arch, &element_llvm_type);
|
||||
let vec_type_name: &str = fmt!("[%s]", ty_to_str(cx.tcx, element_type));
|
||||
let vec_metadata = vec_metadata(cx, element_type, span);
|
||||
|
||||
return boxed_type_metadata(
|
||||
cx,
|
||||
@ -1197,10 +1209,13 @@ fn type_metadata(cx: &mut CrateContext,
|
||||
ty::vstore_fixed(len) => {
|
||||
fixed_vec_metadata(cx, i8_t, len + 1, span)
|
||||
},
|
||||
ty::vstore_uniq |
|
||||
ty::vstore_uniq => {
|
||||
let vec_metadata = vec_metadata(cx, i8_t, span);
|
||||
pointer_type_metadata(cx, t, vec_metadata)
|
||||
}
|
||||
ty::vstore_box => {
|
||||
let box_metadata = boxed_vec_metadata(cx, i8_t, span);
|
||||
pointer_type_metadata(cx, t, box_metadata)
|
||||
let boxed_vec_metadata = boxed_vec_metadata(cx, i8_t, span);
|
||||
pointer_type_metadata(cx, t, boxed_vec_metadata)
|
||||
}
|
||||
ty::vstore_slice(_region) => {
|
||||
vec_slice_metadata(cx, t, i8_t, span)
|
||||
@ -1217,12 +1232,19 @@ fn type_metadata(cx: &mut CrateContext,
|
||||
match *vstore {
|
||||
ty::vstore_fixed(len) => {
|
||||
fixed_vec_metadata(cx, mt.ty, len, span)
|
||||
},
|
||||
ty::vstore_uniq |
|
||||
ty::vstore_box => {
|
||||
let box_metadata = boxed_vec_metadata(cx, mt.ty, span);
|
||||
pointer_type_metadata(cx, t, box_metadata)
|
||||
},
|
||||
}
|
||||
ty::vstore_uniq if ty::type_contents(cx.tcx, mt.ty).contains_managed() => {
|
||||
let boxed_vec_metadata = boxed_vec_metadata(cx, mt.ty, span);
|
||||
pointer_type_metadata(cx, t, boxed_vec_metadata)
|
||||
}
|
||||
ty::vstore_uniq => {
|
||||
let vec_metadata = vec_metadata(cx, mt.ty, span);
|
||||
pointer_type_metadata(cx, t, vec_metadata)
|
||||
}
|
||||
ty::vstore_box => {
|
||||
let boxed_vec_metadata = boxed_vec_metadata(cx, mt.ty, span);
|
||||
pointer_type_metadata(cx, t, boxed_vec_metadata)
|
||||
}
|
||||
ty::vstore_slice(_) => {
|
||||
vec_slice_metadata(cx, t, mt.ty, span)
|
||||
}
|
||||
|
@ -20,9 +20,9 @@
|
||||
// debugger:print *((uint64_t[3]*)(managed->val.elements))
|
||||
// check:$2 = {7, 8, 9}
|
||||
|
||||
// debugger:print unique->val.fill
|
||||
// debugger:print unique->fill
|
||||
// check:$3 = 32
|
||||
// debugger:print *((uint64_t[4]*)(unique->val.elements))
|
||||
// debugger:print *((uint64_t[4]*)(unique->elements))
|
||||
// check:$4 = {10, 11, 12, 13}
|
||||
|
||||
fn main() {
|
||||
|
37
src/test/debug-info/managed-pointer-within-unique-vec.rs
Normal file
37
src/test/debug-info/managed-pointer-within-unique-vec.rs
Normal file
@ -0,0 +1,37 @@
|
||||
// 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
|
||||
|
||||
// compile-flags:-Z extra-debug-info
|
||||
// debugger:break zzz
|
||||
// debugger:run
|
||||
// debugger:finish
|
||||
|
||||
// debugger:print unique->val.elements[0]->val
|
||||
// check:$1 = 10
|
||||
|
||||
// debugger:print unique->val.elements[1]->val
|
||||
// check:$2 = 11
|
||||
|
||||
// debugger:print unique->val.elements[2]->val
|
||||
// check:$3 = 12
|
||||
|
||||
// debugger:print unique->val.elements[3]->val
|
||||
// check:$4 = 13
|
||||
|
||||
fn main() {
|
||||
|
||||
let unique: ~[@i64] = ~[@10, @11, @12, @13];
|
||||
|
||||
zzz();
|
||||
}
|
||||
|
||||
fn zzz() {()}
|
Loading…
x
Reference in New Issue
Block a user