about summary refs log tree commit diff
diff options
context:
space:
mode:
authorAdam Perry <adam.n.perry@gmail.com>2019-12-06 17:05:51 -0800
committerAdam Perry <adam.n.perry@gmail.com>2019-12-06 18:37:54 -0800
commit1c2483eb6fd679fd7f63cc0c0fb9692a2aa698aa (patch)
treee8dda3b1fd911143f0ff7cae4453de124b1cb424
parent99165ce1f76573729530c241036a0514ca1cf232 (diff)
downloadrust-1c2483eb6fd679fd7f63cc0c0fb9692a2aa698aa.tar.gz
rust-1c2483eb6fd679fd7f63cc0c0fb9692a2aa698aa.zip
Address review feedback.
-rw-r--r--src/librustc_codegen_ssa/mir/block.rs4
-rw-r--r--src/librustc_codegen_ssa/mir/mod.rs4
-rw-r--r--src/librustc_mir/interpret/intrinsics.rs2
-rw-r--r--src/librustc_mir/interpret/intrinsics/caller_location.rs17
4 files changed, 10 insertions, 17 deletions
diff --git a/src/librustc_codegen_ssa/mir/block.rs b/src/librustc_codegen_ssa/mir/block.rs
index 5d25f7022c5..099ba5b39bb 100644
--- a/src/librustc_codegen_ssa/mir/block.rs
+++ b/src/librustc_codegen_ssa/mir/block.rs
@@ -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);
         }
 
diff --git a/src/librustc_codegen_ssa/mir/mod.rs b/src/librustc_codegen_ssa/mir/mod.rs
index 5e4da8f2125..33e343de86b 100644
--- a/src/librustc_codegen_ssa/mir/mod.rs
+++ b/src/librustc_codegen_ssa/mir/mod.rs
@@ -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 {
diff --git a/src/librustc_mir/interpret/intrinsics.rs b/src/librustc_mir/interpret/intrinsics.rs
index 20f1a1d7c48..67f0aed243d 100644
--- a/src/librustc_mir/interpret/intrinsics.rs
+++ b/src/librustc_mir/interpret/intrinsics.rs
@@ -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)?;
             }
diff --git a/src/librustc_mir/interpret/intrinsics/caller_location.rs b/src/librustc_mir/interpret/intrinsics/caller_location.rs
index 391c0c30bde..ec843ef7a4d 100644
--- a/src/librustc_mir/interpret/intrinsics/caller_location.rs
+++ b/src/librustc_mir/interpret/intrinsics/caller_location.rs
@@ -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.