提交 f721fb59 编写于 作者: B bors

Auto merge of #74784 - anp:track-vtables, r=eddyb

Fix #[track_caller] shims for trait objects.

We were missing an Instance::resolve_for_fn_ptr in resolve_for_vtable.

Closes #74764.
......@@ -389,7 +389,7 @@ pub fn resolve_for_vtable(
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)
}
}
......
// 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();
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册