@@ -14,6 +14,49 @@ fn tracked_unit(_: ()) {
14
14
assert_eq ! ( location. line( ) , expected_line, "call shims report location as fn definition" ) ;
15
15
}
16
16
17
+ trait Trait {
18
+ fn trait_tracked_unit ( _: ( ) ) ;
19
+ }
20
+
21
+ impl Trait for ( ) {
22
+ #[ track_caller]
23
+ fn trait_tracked_unit ( _: ( ) ) {
24
+ let expected_line = line ! ( ) - 1 ;
25
+ let location = std:: panic:: Location :: caller ( ) ;
26
+ assert_eq ! ( location. file( ) , file!( ) ) ;
27
+ assert_eq ! ( location. line( ) , expected_line, "call shims report location as fn definition" ) ;
28
+ }
29
+ }
30
+
31
+ trait TrackedTrait {
32
+ #[ track_caller]
33
+ fn trait_tracked_unit_default ( _: ( ) ) {
34
+ let expected_line = line ! ( ) - 1 ;
35
+ let location = std:: panic:: Location :: caller ( ) ;
36
+ assert_eq ! ( location. file( ) , file!( ) ) ;
37
+ assert_eq ! ( location. line( ) , expected_line, "call shims report location as fn definition" ) ;
38
+ }
39
+ }
40
+
41
+ impl TrackedTrait for ( ) { }
42
+
43
+ trait BlanketTrackedTrait {
44
+ #[ track_caller]
45
+ fn tracked_blanket ( _: ( ) ) ;
46
+ }
47
+
48
+ impl BlanketTrackedTrait for ( ) {
49
+ fn tracked_blanket ( _: ( ) ) {
50
+ let expected_line = line ! ( ) - 1 ;
51
+ let location = std:: panic:: Location :: caller ( ) ;
52
+ assert_eq ! ( location. file( ) , file!( ) ) ;
53
+ assert_eq ! ( location. line( ) , expected_line, "call shims report location as fn definition" ) ;
54
+ }
55
+ }
56
+
17
57
fn main ( ) {
18
58
pass_to_ptr_call ( tracked_unit, ( ) ) ;
59
+ pass_to_ptr_call ( <( ) as Trait >:: trait_tracked_unit, ( ) ) ;
60
+ pass_to_ptr_call ( <( ) as TrackedTrait >:: trait_tracked_unit_default, ( ) ) ;
61
+ pass_to_ptr_call ( <( ) as BlanketTrackedTrait >:: tracked_blanket, ( ) ) ;
19
62
}
0 commit comments