Skip to content

Commit 109e586

Browse files
committed
---
yaml --- r: 6813 b: refs/heads/master c: 0b30352 h: refs/heads/master i: 6811: 4219192 v: v3
1 parent 178a679 commit 109e586

File tree

4 files changed

+37
-23
lines changed

4 files changed

+37
-23
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
---
2-
refs/heads/master: e95c56f8554bd4c13876e999d3372408ffd732e7
2+
refs/heads/master: 0b303523bdb34c946326b72420f19f670cf884d6

trunk/src/comp/middle/debuginfo.rs

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,7 @@ fn get_ty_metadata(cx: @crate_ctxt, t: ty::t, ty: @ast::ty) -> @metadata<tydesc_
221221
option::some(md) { ret md; }
222222
option::none. {}
223223
}
224-
let (name, size, flags) = alt ty.node {
224+
let (name, size, encoding) = alt ty.node {
225225
ast::ty_bool. { ("bool", 1, DW_ATE_boolean) }
226226
ast::ty_int. { ("int", 32, DW_ATE_signed) } //XXX machine-dependent?
227227
ast::ty_uint. { ("uint", 32, DW_ATE_unsigned) } //XXX machine-dependent?
@@ -240,15 +240,19 @@ fn get_ty_metadata(cx: @crate_ctxt, t: ty::t, ty: @ast::ty) -> @metadata<tydesc_
240240
} }
241241
ast::ty_char. { ("char", 32, DW_ATE_unsigned) }
242242
};
243+
let fname = filename_from_span(cx, ty.span);
244+
let file_node = get_file_metadata(cx, fname);
245+
let cu_node = get_compile_unit_metadata(cx, fname);
243246
let lldata = [lltag(BasicTypeDescriptorTag),
244-
llunused(), //XXX scope context
247+
cu_node.node,
245248
llstr(name),
246-
llnull(), //XXX basic types only
249+
file_node.node,
247250
lli32(0), //XXX basic types only
248251
lli64(size),
249252
lli64(32), //XXX alignment?
250253
lli64(0), //XXX offset?
251-
lli32(flags)];
254+
lli32(0), //XXX flags?
255+
lli32(encoding)];
252256
let llnode = llmdnode(lldata);
253257
let mdval = @{node: llnode, data: {hash: ty::hash_ty(t)}};
254258
update_cache(cache, BasicTypeDescriptorTag, tydesc_metadata(mdval));
@@ -266,6 +270,10 @@ fn function_metadata_from_block(bcx: @block_ctxt) -> @metadata<subprogram_md> {
266270
get_function_metadata(cx, fn_item, fcx.llfn)
267271
}
268272

273+
fn filename_from_span(cx: @crate_ctxt, sp: codemap::span) -> str {
274+
codemap::lookup_char_pos(cx.sess.get_codemap(), sp.lo).filename
275+
}
276+
269277
fn get_local_var_metadata(bcx: @block_ctxt, local: @ast::local)
270278
-> @metadata<local_var_md> unsafe {
271279
let cx = bcx_ccx(bcx);
@@ -293,8 +301,7 @@ fn get_local_var_metadata(bcx: @block_ctxt, local: @ast::local)
293301
filemd.node,
294302
lli32(loc.line as int), // line
295303
tymd.node,
296-
lli32(0), //XXX flags
297-
llnull() // inline loc reference
304+
lli32(0) //XXX flags
298305
];
299306
let mdnode = llmdnode(lldata);
300307
let mdval = @{node: mdnode, data: {id: local.node.id}};
@@ -310,9 +317,6 @@ fn get_local_var_metadata(bcx: @block_ctxt, local: @ast::local)
310317
let declargs = [llmdnode([llptr]), mdnode];
311318
trans_build::Call(bcx, cx.intrinsics.get("llvm.dbg.declare"),
312319
declargs);
313-
llvm::LLVMAddNamedMetadataOperand(cx.llmod, as_buf("llvm.dbg.vars"),
314-
str::byte_len("llvm.dbg.vars"),
315-
mdnode);
316320
ret mdval;
317321
}
318322

trunk/src/comp/middle/trans.rs

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import front::attr;
2323
import middle::{ty, gc, resolve, debuginfo};
2424
import middle::freevars::*;
2525
import back::{link, abi, upcall};
26-
import syntax::{ast, ast_util};
26+
import syntax::{ast, ast_util, codemap};
2727
import syntax::visit;
2828
import syntax::codemap::span;
2929
import syntax::print::pprust::{expr_to_str, stmt_to_str};
@@ -4038,10 +4038,22 @@ fn trans_stmt(cx: @block_ctxt, s: ast::stmt) -> @block_ctxt {
40384038
_ { bcx_ccx(cx).sess.unimpl("stmt variant"); }
40394039
}
40404040

4041-
//debuginfo::reset_source_pos(cx);
40424041
ret bcx;
40434042
}
40444043

