Overcome Sync issues with non-parallel compiler
Per Mark's recommendation at: https://github.com/rust-lang/rust/pull/78963#issuecomment-725790071
This commit is contained in:
parent
bd0eb07af2
commit
eb9f2bb3b0
2 changed files with 22 additions and 9 deletions
|
@ -611,6 +611,18 @@ pub struct TyS<'tcx> {
|
||||||
outer_exclusive_binder: ty::DebruijnIndex,
|
outer_exclusive_binder: ty::DebruijnIndex,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<'tcx> TyS<'tcx> {
|
||||||
|
/// A constructor used only for internal testing.
|
||||||
|
#[allow(rustc::usage_of_ty_tykind)]
|
||||||
|
pub fn make_for_test(
|
||||||
|
kind: TyKind<'tcx>,
|
||||||
|
flags: TypeFlags,
|
||||||
|
outer_exclusive_binder: ty::DebruijnIndex,
|
||||||
|
) -> TyS<'tcx> {
|
||||||
|
TyS { kind, flags, outer_exclusive_binder }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// `TyS` is used a lot. Make sure it doesn't unintentionally get bigger.
|
// `TyS` is used a lot. Make sure it doesn't unintentionally get bigger.
|
||||||
#[cfg(target_arch = "x86_64")]
|
#[cfg(target_arch = "x86_64")]
|
||||||
static_assert_size!(TyS<'_>, 32);
|
static_assert_size!(TyS<'_>, 32);
|
||||||
|
|
|
@ -7,18 +7,19 @@ use rustc_data_structures::graph::WithNumNodes;
|
||||||
use rustc_data_structures::graph::WithSuccessors;
|
use rustc_data_structures::graph::WithSuccessors;
|
||||||
use rustc_index::vec::{Idx, IndexVec};
|
use rustc_index::vec::{Idx, IndexVec};
|
||||||
use rustc_middle::mir::*;
|
use rustc_middle::mir::*;
|
||||||
use rustc_middle::ty::{self, TyS};
|
use rustc_middle::ty::{self, DebruijnIndex, TyS, TypeFlags};
|
||||||
use rustc_span::DUMMY_SP;
|
use rustc_span::DUMMY_SP;
|
||||||
|
|
||||||
use std::lazy::SyncOnceCell;
|
fn dummy_ty() -> &'static TyS<'static> {
|
||||||
|
thread_local! {
|
||||||
|
static DUMMY_TYS: &'static TyS<'static> = Box::leak(box TyS::make_for_test(
|
||||||
|
ty::Bool,
|
||||||
|
TypeFlags::empty(),
|
||||||
|
DebruijnIndex::from_usize(0),
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
fn dummy_ty<'tcx>() -> &'static TyS<'tcx> {
|
&DUMMY_TYS.with(|tys| *tys)
|
||||||
static DUMMY_TYS: SyncOnceCell<TyS<'_>> = SyncOnceCell::new();
|
|
||||||
|
|
||||||
&DUMMY_TYS.get_or_init(|| {
|
|
||||||
let fake_type_bytes = vec![0 as u8; std::mem::size_of::<TyS<'_>>()];
|
|
||||||
unsafe { std::ptr::read_unaligned::<TyS<'_>>(fake_type_bytes.as_ptr() as *const TyS<'_>) }
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
struct MockBlocks<'tcx> {
|
struct MockBlocks<'tcx> {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue