@@ -12,21 +12,21 @@ use crate::interpret::{
12
12
13
13
impl < ' mir , ' tcx , M : Machine < ' mir , ' tcx > > InterpCx < ' mir , ' tcx , M > {
14
14
/// Walks up the callstack from the intrinsic's callsite, searching for the first callsite in a
15
- /// frame which is not `#[track_caller]`. If the first frame found lacks `#[track_caller]`, then
16
- /// `None` is returned and the callsite of the function invocation itself should be used.
15
+ /// frame which is not `#[track_caller]`.
17
16
crate fn find_closest_untracked_caller_location ( & self ) -> Span {
18
17
self . stack
19
18
. iter ( )
20
19
. rev ( )
21
- // Skip `#[track_caller]` frames.
22
- . skip_while ( |frame| frame. instance . def . requires_caller_location ( * self . tcx ) )
23
- // Find next frame with source info.
24
- . find_map ( |frame| frame. current_source_info ( ) )
25
- . map ( |si| si. span )
26
- // Fallback to current frame. That one has to have source_info as only
27
- // currently unwinding frames without cleanup do *not* have it -- and those
28
- // frames do not call this intrinsic.
29
- . unwrap_or_else ( || self . frame ( ) . current_source_info ( ) . unwrap ( ) . span )
20
+ // Find first non-`#[track_caller]` frame.
21
+ . find ( |frame| !frame. instance . def . requires_caller_location ( * self . tcx ) )
22
+ // Assert that there is always such a frame.
23
+ . unwrap ( )
24
+ . current_source_info ( )
25
+ // Assert that the frame we look at is actually executing code currently
26
+ // (`current_source_info` is None when we are unwinding and the frame does
27
+ // not require cleanup).
28
+ . unwrap ( )
29
+ . span
30
30
}
31
31
32
32
/// Allocate a `const core::panic::Location` with the provided filename and line/column numbers.
0 commit comments