Skip to content

Commit

Permalink
Fix #[track_caller] shims for trait objects.
Browse files Browse the repository at this point in the history
We were missing an Instance::resolve_for_fn_ptr in resolve_for_vtable.

Closes rust-lang#74764.
  • Loading branch information
anp committed Jul 26, 2020
1 parent d7f9451 commit 4c710e7
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 1 deletion.
2 changes: 1 addition & 1 deletion src/librustc_middle/ty/instance.rs
Original file line number Diff line number Diff line change
Expand Up @@ -411,7 +411,7 @@ impl<'tcx> Instance<'tcx> {
debug!(" => associated item with unsizeable self: Self");
Some(Instance { def: InstanceDef::VtableShim(def_id), substs })
} else {
Instance::resolve(tcx, param_env, def_id, substs).ok().flatten()
Instance::resolve_for_fn_ptr(tcx, param_env, def_id, substs)
}
}

Expand Down
23 changes: 23 additions & 0 deletions src/test/ui/rfc-2091-track-caller/tracked-trait-obj.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
// run-pass

trait Tracked {
#[track_caller]
fn handle(&self) {
let location = std::panic::Location::caller();
assert_eq!(location.file(), file!());
// we only call this via trait object, so the def site should *always* be returned
assert_eq!(location.line(), line!() - 4);
assert_eq!(location.column(), 5);
}
}

impl Tracked for () {}
impl Tracked for u8 {}

fn main() {
let tracked: &dyn Tracked = &5u8;
tracked.handle();

const TRACKED: &dyn Tracked = &();
TRACKED.handle();
}

0 comments on commit 4c710e7

Please sign in to comment.