Skip to content

Commit f4df69a

Browse files
committed
rollup merge of #20642: michaelwoerister/sane-source-locations-pt1
Conflicts: src/librustc_trans/trans/debuginfo.rs
2 parents 4ffde08 + a55ef3a commit f4df69a

File tree

14 files changed

+889
-405
lines changed

14 files changed

+889
-405
lines changed

src/librustc_trans/trans/_match.rs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -208,10 +208,10 @@ use trans::cleanup::{self, CleanupMethods};
208208
use trans::common::*;
209209
use trans::consts;
210210
use trans::datum::*;
211+
use trans::debuginfo::{self, DebugLoc, ToDebugLoc};
211212
use trans::expr::{self, Dest};
212213
use trans::tvec;
213214
use trans::type_of;
214-
use trans::debuginfo;
215215
use middle::ty::{self, Ty};
216216
use session::config::FullDebugInfo;
217217
use util::common::indenter;
@@ -632,7 +632,7 @@ fn bind_subslice_pat(bcx: Block,
632632

633633
let slice_begin = InBoundsGEP(bcx, base, &[C_uint(bcx.ccx(), offset_left)]);
634634
let slice_len_offset = C_uint(bcx.ccx(), offset_left + offset_right);
635-
let slice_len = Sub(bcx, len, slice_len_offset);
635+
let slice_len = Sub(bcx, len, slice_len_offset, DebugLoc::None);
636636
let slice_ty = ty::mk_slice(bcx.tcx(),
637637
bcx.tcx().mk_region(ty::ReStatic),
638638
ty::mt {ty: vt.unit_ty, mutbl: ast::MutImmutable});
@@ -656,7 +656,7 @@ fn extract_vec_elems<'blk, 'tcx>(bcx: Block<'blk, 'tcx>,
656656
elems.extend(range(0, before).map(|i| GEPi(bcx, base, &[i])));
657657
elems.extend(range(0, after).rev().map(|i| {
658658
InBoundsGEP(bcx, base, &[
659-
Sub(bcx, len, C_uint(bcx.ccx(), i + 1))
659+
Sub(bcx, len, C_uint(bcx.ccx(), i + 1), DebugLoc::None)
660660
])
661661
}));
662662
ExtractedBlock { vals: elems, bcx: bcx }
@@ -731,7 +731,7 @@ impl FailureHandler {
731731
Infallible =>
732732
panic!("attempted to panic in a non-panicking panic handler!"),
733733
JumpToBasicBlock(basic_block) =>
734-
Br(bcx, basic_block),
734+
Br(bcx, basic_block, DebugLoc::None),
735735
Unreachable =>
736736
build::Unreachable(bcx)
737737
}
@@ -889,7 +889,7 @@ fn compile_guard<'a, 'p, 'blk, 'tcx>(bcx: Block<'blk, 'tcx>,
889889
}
890890
}
891891

892-
with_cond(bcx, Not(bcx, val), |bcx| {
892+
with_cond(bcx, Not(bcx, val, guard_expr.debug_loc()), |bcx| {
893893
// Guard does not match: remove all bindings from the lllocals table
894894
for (_, &binding_info) in data.bindings_map.iter() {
895895
call_lifetime_end(bcx, binding_info.llmatch);
@@ -966,7 +966,7 @@ fn compile_submatch<'a, 'p, 'blk, 'tcx>(bcx: Block<'blk, 'tcx>,
966966
}
967967
_ => ()
968968
}
969-
Br(bcx, data.bodycx.llbb);
969+
Br(bcx, data.bodycx.llbb, DebugLoc::None);
970970
}
971971
}
972972
}
@@ -1096,7 +1096,7 @@ fn compile_submatch_continue<'a, 'p, 'blk, 'tcx>(mut bcx: Block<'blk, 'tcx>,
10961096
if !exhaustive || i + 1 < len {
10971097
opt_cx = bcx.fcx.new_temp_block("match_case");
10981098
match kind {
1099-
Single => Br(bcx, opt_cx.llbb),
1099+
Single => Br(bcx, opt_cx.llbb, DebugLoc::None),
11001100
Switch => {
11011101
match opt.trans(bcx) {
11021102
SingleResult(r) => {
@@ -1131,7 +1131,7 @@ fn compile_submatch_continue<'a, 'p, 'blk, 'tcx>(mut bcx: Block<'blk, 'tcx>,
11311131
compare_scalar_types(
11321132
bcx, test_val, vend,
11331133
t, ast::BiLe);
1134-
Result::new(bcx, And(bcx, llge, llle))
1134+
Result::new(bcx, And(bcx, llge, llle, DebugLoc::None))
11351135
}
11361136
LowerBound(Result { bcx, val }) => {
11371137
compare_scalar_types(bcx, test_val, val, t, ast::BiGe)
@@ -1149,12 +1149,12 @@ fn compile_submatch_continue<'a, 'p, 'blk, 'tcx>(mut bcx: Block<'blk, 'tcx>,
11491149
if i + 1 < len && (guarded || multi_pats || kind == CompareSliceLength) {
11501150
branch_chk = Some(JumpToBasicBlock(bcx.llbb));
11511151
}
1152-
CondBr(after_cx, matches, opt_cx.llbb, bcx.llbb);
1152+
CondBr(after_cx, matches, opt_cx.llbb, bcx.llbb, DebugLoc::None);
11531153
}
11541154
_ => ()
11551155
}
11561156
} else if kind == Compare || kind == CompareSliceLength {
1157-
Br(bcx, else_cx.llbb);
1157+
Br(bcx, else_cx.llbb, DebugLoc::None);
11581158
}
11591159

11601160
let mut size = 0u;
@@ -1194,7 +1194,7 @@ fn compile_submatch_continue<'a, 'p, 'blk, 'tcx>(mut bcx: Block<'blk, 'tcx>,
11941194
// Compile the fall-through case, if any
11951195
if !exhaustive && kind != Single {
11961196
if kind == Compare || kind == CompareSliceLength {
1197-
Br(bcx, else_cx.llbb);
1197+
Br(bcx, else_cx.llbb, DebugLoc::None);
11981198
}
11991199
match chk {
12001200
// If there is only one default arm left, move on to the next

src/librustc_trans/trans/adt.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ use trans::cleanup;
6262
use trans::cleanup::CleanupMethods;
6363
use trans::common::*;
6464
use trans::datum;
65+
use trans::debuginfo::DebugLoc;
6566
use trans::machine;
6667
use trans::monomorphize;
6768
use trans::type_::Type;
@@ -979,7 +980,7 @@ pub fn fold_variants<'blk, 'tcx, F>(bcx: Block<'blk, 'tcx>,
979980
let variant_value = PointerCast(variant_cx, value, real_ty.ptr_to());
980981

981982
variant_cx = f(variant_cx, case, variant_value);
982-
Br(variant_cx, bcx_next.llbb);
983+
Br(variant_cx, bcx_next.llbb, DebugLoc::None);
983984
}
984985

985986
bcx_next

src/librustc_trans/trans/base.rs

Lines changed: 38 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ use trans::closure;
5757
use trans::common::{Block, C_bool, C_bytes_in_context, C_i32, C_integral};
5858
use trans::common::{C_null, C_struct_in_context, C_u64, C_u8, C_undef};
5959
use trans::common::{CrateContext, ExternMap, FunctionContext};
60-
use trans::common::{NodeInfo, Result};
60+
use trans::common::{Result};
6161
use trans::common::{node_id_type, return_type_is_void};
6262
use trans::common::{tydesc_info, type_is_immediate};
6363
use trans::common::{type_is_zero_size, val_ty};
@@ -66,7 +66,7 @@ use trans::consts;
6666
use trans::context::SharedCrateContext;
6767
use trans::controlflow;
6868
use trans::datum;
69-
use trans::debuginfo;
69+
use trans::debuginfo::{self, DebugLoc};
7070
use trans::expr;
7171
use trans::foreign;
7272
use trans::glue;
@@ -780,7 +780,7 @@ pub fn iter_structural_ty<'blk, 'tcx, F>(cx: Block<'blk, 'tcx>,
780780
&**variant,
781781
substs,
782782
&mut f);
783-
Br(variant_cx, next_cx.llbb);
783+
Br(variant_cx, next_cx.llbb, DebugLoc::None);
784784
}
785785
cx = next_cx;
786786
}
@@ -945,7 +945,7 @@ pub fn invoke<'blk, 'tcx>(bcx: Block<'blk, 'tcx>,
945945
llfn: ValueRef,
946946
llargs: &[ValueRef],
947947
fn_ty: Ty<'tcx>,
948-
call_info: Option<NodeInfo>)
948+
debug_loc: DebugLoc)
949949
-> (ValueRef, Block<'blk, 'tcx>) {
950950
let _icx = push_ctxt("invoke_");
951951
if bcx.unreachable.get() {
@@ -971,30 +971,25 @@ pub fn invoke<'blk, 'tcx>(bcx: Block<'blk, 'tcx>,
971971
let normal_bcx = bcx.fcx.new_temp_block("normal-return");
972972
let landing_pad = bcx.fcx.get_landing_pad();
973973

974-
match call_info {
975-
Some(info) => debuginfo::set_source_location(bcx.fcx, info.id, info.span),
976-
None => debuginfo::clear_source_location(bcx.fcx)
977-
};
978-
979974
let llresult = Invoke(bcx,
980975
llfn,
981976
&llargs[],
982977
normal_bcx.llbb,
983978
landing_pad,
984-
Some(attributes));
979+
Some(attributes),
980+
debug_loc);
985981
return (llresult, normal_bcx);
986982
} else {
987983
debug!("calling {} at {:?}", bcx.val_to_string(llfn), bcx.llbb);
988984
for &llarg in llargs.iter() {
989985
debug!("arg: {}", bcx.val_to_string(llarg));
990986
}
991987

992-
match call_info {
993-
Some(info) => debuginfo::set_source_location(bcx.fcx, info.id, info.span),
994-
None => debuginfo::clear_source_location(bcx.fcx)
995-
};
996-
997-
let llresult = Call(bcx, llfn, &llargs[], Some(attributes));
988+
let llresult = Call(bcx,
989+
llfn,
990+
&llargs[],
991+
Some(attributes),
992+
debug_loc);
998993
return (llresult, bcx);
999994
}
1000995
}
@@ -1082,10 +1077,10 @@ pub fn with_cond<'blk, 'tcx, F>(bcx: Block<'blk, 'tcx>,
10821077
let fcx = bcx.fcx;
10831078
let next_cx = fcx.new_temp_block("next");
10841079
let cond_cx = fcx.new_temp_block("cond");
1085-
CondBr(bcx, val, cond_cx.llbb, next_cx.llbb);
1080+
CondBr(bcx, val, cond_cx.llbb, next_cx.llbb, DebugLoc::None);
10861081
let after_cx = f(cond_cx);
10871082
if !after_cx.terminated.get() {
1088-
Br(after_cx, next_cx.llbb);
1083+
Br(after_cx, next_cx.llbb, DebugLoc::None);
10891084
}
10901085
next_cx
10911086
}
@@ -1101,7 +1096,7 @@ pub fn call_lifetime_start(cx: Block, ptr: ValueRef) {
11011096
let llsize = C_u64(ccx, machine::llsize_of_alloc(ccx, val_ty(ptr).element_type()));
11021097
let ptr = PointerCast(cx, ptr, Type::i8p(ccx));
11031098
let lifetime_start = ccx.get_intrinsic(&"llvm.lifetime.start");
1104-
Call(cx, lifetime_start, &[llsize, ptr], None);
1099+
Call(cx, lifetime_start, &[llsize, ptr], None, DebugLoc::None);
11051100
}
11061101

11071102
pub fn call_lifetime_end(cx: Block, ptr: ValueRef) {
@@ -1115,7 +1110,7 @@ pub fn call_lifetime_end(cx: Block, ptr: ValueRef) {
11151110
let llsize = C_u64(ccx, machine::llsize_of_alloc(ccx, val_ty(ptr).element_type()));
11161111
let ptr = PointerCast(cx, ptr, Type::i8p(ccx));
11171112
let lifetime_end = ccx.get_intrinsic(&"llvm.lifetime.end");
1118-
Call(cx, lifetime_end, &[llsize, ptr], None);
1113+
Call(cx, lifetime_end, &[llsize, ptr], None, DebugLoc::None);
11191114
}
11201115

11211116
pub fn call_memcpy(cx: Block, dst: ValueRef, src: ValueRef, n_bytes: ValueRef, align: u32) {
@@ -1132,7 +1127,7 @@ pub fn call_memcpy(cx: Block, dst: ValueRef, src: ValueRef, n_bytes: ValueRef, a
11321127
let size = IntCast(cx, n_bytes, ccx.int_type());
11331128
let align = C_i32(ccx, align as i32);
11341129
let volatile = C_bool(ccx, false);
1135-
Call(cx, memcpy, &[dst_ptr, src_ptr, size, align, volatile], None);
1130+
Call(cx, memcpy, &[dst_ptr, src_ptr, size, align, volatile], None, DebugLoc::None);
11361131
}
11371132

11381133
pub fn memcpy_ty<'blk, 'tcx>(bcx: Block<'blk, 'tcx>,
@@ -1685,13 +1680,14 @@ fn copy_unboxed_closure_args_to_allocas<'blk, 'tcx>(
16851680
// and builds the return block.
16861681
pub fn finish_fn<'blk, 'tcx>(fcx: &'blk FunctionContext<'blk, 'tcx>,
16871682
last_bcx: Block<'blk, 'tcx>,
1688-
retty: ty::FnOutput<'tcx>) {
1683+
retty: ty::FnOutput<'tcx>,
1684+
ret_debug_loc: DebugLoc) {
16891685
let _icx = push_ctxt("finish_fn");
16901686

16911687
let ret_cx = match fcx.llreturn.get() {
16921688
Some(llreturn) => {
16931689
if !last_bcx.terminated.get() {
1694-
Br(last_bcx, llreturn);
1690+
Br(last_bcx, llreturn, DebugLoc::None);
16951691
}
16961692
raw_block(fcx, false, llreturn)
16971693
}
@@ -1701,7 +1697,7 @@ pub fn finish_fn<'blk, 'tcx>(fcx: &'blk FunctionContext<'blk, 'tcx>,
17011697
// This shouldn't need to recompute the return type,
17021698
// as new_fn_ctxt did it already.
17031699
let substd_retty = fcx.monomorphize(&retty);
1704-
build_return_block(fcx, ret_cx, substd_retty);
1700+
build_return_block(fcx, ret_cx, substd_retty, ret_debug_loc);
17051701

17061702
debuginfo::clear_source_location(fcx);
17071703
fcx.cleanup();
@@ -1710,10 +1706,11 @@ pub fn finish_fn<'blk, 'tcx>(fcx: &'blk FunctionContext<'blk, 'tcx>,
17101706
// Builds the return block for a function.
17111707
pub fn build_return_block<'blk, 'tcx>(fcx: &FunctionContext<'blk, 'tcx>,
17121708
ret_cx: Block<'blk, 'tcx>,
1713-
retty: ty::FnOutput<'tcx>) {
1709+
retty: ty::FnOutput<'tcx>,
1710+
ret_debug_location: DebugLoc) {
17141711
if fcx.llretslotptr.get().is_none() ||
17151712
(!fcx.needs_ret_allocas && fcx.caller_expects_out_pointer) {
1716-
return RetVoid(ret_cx);
1713+
return RetVoid(ret_cx, ret_debug_location);
17171714
}
17181715

17191716
let retslot = if fcx.needs_ret_allocas {
@@ -1743,26 +1740,26 @@ pub fn build_return_block<'blk, 'tcx>(fcx: &FunctionContext<'blk, 'tcx>,
17431740
if let ty::FnConverging(retty) = retty {
17441741
store_ty(ret_cx, retval, get_param(fcx.llfn, 0), retty);
17451742
}
1746-
RetVoid(ret_cx)
1743+
RetVoid(ret_cx, ret_debug_location)
17471744
} else {
1748-
Ret(ret_cx, retval)
1745+
Ret(ret_cx, retval, ret_debug_location)
17491746
}
17501747
}
17511748
// Otherwise, copy the return value to the ret slot
17521749
None => match retty {
17531750
ty::FnConverging(retty) => {
17541751
if fcx.caller_expects_out_pointer {
17551752
memcpy_ty(ret_cx, get_param(fcx.llfn, 0), retslot, retty);
1756-
RetVoid(ret_cx)
1753+
RetVoid(ret_cx, ret_debug_location)
17571754
} else {
1758-
Ret(ret_cx, load_ty(ret_cx, retslot, retty))
1755+
Ret(ret_cx, load_ty(ret_cx, retslot, retty), ret_debug_location)
17591756
}
17601757
}
17611758
ty::FnDiverging => {
17621759
if fcx.caller_expects_out_pointer {
1763-
RetVoid(ret_cx)
1760+
RetVoid(ret_cx, ret_debug_location)
17641761
} else {
1765-
Ret(ret_cx, C_undef(Type::nil(fcx.ccx)))
1762+
Ret(ret_cx, C_undef(Type::nil(fcx.ccx)), ret_debug_location)
17661763
}
17671764
}
17681765
}
@@ -1893,7 +1890,7 @@ pub fn trans_closure<'a, 'b, 'tcx>(ccx: &CrateContext<'a, 'tcx>,
18931890

18941891
match fcx.llreturn.get() {
18951892
Some(_) => {
1896-
Br(bcx, fcx.return_exit_block());
1893+
Br(bcx, fcx.return_exit_block(), DebugLoc::None);
18971894
fcx.pop_custom_cleanup_scope(arg_scope);
18981895
}
18991896
None => {
@@ -1912,8 +1909,11 @@ pub fn trans_closure<'a, 'b, 'tcx>(ccx: &CrateContext<'a, 'tcx>,
19121909
}
19131910
}
19141911

1912+
let ret_debug_loc = DebugLoc::At(fn_cleanup_debug_loc.id,
1913+
fn_cleanup_debug_loc.span);
1914+
19151915
// Insert the mandatory first few basic blocks before lltop.
1916-
finish_fn(&fcx, bcx, output_type);
1916+
finish_fn(&fcx, bcx, output_type, ret_debug_loc);
19171917
}
19181918

19191919
// trans_fn: creates an LLVM function corresponding to a source language
@@ -1965,7 +1965,7 @@ pub fn trans_named_tuple_constructor<'blk, 'tcx>(mut bcx: Block<'blk, 'tcx>,
19651965
disr: ty::Disr,
19661966
args: callee::CallArgs,
19671967
dest: expr::Dest,
1968-
call_info: Option<NodeInfo>)
1968+
debug_loc: DebugLoc)
19691969
-> Result<'blk, 'tcx> {
19701970

19711971
let ccx = bcx.fcx.ccx;
@@ -2004,7 +2004,7 @@ pub fn trans_named_tuple_constructor<'blk, 'tcx>(mut bcx: Block<'blk, 'tcx>,
20042004
&fields[],
20052005
None,
20062006
expr::SaveIn(llresult),
2007-
call_info);
2007+
debug_loc);
20082008
}
20092009
_ => ccx.sess().bug("expected expr as arguments for variant/struct tuple constructor")
20102010
}
@@ -2015,7 +2015,7 @@ pub fn trans_named_tuple_constructor<'blk, 'tcx>(mut bcx: Block<'blk, 'tcx>,
20152015
let bcx = match dest {
20162016
expr::SaveIn(_) => bcx,
20172017
expr::Ignore => {
2018-
glue::drop_ty(bcx, llresult, result_ty, call_info)
2018+
glue::drop_ty(bcx, llresult, result_ty, debug_loc)
20192019
}
20202020
};
20212021

@@ -2082,7 +2082,7 @@ fn trans_enum_variant_or_tuple_like_struct<'a, 'tcx>(ccx: &CrateContext<'a, 'tcx
20822082
adt::trans_set_discr(bcx, &*repr, dest, disr);
20832083
}
20842084

2085-
finish_fn(&fcx, bcx, result_ty);
2085+
finish_fn(&fcx, bcx, result_ty, DebugLoc::None);
20862086
}
20872087

20882088
fn enum_variant_size_lint(ccx: &CrateContext, enum_def: &ast::EnumDef, sp: Span, id: ast::NodeId) {

0 commit comments

Comments
 (0)