]> git.proxmox.com Git - rustc.git/blame - src/test/ui/rfc-2091-track-caller/tracked-fn-ptr.rs
New upstream version 1.44.1+dfsg1
[rustc.git] / src / test / ui / rfc-2091-track-caller / tracked-fn-ptr.rs
CommitLineData
dfeec247
XL
1// run-pass
2
3#![feature(track_caller)]
4
5fn ptr_call(f: fn()) {
6 f();
7}
8
9#[track_caller]
10fn tracked() {
11 let expected_line = line!() - 1;
12 let location = std::panic::Location::caller();
13 assert_eq!(location.file(), file!());
14 assert_eq!(location.line(), expected_line, "call shims report location as fn definition");
15}
16
ba9703b0
XL
17trait Trait {
18 fn trait_tracked();
19}
20
21impl Trait for () {
22 #[track_caller]
23 fn trait_tracked() {
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
31trait TrackedTrait {
32 #[track_caller]
33 fn trait_tracked_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
41impl TrackedTrait for () {}
42
43trait TraitBlanketTracked {
44 #[track_caller]
45 fn tracked_blanket();
46}
47
48impl TraitBlanketTracked 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
dfeec247
XL
57fn main() {
58 ptr_call(tracked);
ba9703b0
XL
59 ptr_call(<() as Trait>::trait_tracked);
60 ptr_call(<() as TrackedTrait>::trait_tracked_default);
61 ptr_call(<() as TraitBlanketTracked>::tracked_blanket);
dfeec247 62}