4044+
fn source_pos_from_block_parent(parent: block_parent)
4045+
-> (bool, [codemap::loc]) {
4046+
alt parent {
4047+
parent_none. { (false, []) }
4048+
parent_some(bcx) { (bcx.source_pos.usable,
4049+
alt vec::last(bcx.source_pos.pos) {
4050+
option::some(p) { [p] }
4051+
option::none. { [] }
4052+
})
4053+
}
4054+
}
4055+
}
4056+
40454057
// You probably don't want to use this one. See the
40464058
// next three functions instead.
40474059
fn new_block_ctxt(cx: @fn_ctxt, parent: block_parent, kind: block_kind,
@@ -4053,6 +4065,7 @@ fn new_block_ctxt(cx: @fn_ctxt, parent: block_parent, kind: block_kind,
40534065
}
40544066
let llbb: BasicBlockRef =
40554067
str::as_buf(s, {|buf| llvm::LLVMAppendBasicBlock(cx.llfn, buf) });
4068+
let (usable, pos) = source_pos_from_block_parent(parent);
40564069
let bcx = @{llbb: llbb,
40574070
mutable terminated: false,
40584071
mutable unreachable: false,
@@ -4063,8 +4076,7 @@ fn new_block_ctxt(cx: @fn_ctxt, parent: block_parent, kind: block_kind,
40634076
mutable lpad: option::none,
40644077
sp: cx.sp,
40654078
fcx: cx,
4066-
source_pos: {mutable usable: false,
4067-
mutable pos: []}};
4079+
source_pos: {mutable usable: usable, mutable pos: pos}};
40684080
alt parent {
40694081
parent_some(cx) {
40704082
if cx.unreachable { Unreachable(bcx); }
@@ -4099,6 +4111,7 @@ fn new_sub_block_ctxt(bcx: @block_ctxt, n: str) -> @block_ctxt {
40994111
}
41004112

41014113
fn new_raw_block_ctxt(fcx: @fn_ctxt, llbb: BasicBlockRef) -> @block_ctxt {
4114+
let (usable, pos) = source_pos_from_block_parent(parent_none);
41024115
ret @{llbb: llbb,
41034116
mutable terminated: false,
41044117
mutable unreachable: false,
@@ -4109,8 +4122,7 @@ fn new_raw_block_ctxt(fcx: @fn_ctxt, llbb: BasicBlockRef) -> @block_ctxt {
41094122
mutable lpad: option::none,
41104123
sp: fcx.sp,
41114124
fcx: fcx,
4112-
source_pos: {mutable usable: false,
4113-
mutable pos: []}};
4125+
source_pos: {mutable usable: usable, mutable pos: pos}};
41144126
}
41154127

41164128

@@ -4168,6 +4180,7 @@ fn block_locals(b: ast::blk, it: block(@ast::local)) {
41684180
}
41694181

41704182
fn llstaticallocas_block_ctxt(fcx: @fn_ctxt) -> @block_ctxt {
4183+
let (usable, pos) = source_pos_from_block_parent(parent_none);
41714184
ret @{llbb: fcx.llstaticallocas,
41724185
mutable terminated: false,
41734186
mutable unreachable: false,
@@ -4178,11 +4191,11 @@ fn llstaticallocas_block_ctxt(fcx: @fn_ctxt) -> @block_ctxt {
41784191
mutable lpad: option::none,
41794192
sp: fcx.sp,
41804193
fcx: fcx,
4181-
source_pos: {mutable usable: false,
4182-
mutable pos: []}};
4194+
source_pos: {mutable usable: usable, mutable pos: pos}};
41834195
}
41844196

41854197
fn llderivedtydescs_block_ctxt(fcx: @fn_ctxt) -> @block_ctxt {
4198+
let (usable, pos) = source_pos_from_block_parent(parent_none);
41864199
ret @{llbb: fcx.llderivedtydescs,
41874200
mutable terminated: false,
41884201
mutable unreachable: false,
@@ -4193,8 +4206,7 @@ fn llderivedtydescs_block_ctxt(fcx: @fn_ctxt) -> @block_ctxt {
41934206
mutable lpad: option::none,
41944207
sp: fcx.sp,
41954208
fcx: fcx,
4196-
source_pos: {mutable usable: false,
4197-
mutable pos: []}};
4209+
source_pos: {mutable usable: usable, mutable pos: pos}};
41984210
}
41994211

42004212

@@ -4271,14 +4283,12 @@ fn trans_block_dps(bcx: @block_ctxt, b: ast::blk, dest: dest)
42714283
for s: @ast::stmt in b.node.stmts {
42724284
let _s = debuginfo::update_source_pos(bcx, b.span);
42734285
bcx = trans_stmt(bcx, *s);
4274-
//debuginfo::reset_source_pos(bcx);
42754286
}
42764287
alt b.node.expr {
42774288
some(e) {
42784289
let bt = ty::type_is_bot(bcx_tcx(bcx), ty::expr_ty(bcx_tcx(bcx), e));
42794290
let _s = debuginfo::update_source_pos(bcx, e.span);
42804291
bcx = trans_expr(bcx, e, bt ? ignore : dest);
4281-
//debuginfo::reset_source_pos(bcx);
42824292
}
42834293
_ { assert dest == ignore || bcx.unreachable; }
42844294
}

trunk/src/comp/middle/trans_build.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -670,7 +670,7 @@ fn Call(cx: @block_ctxt, Fn: ValueRef, Args: [ValueRef]) -> ValueRef {
670670
unsafe {
671671
let instr = llvm::LLVMBuildCall(B(cx), Fn, vec::to_ptr(Args),
672672
vec::len(Args), noname());
673-
//debuginfo::add_line_info(cx, instr);
673+
debuginfo::add_line_info(cx, instr);
674674
ret instr;
675675
}
676676
}

0 commit comments

Comments
 (0)