2020-01-16 18:58:32 -08:00
|
|
|
// run-pass
|
2020-02-08 23:46:57 +02:00
|
|
|
// revisions: default mir-opt
|
2021-03-04 10:21:13 -03:00
|
|
|
//[mir-opt] compile-flags: -Zmir-opt-level=4
|
2020-01-16 18:58:32 -08:00
|
|
|
|
|
|
|
fn ptr_call(f: fn()) {
|
|
|
|
f();
|
|
|
|
}
|
|
|
|
|
|
|
|
#[track_caller]
|
|
|
|
fn tracked() {
|
2020-01-19 14:25:43 -08:00
|
|
|
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");
|
2020-01-16 18:58:32 -08:00
|
|
|
}
|
|
|
|
|
2020-02-17 15:36:36 -08:00
|
|
|
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");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-01-16 18:58:32 -08:00
|
|
|
fn main() {
|
|
|
|
ptr_call(tracked);
|
2020-02-17 15:36:36 -08:00
|
|
|
ptr_call(<() as Trait>::trait_tracked);
|
|
|
|
ptr_call(<() as TrackedTrait>::trait_tracked_default);
|
|
|
|
ptr_call(<() as TraitBlanketTracked>::tracked_blanket);
|
2020-01-16 18:58:32 -08:00
|
|
|
}
|