Skip to content

Commit

Permalink
Address review feedback.
Browse files Browse the repository at this point in the history
  • Loading branch information
anp committed Dec 7, 2019
1 parent 99165ce commit 1c2483e
Show file tree
Hide file tree
Showing 4 changed files with 10 additions and 17 deletions.
4 changes: 2 additions & 2 deletions src/librustc_codegen_ssa/mir/block.rs
Original file line number Diff line number Diff line change
Expand Up @@ -771,14 +771,14 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
}

let needs_location =
instance.map(|i| i.def.requires_caller_location(self.cx.tcx())).unwrap_or_default();
instance.map_or(false, |i| i.def.requires_caller_location(self.cx.tcx()));
if needs_location {
assert_eq!(
fn_abi.args.len(), args.len() + 1,
"#[track_caller] fn's must have 1 more argument in their ABI than in their MIR",
);
let location = self.get_caller_location(&mut bx, span);
let last_arg = &fn_abi.args.last().unwrap();
let last_arg = fn_abi.args.last().unwrap();
self.codegen_argument(&mut bx, location, &mut llargs, last_arg);
}

Expand Down
4 changes: 2 additions & 2 deletions src/librustc_codegen_ssa/mir/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -435,10 +435,10 @@ fn arg_local_refs<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>>(
"#[track_caller] fn's must have 1 more argument in their ABI than in their MIR",
);

let arg = &fx.fn_abi.args.last().unwrap();
let arg = fx.fn_abi.args.last().unwrap();
match arg.mode {
PassMode::Direct(_) => (),
_ => panic!("caller location must be PassMode::Direct, found {:?}", arg.mode),
_ => bug!("caller location must be PassMode::Direct, found {:?}", arg.mode),
}

fx.caller_location = Some(OperandRef {
Expand Down
2 changes: 1 addition & 1 deletion src/librustc_mir/interpret/intrinsics.rs
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ impl<'mir, 'tcx, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
// `src/librustc/ty/constness.rs`
match intrinsic_name {
sym::caller_location => {
let span = self.find_closest_untracked_caller_location(span);
let span = self.find_closest_untracked_caller_location().unwrap_or(span);
let location = self.alloc_caller_location_for_span(span);
self.write_scalar(location.ptr, dest)?;
}
Expand Down
17 changes: 5 additions & 12 deletions src/librustc_mir/interpret/intrinsics/caller_location.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,24 +7,17 @@ use crate::interpret::{Scalar, MemoryKind, MPlaceTy, intrinsics::{InterpCx, Mach

impl<'mir, 'tcx, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
/// Walks up the callstack from the intrinsic's callsite, searching for the first frame which is
/// not `#[track_caller]`. Returns the (passed) span of the intrinsic's callsite if the first
/// frame in the stack is untracked so that we can display the callsite of the intrinsic within
/// that function.
crate fn find_closest_untracked_caller_location(
&self,
intrinsic_loc: Span,
) -> Span {
debug!("finding closest untracked caller relative to {:?}", intrinsic_loc);

let mut caller_span = intrinsic_loc;
/// not `#[track_caller]`.
crate fn find_closest_untracked_caller_location(&self) -> Option<Span> {
let mut caller_span = None;
for next_caller in self.stack.iter().rev() {
if !next_caller.instance.def.requires_caller_location(*self.tcx) {
return caller_span;
}
caller_span = next_caller.span;
caller_span = Some(next_caller.span);
}

intrinsic_loc
caller_span
}

/// Allocate a `const core::panic::Location` with the provided filename and line/column numbers.
Expand Down

0 comments on commit 1c2483e

Please sign in to comment.