63 lines
1.6 KiB
Rust
63 lines
1.6 KiB
Rust
// run-pass
|
|
// revisions: default mir-opt
|
|
//[mir-opt] compile-flags: -Zmir-opt-level=4
|
|
|
|
fn ptr_call(f: fn()) {
|
|
f();
|
|
}
|
|
|
|
#[track_caller]
|
|
fn tracked() {
|
|
let expected_line = line!() - 1;
|
|
let location = std::panic::Location::caller();
|
|
assert_eq!(location.file(), file!());
|
|
assert_eq!(location.line(), expected_line, "call shims report location as fn definition");
|
|
}
|
|
|
|
trait Trait {
|
|
fn trait_tracked();
|
|
}
|
|
|
|
impl Trait for () {
|
|
#[track_caller]
|
|
fn trait_tracked() {
|
|
let expected_line = line!() - 1;
|
|
let location = std::panic::Location::caller();
|
|
assert_eq!(location.file(), file!());
|
|
assert_eq!(location.line(), expected_line, "call shims report location as fn definition");
|
|
}
|
|
}
|
|
|
|
trait TrackedTrait {
|
|
#[track_caller]
|
|
fn trait_tracked_default() {
|
|
let expected_line = line!() - 1;
|
|
let location = std::panic::Location::caller();
|
|
assert_eq!(location.file(), file!());
|
|
assert_eq!(location.line(), expected_line, "call shims report location as fn definition");
|
|
}
|
|
}
|
|
|
|
impl TrackedTrait for () {}
|
|
|
|
trait TraitBlanketTracked {
|
|
#[track_caller]
|
|
fn tracked_blanket();
|
|
}
|
|
|
|
impl TraitBlanketTracked for () {
|
|
fn tracked_blanket() {
|
|
let expected_line = line!() - 1;
|
|
let location = std::panic::Location::caller();
|
|
assert_eq!(location.file(), file!());
|
|
assert_eq!(location.line(), expected_line, "call shims report location as fn definition");
|
|
}
|
|
}
|
|
|
|
fn main() {
|
|
ptr_call(tracked);
|
|
ptr_call(<() as Trait>::trait_tracked);
|
|
ptr_call(<() as TrackedTrait>::trait_tracked_default);
|
|
ptr_call(<() as TraitBlanketTracked>::tracked_blanket);
|
|
}
|