test track_caller on trait objects

This commit is contained in:
Ralf Jung 2020-07-31 18:30:07 +02:00
parent 55bdb31746
commit 729ccbc65e

View file

@ -35,6 +35,28 @@ fn test_fn_ptr() {
pass_to_ptr_call(tracked_unit, ());
}
fn test_trait_obj() {
trait Tracked {
#[track_caller]
fn handle(&self) { // `fn` here is what the `location` should point at.
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(), 9);
}
}
impl Tracked for () {}
impl Tracked for u8 {}
let tracked: &dyn Tracked = &5u8;
tracked.handle();
const TRACKED: &dyn Tracked = &();
TRACKED.handle();
}
fn main() {
let location = Location::caller();
let expected_line = line!() - 1;
@ -73,4 +95,5 @@ fn main() {
assert_eq!(intrinsic.column(), 21);
test_fn_ptr();
test_trait_obj();
}