@@ -430,47 +430,11 @@ impl<'tcx> FunctionCx<'_, '_, 'tcx> {
430430 }
431431 }
432432
433- // Note: must be kept in sync with get_caller_location from cg_ssa
434- pub ( crate ) fn get_caller_location ( & mut self , mut source_info : mir:: SourceInfo ) -> CValue < ' tcx > {
435- let span_to_caller_location = |fx : & mut FunctionCx < ' _ , ' _ , ' tcx > , span : Span | {
436- use rustc_session:: RemapFileNameExt ;
437- let topmost = span. ctxt ( ) . outer_expn ( ) . expansion_cause ( ) . unwrap_or ( span) ;
438- let caller = fx. tcx . sess . source_map ( ) . lookup_char_pos ( topmost. lo ( ) ) ;
439- let const_loc = fx. tcx . const_caller_location ( (
440- rustc_span:: symbol:: Symbol :: intern (
441- & caller. file . name . for_codegen ( & fx. tcx . sess ) . to_string_lossy ( ) ,
442- ) ,
443- caller. line as u32 ,
444- caller. col_display as u32 + 1 ,
445- ) ) ;
446- crate :: constant:: codegen_const_value ( fx, const_loc, fx. tcx . caller_location_ty ( ) )
447- } ;
448-
449- // Walk up the `SourceScope`s, in case some of them are from MIR inlining.
450- // If so, the starting `source_info.span` is in the innermost inlined
451- // function, and will be replaced with outer callsite spans as long
452- // as the inlined functions were `#[track_caller]`.
453- loop {
454- let scope_data = & self . mir . source_scopes [ source_info. scope ] ;
455-
456- if let Some ( ( callee, callsite_span) ) = scope_data. inlined {
457- // Stop inside the most nested non-`#[track_caller]` function,
458- // before ever reaching its caller (which is irrelevant).
459- if !callee. def . requires_caller_location ( self . tcx ) {
460- return span_to_caller_location ( self , source_info. span ) ;
461- }
462- source_info. span = callsite_span;
463- }
464-
465- // Skip past all of the parents with `inlined: None`.
466- match scope_data. inlined_parent_scope {
467- Some ( parent) => source_info. scope = parent,
468- None => break ,
469- }
470- }
471-
472- // No inlined `SourceScope`s, or all of them were `#[track_caller]`.
473- self . caller_location . unwrap_or_else ( || span_to_caller_location ( self , source_info. span ) )
433+ pub ( crate ) fn get_caller_location ( & mut self , source_info : mir:: SourceInfo ) -> CValue < ' tcx > {
434+ self . mir . caller_location_span ( source_info, self . caller_location , self . tcx , |span| {
435+ let const_loc = self . tcx . span_as_caller_location ( span) ;
436+ crate :: constant:: codegen_const_value ( self , const_loc, self . tcx . caller_location_ty ( ) )
437+ } )
474438 }
475439
476440 pub ( crate ) fn anonymous_str ( & mut self , msg : & str ) -> Value {
0 commit comments