mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-26 16:54:01 +00:00
Fix const core::panic!(non_literal_str).
This commit is contained in:
parent
500ddc5efd
commit
4f7ffbf351
@ -263,6 +263,7 @@ language_item_table! {
|
|||||||
// is required to define it somewhere. Additionally, there are restrictions on crates that use
|
// is required to define it somewhere. Additionally, there are restrictions on crates that use
|
||||||
// a weak lang item, but do not have it defined.
|
// a weak lang item, but do not have it defined.
|
||||||
Panic, sym::panic, panic_fn, Target::Fn;
|
Panic, sym::panic, panic_fn, Target::Fn;
|
||||||
|
PanicStr, sym::panic_str, panic_str, Target::Fn;
|
||||||
PanicBoundsCheck, sym::panic_bounds_check, panic_bounds_check_fn, Target::Fn;
|
PanicBoundsCheck, sym::panic_bounds_check, panic_bounds_check_fn, Target::Fn;
|
||||||
PanicInfo, sym::panic_info, panic_info, Target::Struct;
|
PanicInfo, sym::panic_info, panic_info, Target::Struct;
|
||||||
PanicLocation, sym::panic_location, panic_location, Target::Struct;
|
PanicLocation, sym::panic_location, panic_location, Target::Struct;
|
||||||
|
@ -70,9 +70,10 @@ impl<'mir, 'tcx> InterpCx<'mir, 'tcx, CompileTimeInterpreter<'mir, 'tcx>> {
|
|||||||
) -> InterpResult<'tcx> {
|
) -> InterpResult<'tcx> {
|
||||||
let def_id = instance.def_id();
|
let def_id = instance.def_id();
|
||||||
if Some(def_id) == self.tcx.lang_items().panic_fn()
|
if Some(def_id) == self.tcx.lang_items().panic_fn()
|
||||||
|
|| Some(def_id) == self.tcx.lang_items().panic_str()
|
||||||
|| Some(def_id) == self.tcx.lang_items().begin_panic_fn()
|
|| Some(def_id) == self.tcx.lang_items().begin_panic_fn()
|
||||||
{
|
{
|
||||||
// &'static str
|
// &str
|
||||||
assert!(args.len() == 1);
|
assert!(args.len() == 1);
|
||||||
|
|
||||||
let msg_place = self.deref_operand(args[0])?;
|
let msg_place = self.deref_operand(args[0])?;
|
||||||
|
@ -74,7 +74,9 @@ impl ConstCx<'mir, 'tcx> {
|
|||||||
|
|
||||||
/// Returns `true` if this `DefId` points to one of the official `panic` lang items.
|
/// Returns `true` if this `DefId` points to one of the official `panic` lang items.
|
||||||
pub fn is_lang_panic_fn(tcx: TyCtxt<'tcx>, def_id: DefId) -> bool {
|
pub fn is_lang_panic_fn(tcx: TyCtxt<'tcx>, def_id: DefId) -> bool {
|
||||||
Some(def_id) == tcx.lang_items().panic_fn() || Some(def_id) == tcx.lang_items().begin_panic_fn()
|
Some(def_id) == tcx.lang_items().panic_fn()
|
||||||
|
|| Some(def_id) == tcx.lang_items().panic_str()
|
||||||
|
|| Some(def_id) == tcx.lang_items().begin_panic_fn()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn allow_internal_unstable(tcx: TyCtxt<'tcx>, def_id: DefId, feature_gate: Symbol) -> bool {
|
pub fn allow_internal_unstable(tcx: TyCtxt<'tcx>, def_id: DefId, feature_gate: Symbol) -> bool {
|
||||||
|
@ -777,6 +777,7 @@ symbols! {
|
|||||||
panic_info,
|
panic_info,
|
||||||
panic_location,
|
panic_location,
|
||||||
panic_runtime,
|
panic_runtime,
|
||||||
|
panic_str,
|
||||||
panic_unwind,
|
panic_unwind,
|
||||||
param_attrs,
|
param_attrs,
|
||||||
parent_trait,
|
parent_trait,
|
||||||
|
@ -10,7 +10,7 @@ macro_rules! panic {
|
|||||||
$crate::panicking::panic($msg)
|
$crate::panicking::panic($msg)
|
||||||
);
|
);
|
||||||
($msg:expr) => (
|
($msg:expr) => (
|
||||||
$crate::panic!("{}", $crate::convert::identity::<&str>($msg))
|
$crate::panicking::panic_str($msg)
|
||||||
);
|
);
|
||||||
($msg:expr,) => (
|
($msg:expr,) => (
|
||||||
$crate::panic!($msg)
|
$crate::panic!($msg)
|
||||||
|
@ -50,6 +50,13 @@ pub fn panic(expr: &'static str) -> ! {
|
|||||||
panic_fmt(fmt::Arguments::new_v1(&[expr], &[]));
|
panic_fmt(fmt::Arguments::new_v1(&[expr], &[]));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
#[track_caller]
|
||||||
|
#[cfg_attr(not(bootstrap), lang = "panic_str")] // needed for const-evaluated panics
|
||||||
|
pub fn panic_str(expr: &str) -> ! {
|
||||||
|
panic_fmt(format_args!("{}", expr));
|
||||||
|
}
|
||||||
|
|
||||||
#[cold]
|
#[cold]
|
||||||
#[cfg_attr(not(feature = "panic_immediate_abort"), inline(never))]
|
#[cfg_attr(not(feature = "panic_immediate_abort"), inline(never))]
|
||||||
#[track_caller]
|
#[track_caller]
|
||||||
|
Loading…
Reference in New Issue
Block a user