@@ -57,7 +57,7 @@ use trans::closure;
5757use trans:: common:: { Block , C_bool , C_bytes_in_context , C_i32 , C_integral } ;
5858use trans:: common:: { C_null , C_struct_in_context , C_u64 , C_u8 , C_undef } ;
5959use trans:: common:: { CrateContext , ExternMap , FunctionContext } ;
60- use trans:: common:: { NodeInfo , Result } ;
60+ use trans:: common:: { Result } ;
6161use trans:: common:: { node_id_type, return_type_is_void} ;
6262use trans:: common:: { tydesc_info, type_is_immediate} ;
6363use trans:: common:: { type_is_zero_size, val_ty} ;
@@ -66,7 +66,7 @@ use trans::consts;
6666use trans:: context:: SharedCrateContext ;
6767use trans:: controlflow;
6868use trans:: datum;
69- use trans:: debuginfo;
69+ use trans:: debuginfo:: { self , DebugLoc } ;
7070use trans:: expr;
7171use trans:: foreign;
7272use 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
11071102pub 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
11211116pub 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
11381133pub 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.
16861681pub 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.
17111707pub 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
20882088fn enum_variant_size_lint ( ccx : & CrateContext , enum_def : & ast:: EnumDef , sp : Span , id : ast:: NodeId ) {
0 commit comments