Always use fn_span in codegen_call_terminator

This commit is contained in:
bjorn3
2025-05-22 11:17:51 +00:00
parent 1e9e17704a
commit e4700e76d8

View File

@@ -903,8 +903,7 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
fn_span: Span, fn_span: Span,
mergeable_succ: bool, mergeable_succ: bool,
) -> MergingSucc { ) -> MergingSucc {
let source_info = terminator.source_info; let source_info = mir::SourceInfo { span: fn_span, ..terminator.source_info };
let span = source_info.span;
// Create the callee. This is a fn ptr or zero-sized and hence a kind of scalar. // Create the callee. This is a fn ptr or zero-sized and hence a kind of scalar.
let callee = self.codegen_operand(bx, func); let callee = self.codegen_operand(bx, func);
@@ -968,10 +967,7 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
if matches!(intrinsic, ty::IntrinsicDef { name: sym::caller_location, .. }) if matches!(intrinsic, ty::IntrinsicDef { name: sym::caller_location, .. })
{ {
let location = self.get_caller_location( let location = self.get_caller_location(bx, source_info);
bx,
mir::SourceInfo { span: fn_span, ..source_info },
);
assert_eq!(llargs, []); assert_eq!(llargs, []);
if let ReturnDest::IndirectOperand(tmp, _) = ret_dest { if let ReturnDest::IndirectOperand(tmp, _) = ret_dest {
@@ -981,8 +977,9 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
return helper.funclet_br(self, bx, target.unwrap(), mergeable_succ); return helper.funclet_br(self, bx, target.unwrap(), mergeable_succ);
} }
match Self::codegen_intrinsic_call(bx, instance, fn_abi, &args, dest, span) match Self::codegen_intrinsic_call(
{ bx, instance, fn_abi, &args, dest, fn_span,
) {
Ok(()) => { Ok(()) => {
if let ReturnDest::IndirectOperand(dst, _) = ret_dest { if let ReturnDest::IndirectOperand(dst, _) = ret_dest {
self.store_return(bx, ret_dest, &fn_abi.ret, dst.val.llval); self.store_return(bx, ret_dest, &fn_abi.ret, dst.val.llval);
@@ -998,7 +995,7 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
Err(instance) => { Err(instance) => {
if intrinsic.must_be_overridden { if intrinsic.must_be_overridden {
span_bug!( span_bug!(
span, fn_span,
"intrinsic {} must be overridden by codegen backend, but isn't", "intrinsic {} must be overridden by codegen backend, but isn't",
intrinsic.name, intrinsic.name,
); );
@@ -1113,7 +1110,7 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
// Make sure that we've actually unwrapped the rcvr down // Make sure that we've actually unwrapped the rcvr down
// to a pointer or ref to `dyn* Trait`. // to a pointer or ref to `dyn* Trait`.
if !op.layout.ty.builtin_deref(true).unwrap().is_dyn_star() { if !op.layout.ty.builtin_deref(true).unwrap().is_dyn_star() {
span_bug!(span, "can't codegen a virtual call on {:#?}", op); span_bug!(fn_span, "can't codegen a virtual call on {:#?}", op);
} }
let place = op.deref(bx.cx()); let place = op.deref(bx.cx());
let data_place = place.project_field(bx, 0); let data_place = place.project_field(bx, 0);
@@ -1129,7 +1126,7 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
continue; continue;
} }
_ => { _ => {
span_bug!(span, "can't codegen a virtual call on {:#?}", op); span_bug!(fn_span, "can't codegen a virtual call on {:#?}", op);
} }
} }
} }
@@ -1179,8 +1176,7 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
mir_args + 1, mir_args + 1,
"#[track_caller] fn's must have 1 more argument in their ABI than in their MIR: {instance:?} {fn_span:?} {fn_abi:?}", "#[track_caller] fn's must have 1 more argument in their ABI than in their MIR: {instance:?} {fn_span:?} {fn_abi:?}",
); );
let location = let location = self.get_caller_location(bx, source_info);
self.get_caller_location(bx, mir::SourceInfo { span: fn_span, ..source_info });
debug!( debug!(
"codegen_call_terminator({:?}): location={:?} (fn_span {:?})", "codegen_call_terminator({:?}): location={:?} (fn_span {:?})",
terminator, location, fn_span terminator, location, fn_span
@@ -1199,9 +1195,9 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
let fn_ptr = match (instance, llfn) { let fn_ptr = match (instance, llfn) {
(Some(instance), None) => bx.get_fn_addr(instance), (Some(instance), None) => bx.get_fn_addr(instance),
(_, Some(llfn)) => llfn, (_, Some(llfn)) => llfn,
_ => span_bug!(span, "no instance or llfn for call"), _ => span_bug!(fn_span, "no instance or llfn for call"),
}; };
self.set_debug_loc(bx, mir::SourceInfo { span: fn_span, ..source_info }); self.set_debug_loc(bx, source_info);
helper.do_call( helper.do_call(
self, self,
bx, bx,