From 729ccbc65e6d1e0004fba28aaa7a3c9c9408c15c Mon Sep 17 00:00:00 2001 From: Ralf Jung Date: Fri, 31 Jul 2020 18:30:07 +0200 Subject: [PATCH] test track_caller on trait objects --- tests/run-pass/track-caller-attribute.rs | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/tests/run-pass/track-caller-attribute.rs b/tests/run-pass/track-caller-attribute.rs index be655703daa0..a9cfd2e0ebde 100644 --- a/tests/run-pass/track-caller-attribute.rs +++ b/tests/run-pass/track-caller-attribute.rs @@ -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(); }