Skip to content

Commit 453e919

Browse files
committed
Avoid the assertion in erase
1 parent 36b4199 commit 453e919

File tree

2 files changed

+8
-8
lines changed

2 files changed

+8
-8
lines changed

compiler/rustc_middle/src/lib.rs

+1
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
#![feature(generators)]
3434
#![feature(get_mut_unchecked)]
3535
#![feature(if_let_guard)]
36+
#![feature(inline_const)]
3637
#![feature(iter_from_generator)]
3738
#![feature(local_key_cell_methods)]
3839
#![feature(negative_impls)]

compiler/rustc_middle/src/query/erase.rs

+7-8
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
use crate::ty;
2-
use std::intrinsics::type_name;
32
use std::mem::{size_of, transmute_copy, MaybeUninit};
43

54
#[derive(Copy, Clone)]
@@ -17,13 +16,13 @@ pub type Erase<T: Copy + EraseType> = Erased<impl Copy>;
1716

1817
#[inline(always)]
1918
pub fn erase<T: EraseType>(src: T) -> Erase<T> {
20-
assert_eq!(
21-
size_of::<T>(),
22-
size_of::<T::Result>(),
23-
"size of {} must match erased type {}",
24-
type_name::<T>(),
25-
type_name::<T::Result>()
26-
);
19+
// Ensure the sizes match
20+
const {
21+
if std::mem::size_of::<T>() != std::mem::size_of::<T::Result>() {
22+
panic!("size of T must match erased type T::Result")
23+
}
24+
};
25+
2726
Erased::<<T as EraseType>::Result> {
2827
// SAFETY: Is it safe to transmute to MaybeUninit for types with the same sizes.
2928
data: unsafe { transmute_copy(&src) },

0 commit comments

Comments
 (0)