Test cleanups to match #[track_caller] in panic!.
* Removes unnecessary feature flag from track_caller test. * Tests of panic internals no longer need to explicitly construct Location. * Add #![warn(const_err)] to retain-never-const per @oli-obk. * Add track_caller test with diverging function.
This commit is contained in:
parent
eaccda009f
commit
e218da4251
|
@ -6,6 +6,7 @@
|
|||
|
||||
#![feature(const_panic)]
|
||||
#![feature(never_type)]
|
||||
#![warn(const_err)]
|
||||
|
||||
struct PrintName<T>(T);
|
||||
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
//[thin]compile-flags: -C lto=thin
|
||||
//[fat]compile-flags: -C lto=fat
|
||||
|
||||
#![feature(core_panic, panic_internals)]
|
||||
#![feature(core_panic)]
|
||||
|
||||
// (For some reason, reproducing the LTO issue requires pulling in std
|
||||
// explicitly this way.)
|
||||
|
@ -50,9 +50,7 @@ fn main() {
|
|||
}
|
||||
|
||||
let _guard = Droppable;
|
||||
let s = "issue-64655-allow-unwind-when-calling-panic-directly.rs";
|
||||
let location = core::panic::Location::internal_constructor(s, 17, 4);
|
||||
core::panicking::panic("???", &location);
|
||||
core::panicking::panic("???");
|
||||
});
|
||||
|
||||
let wait = handle.join();
|
||||
|
|
|
@ -4,16 +4,16 @@
|
|||
|
||||
#[inline(never)]
|
||||
#[track_caller]
|
||||
fn defeat_const_prop() -> &'static core::panic::Location<'static> {
|
||||
fn codegen_caller_loc() -> &'static core::panic::Location<'static> {
|
||||
core::panic::Location::caller()
|
||||
}
|
||||
|
||||
macro_rules! caller_location_from_macro {
|
||||
() => (defeat_const_prop());
|
||||
() => (codegen_caller_loc());
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let loc = defeat_const_prop();
|
||||
let loc = codegen_caller_loc();
|
||||
assert_eq!(loc.file(), file!());
|
||||
assert_eq!(loc.line(), 16);
|
||||
assert_eq!(loc.column(), 15);
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
// run-fail
|
||||
|
||||
//! This test ensures that `#[track_caller]` can be applied directly to diverging functions, as
|
||||
//! the tracking issue says: https://github.com/rust-lang/rust/issues/47809#issue-292138490.
|
||||
//! Because the annotated function must diverge and a panic keeps that faster than an infinite loop,
|
||||
//! we don't inspect the location returned -- it would be difficult to distinguish between the
|
||||
//! explicit panic and a failed assertion. That it compiles and runs is enough for this one.
|
||||
|
||||
#![feature(track_caller)]
|
||||
|
||||
#[track_caller]
|
||||
fn doesnt_return() -> ! {
|
||||
let _location = core::panic::Location::caller();
|
||||
panic!("huzzah");
|
||||
}
|
||||
|
||||
fn main() {
|
||||
doesnt_return();
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
// run-pass
|
||||
|
||||
#![feature(const_fn, track_caller)]
|
||||
#![feature(track_caller)]
|
||||
|
||||
use std::panic::Location;
|
||||
|
||||
|
|
Loading…
Reference in New Issue