@@ -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;
@@ -792,7 +792,7 @@ pub fn iter_structural_ty<'blk, 'tcx, F>(cx: Block<'blk, 'tcx>,
792792 & * * variant,
793793 substs,
794794 & mut f) ;
795- Br ( variant_cx, next_cx. llbb ) ;
795+ Br ( variant_cx, next_cx. llbb , DebugLoc :: None ) ;
796796 }
797797 cx = next_cx;
798798 }
@@ -957,7 +957,7 @@ pub fn invoke<'blk, 'tcx>(bcx: Block<'blk, 'tcx>,
957957 llfn : ValueRef ,
958958 llargs : & [ ValueRef ] ,
959959 fn_ty : Ty < ' tcx > ,
960- call_info : Option < NodeInfo > )
960+ debug_loc : DebugLoc )
961961 -> ( ValueRef , Block < ' blk , ' tcx > ) {
962962 let _icx = push_ctxt ( "invoke_" ) ;
963963 if bcx. unreachable . get ( ) {
@@ -983,30 +983,25 @@ pub fn invoke<'blk, 'tcx>(bcx: Block<'blk, 'tcx>,
983983 let normal_bcx = bcx. fcx . new_temp_block ( "normal-return" ) ;
984984 let landing_pad = bcx. fcx . get_landing_pad ( ) ;
985985
986- match call_info {
987- Some ( info) => debuginfo:: set_source_location ( bcx. fcx , info. id , info. span ) ,
988- None => debuginfo:: clear_source_location ( bcx. fcx )
989- } ;
990-
991986 let llresult = Invoke ( bcx,
992987 llfn,
993988 & llargs[ ] ,
994989 normal_bcx. llbb ,
995990 landing_pad,
996- Some ( attributes) ) ;
991+ Some ( attributes) ,
992+ debug_loc) ;
997993 return ( llresult, normal_bcx) ;
998994 } else {
999995 debug ! ( "calling {} at {:?}" , bcx. val_to_string( llfn) , bcx. llbb) ;
1000996 for & llarg in llargs. iter ( ) {
1001997 debug ! ( "arg: {}" , bcx. val_to_string( llarg) ) ;
1002998 }
1003999
1004- match call_info {
1005- Some ( info) => debuginfo:: set_source_location ( bcx. fcx , info. id , info. span ) ,
1006- None => debuginfo:: clear_source_location ( bcx. fcx )
1007- } ;
1008-
1009- let llresult = Call ( bcx, llfn, & llargs[ ] , Some ( attributes) ) ;
1000+ let llresult = Call ( bcx,
1001+ llfn,
1002+ & llargs[ ] ,
1003+ Some ( attributes) ,
1004+ debug_loc) ;
10101005 return ( llresult, bcx) ;
10111006 }
10121007}
@@ -1094,10 +1089,10 @@ pub fn with_cond<'blk, 'tcx, F>(bcx: Block<'blk, 'tcx>,
10941089 let fcx = bcx. fcx ;
10951090 let next_cx = fcx. new_temp_block ( "next" ) ;
10961091 let cond_cx = fcx. new_temp_block ( "cond" ) ;
1097- CondBr ( bcx, val, cond_cx. llbb , next_cx. llbb ) ;
1092+ CondBr ( bcx, val, cond_cx. llbb , next_cx. llbb , DebugLoc :: None ) ;
10981093 let after_cx = f ( cond_cx) ;
10991094 if !after_cx. terminated . get ( ) {
1100- Br ( after_cx, next_cx. llbb ) ;
1095+ Br ( after_cx, next_cx. llbb , DebugLoc :: None ) ;
11011096 }
11021097 next_cx
11031098}
@@ -1113,7 +1108,7 @@ pub fn call_lifetime_start(cx: Block, ptr: ValueRef) {
11131108 let llsize = C_u64 ( ccx, machine:: llsize_of_alloc ( ccx, val_ty ( ptr) . element_type ( ) ) ) ;
11141109 let ptr = PointerCast ( cx, ptr, Type :: i8p ( ccx) ) ;
11151110 let lifetime_start = ccx. get_intrinsic ( & "llvm.lifetime.start" ) ;
1116- Call ( cx, lifetime_start, & [ llsize, ptr] , None ) ;
1111+ Call ( cx, lifetime_start, & [ llsize, ptr] , None , DebugLoc :: None ) ;
11171112}
11181113
11191114pub fn call_lifetime_end ( cx : Block , ptr : ValueRef ) {
@@ -1127,7 +1122,7 @@ pub fn call_lifetime_end(cx: Block, ptr: ValueRef) {
11271122 let llsize = C_u64 ( ccx, machine:: llsize_of_alloc ( ccx, val_ty ( ptr) . element_type ( ) ) ) ;
11281123 let ptr = PointerCast ( cx, ptr, Type :: i8p ( ccx) ) ;
11291124 let lifetime_end = ccx. get_intrinsic ( & "llvm.lifetime.end" ) ;
1130- Call ( cx, lifetime_end, & [ llsize, ptr] , None ) ;
1125+ Call ( cx, lifetime_end, & [ llsize, ptr] , None , DebugLoc :: None ) ;
11311126}
11321127
11331128pub fn call_memcpy ( cx : Block , dst : ValueRef , src : ValueRef , n_bytes : ValueRef , align : u32 ) {
@@ -1144,7 +1139,7 @@ pub fn call_memcpy(cx: Block, dst: ValueRef, src: ValueRef, n_bytes: ValueRef, a
11441139 let size = IntCast ( cx, n_bytes, ccx. int_type ( ) ) ;
11451140 let align = C_i32 ( ccx, align as i32 ) ;
11461141 let volatile = C_bool ( ccx, false ) ;
1147- Call ( cx, memcpy, & [ dst_ptr, src_ptr, size, align, volatile] , None ) ;
1142+ Call ( cx, memcpy, & [ dst_ptr, src_ptr, size, align, volatile] , None , DebugLoc :: None ) ;
11481143}
11491144
11501145pub fn memcpy_ty < ' blk , ' tcx > ( bcx : Block < ' blk , ' tcx > ,
@@ -1697,13 +1692,14 @@ fn copy_unboxed_closure_args_to_allocas<'blk, 'tcx>(
16971692// and builds the return block.
16981693pub fn finish_fn < ' blk , ' tcx > ( fcx : & ' blk FunctionContext < ' blk , ' tcx > ,
16991694 last_bcx : Block < ' blk , ' tcx > ,
1700- retty : ty:: FnOutput < ' tcx > ) {
1695+ retty : ty:: FnOutput < ' tcx > ,
1696+ ret_debug_loc : DebugLoc ) {
17011697 let _icx = push_ctxt ( "finish_fn" ) ;
17021698
17031699 let ret_cx = match fcx. llreturn . get ( ) {
17041700 Some ( llreturn) => {
17051701 if !last_bcx. terminated . get ( ) {
1706- Br ( last_bcx, llreturn) ;
1702+ Br ( last_bcx, llreturn, DebugLoc :: None ) ;
17071703 }
17081704 raw_block ( fcx, false , llreturn)
17091705 }
@@ -1713,7 +1709,7 @@ pub fn finish_fn<'blk, 'tcx>(fcx: &'blk FunctionContext<'blk, 'tcx>,
17131709 // This shouldn't need to recompute the return type,
17141710 // as new_fn_ctxt did it already.
17151711 let substd_retty = fcx. monomorphize ( & retty) ;
1716- build_return_block ( fcx, ret_cx, substd_retty) ;
1712+ build_return_block ( fcx, ret_cx, substd_retty, ret_debug_loc ) ;
17171713
17181714 debuginfo:: clear_source_location ( fcx) ;
17191715 fcx. cleanup ( ) ;
@@ -1722,10 +1718,11 @@ pub fn finish_fn<'blk, 'tcx>(fcx: &'blk FunctionContext<'blk, 'tcx>,
17221718// Builds the return block for a function.
17231719pub fn build_return_block < ' blk , ' tcx > ( fcx : & FunctionContext < ' blk , ' tcx > ,
17241720 ret_cx : Block < ' blk , ' tcx > ,
1725- retty : ty:: FnOutput < ' tcx > ) {
1721+ retty : ty:: FnOutput < ' tcx > ,
1722+ ret_debug_location : DebugLoc ) {
17261723 if fcx. llretslotptr . get ( ) . is_none ( ) ||
17271724 ( !fcx. needs_ret_allocas && fcx. caller_expects_out_pointer ) {
1728- return RetVoid ( ret_cx) ;
1725+ return RetVoid ( ret_cx, ret_debug_location ) ;
17291726 }
17301727
17311728 let retslot = if fcx. needs_ret_allocas {
@@ -1755,26 +1752,26 @@ pub fn build_return_block<'blk, 'tcx>(fcx: &FunctionContext<'blk, 'tcx>,
17551752 if let ty:: FnConverging ( retty) = retty {
17561753 store_ty ( ret_cx, retval, get_param ( fcx. llfn , 0 ) , retty) ;
17571754 }
1758- RetVoid ( ret_cx)
1755+ RetVoid ( ret_cx, ret_debug_location )
17591756 } else {
1760- Ret ( ret_cx, retval)
1757+ Ret ( ret_cx, retval, ret_debug_location )
17611758 }
17621759 }
17631760 // Otherwise, copy the return value to the ret slot
17641761 None => match retty {
17651762 ty:: FnConverging ( retty) => {
17661763 if fcx. caller_expects_out_pointer {
17671764 memcpy_ty ( ret_cx, get_param ( fcx. llfn , 0 ) , retslot, retty) ;
1768- RetVoid ( ret_cx)
1765+ RetVoid ( ret_cx, ret_debug_location )
17691766 } else {
1770- Ret ( ret_cx, load_ty ( ret_cx, retslot, retty) )
1767+ Ret ( ret_cx, load_ty ( ret_cx, retslot, retty) , ret_debug_location )
17711768 }
17721769 }
17731770 ty:: FnDiverging => {
17741771 if fcx. caller_expects_out_pointer {
1775- RetVoid ( ret_cx)
1772+ RetVoid ( ret_cx, ret_debug_location )
17761773 } else {
1777- Ret ( ret_cx, C_undef ( Type :: nil ( fcx. ccx ) ) )
1774+ Ret ( ret_cx, C_undef ( Type :: nil ( fcx. ccx ) ) , ret_debug_location )
17781775 }
17791776 }
17801777 }
@@ -1905,7 +1902,7 @@ pub fn trans_closure<'a, 'b, 'tcx>(ccx: &CrateContext<'a, 'tcx>,
19051902
19061903 match fcx. llreturn . get ( ) {
19071904 Some ( _) => {
1908- Br ( bcx, fcx. return_exit_block ( ) ) ;
1905+ Br ( bcx, fcx. return_exit_block ( ) , DebugLoc :: None ) ;
19091906 fcx. pop_custom_cleanup_scope ( arg_scope) ;
19101907 }
19111908 None => {
@@ -1924,8 +1921,11 @@ pub fn trans_closure<'a, 'b, 'tcx>(ccx: &CrateContext<'a, 'tcx>,
19241921 }
19251922 }
19261923
1924+ let ret_debug_loc = DebugLoc :: At ( fn_cleanup_debug_loc. id ,
1925+ fn_cleanup_debug_loc. span ) ;
1926+
19271927 // Insert the mandatory first few basic blocks before lltop.
1928- finish_fn ( & fcx, bcx, output_type) ;
1928+ finish_fn ( & fcx, bcx, output_type, ret_debug_loc ) ;
19291929}
19301930
19311931// trans_fn: creates an LLVM function corresponding to a source language
@@ -1977,7 +1977,7 @@ pub fn trans_named_tuple_constructor<'blk, 'tcx>(mut bcx: Block<'blk, 'tcx>,
19771977 disr : ty:: Disr ,
19781978 args : callee:: CallArgs ,
19791979 dest : expr:: Dest ,
1980- call_info : Option < NodeInfo > )
1980+ debug_loc : DebugLoc )
19811981 -> Result < ' blk , ' tcx > {
19821982
19831983 let ccx = bcx. fcx . ccx ;
@@ -2016,7 +2016,7 @@ pub fn trans_named_tuple_constructor<'blk, 'tcx>(mut bcx: Block<'blk, 'tcx>,
20162016 & fields[ ] ,
20172017 None ,
20182018 expr:: SaveIn ( llresult) ,
2019- call_info ) ;
2019+ debug_loc ) ;
20202020 }
20212021 _ => ccx. sess ( ) . bug ( "expected expr as arguments for variant/struct tuple constructor" )
20222022 }
@@ -2027,7 +2027,7 @@ pub fn trans_named_tuple_constructor<'blk, 'tcx>(mut bcx: Block<'blk, 'tcx>,
20272027 let bcx = match dest {
20282028 expr:: SaveIn ( _) => bcx,
20292029 expr:: Ignore => {
2030- glue:: drop_ty ( bcx, llresult, result_ty, call_info )
2030+ glue:: drop_ty ( bcx, llresult, result_ty, debug_loc )
20312031 }
20322032 } ;
20332033
@@ -2094,7 +2094,7 @@ fn trans_enum_variant_or_tuple_like_struct<'a, 'tcx>(ccx: &CrateContext<'a, 'tcx
20942094 adt:: trans_set_discr ( bcx, & * repr, dest, disr) ;
20952095 }
20962096
2097- finish_fn ( & fcx, bcx, result_ty) ;
2097+ finish_fn ( & fcx, bcx, result_ty, DebugLoc :: None ) ;
20982098}
20992099
21002100fn enum_variant_size_lint ( ccx : & CrateContext , enum_def : & ast:: EnumDef , sp : Span , id : ast:: NodeId ) {
0 commit comments