mirror of
https://github.com/rust-lang/rust.git
synced 2025-02-18 18:04:13 +00:00
Fix #[track_caller] shims for trait objects.
We were missing an Instance::resolve_for_fn_ptr in resolve_for_vtable. Closes #74764.
This commit is contained in:
parent
d7f9451634
commit
4c710e72c4
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
23
src/test/ui/rfc-2091-track-caller/tracked-trait-obj.rs
Normal file
23
src/test/ui/rfc-2091-track-caller/tracked-trait-obj.rs
Normal file
@ -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();
|
||||
}
|
Loading…
Reference in New Issue
Block a user