Undo fn -> const fn for all intrinsics but assert_inhabited
This commit is contained in:
parent
f311db100b
commit
4f9fd2a5d4
@ -407,29 +407,13 @@ pub fn emulate_intrinsic(
|
|||||||
sym::transmute => {
|
sym::transmute => {
|
||||||
self.copy_op_transmute(args[0], dest)?;
|
self.copy_op_transmute(args[0], dest)?;
|
||||||
}
|
}
|
||||||
sym::assert_inhabited | sym::assert_zero_valid | sym::assert_uninit_valid => {
|
sym::assert_inhabited => {
|
||||||
let ty = instance.substs.type_at(0);
|
let ty = instance.substs.type_at(0);
|
||||||
let layout = self.layout_of(ty)?;
|
let layout = self.layout_of(ty)?;
|
||||||
|
|
||||||
if layout.abi.is_uninhabited() {
|
if layout.abi.is_uninhabited() {
|
||||||
throw_ub_format!("attempted to instantiate uninhabited type `{}`", ty);
|
throw_ub_format!("attempted to instantiate uninhabited type `{}`", ty);
|
||||||
}
|
}
|
||||||
if intrinsic_name == sym::assert_zero_valid
|
|
||||||
&& !layout.might_permit_raw_init(self, /*zero:*/ true).unwrap()
|
|
||||||
{
|
|
||||||
throw_ub_format!(
|
|
||||||
"attempted to zero-initialize type `{}`, which is invalid",
|
|
||||||
ty
|
|
||||||
);
|
|
||||||
}
|
|
||||||
if intrinsic_name == sym::assert_uninit_valid
|
|
||||||
&& !layout.might_permit_raw_init(self, /*zero:*/ false).unwrap()
|
|
||||||
{
|
|
||||||
throw_ub_format!(
|
|
||||||
"attempted to leave type `{}` uninitialized, which is invalid",
|
|
||||||
ty
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
sym::simd_insert => {
|
sym::simd_insert => {
|
||||||
let index = u64::from(self.read_scalar(args[1])?.to_u32()?);
|
let index = u64::from(self.read_scalar(args[1])?.to_u32()?);
|
||||||
|
@ -822,14 +822,12 @@
|
|||||||
/// zero-initialization: This will statically either panic, or do nothing.
|
/// zero-initialization: This will statically either panic, or do nothing.
|
||||||
///
|
///
|
||||||
/// This intrinsic does not have a stable counterpart.
|
/// This intrinsic does not have a stable counterpart.
|
||||||
#[rustc_const_unstable(feature = "const_assert_type", issue = "none")]
|
|
||||||
pub fn assert_zero_valid<T>();
|
pub fn assert_zero_valid<T>();
|
||||||
|
|
||||||
/// A guard for unsafe functions that cannot ever be executed if `T` has invalid
|
/// A guard for unsafe functions that cannot ever be executed if `T` has invalid
|
||||||
/// bit patterns: This will statically either panic, or do nothing.
|
/// bit patterns: This will statically either panic, or do nothing.
|
||||||
///
|
///
|
||||||
/// This intrinsic does not have a stable counterpart.
|
/// This intrinsic does not have a stable counterpart.
|
||||||
#[rustc_const_unstable(feature = "const_assert_type", issue = "none")]
|
|
||||||
pub fn assert_uninit_valid<T>();
|
pub fn assert_uninit_valid<T>();
|
||||||
|
|
||||||
/// Gets a reference to a static `Location` indicating where it was called.
|
/// Gets a reference to a static `Location` indicating where it was called.
|
||||||
|
Loading…
Reference in New Issue
Block a user