提交 e218da42 编写于 作者: A Adam Perry

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.
上级 eaccda00
......@@ -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 drop(&mut self) {
}
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);
......
// 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();
}
// run-pass
#![feature(const_fn, track_caller)]
#![feature(track_caller)]
use std::panic::Location;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册