// Ensure that a `#[track_caller]` function, returning `caller_location()`,
// which coerced (to a function pointer) and called, inside a `const fn`,
// in turn called, results in the same output irrespective of whether
// we're in a const or runtime context.

//@ run-pass
//@ compile-flags: -Z unleash-the-miri-inside-of-you

#![feature(core_intrinsics)]

type L = &'static std::panic::Location<'static>;

#[track_caller]
const fn attributed() -> L {
    std::intrinsics::caller_location()
}

const fn calling_attributed() -> L {
    // We need `-Z unleash-the-miri-inside-of-you` for this as we don't have `const fn` pointers.
    let ptr: fn() -> L = attributed;
    ptr()
}

fn main() {
    const CONSTANT: L = calling_attributed();
    let runtime = calling_attributed();

    assert_eq!(
        (runtime.file(), runtime.line(), runtime.column()),
        (CONSTANT.file(), CONSTANT.line(), CONSTANT.column()),
    );
}
