disable size asserts in the compiler when randomizing layouts

This commit is contained in:
The 8472 2022-09-02 20:17:20 +02:00
parent f3bc08adbd
commit 5bf8eeb9f3
8 changed files with 24 additions and 0 deletions

View File

@ -3569,6 +3569,7 @@ dependencies = [
"rustc_hir_pretty", "rustc_hir_pretty",
"rustc_hir_typeck", "rustc_hir_typeck",
"rustc_incremental", "rustc_incremental",
"rustc_index",
"rustc_infer", "rustc_infer",
"rustc_interface", "rustc_interface",
"rustc_lint", "rustc_lint",

View File

@ -30,5 +30,6 @@ features = ['unprefixed_malloc_on_supported_platforms']
jemalloc = ['dep:jemalloc-sys'] jemalloc = ['dep:jemalloc-sys']
llvm = ['rustc_driver_impl/llvm'] llvm = ['rustc_driver_impl/llvm']
max_level_info = ['rustc_driver_impl/max_level_info'] max_level_info = ['rustc_driver_impl/max_level_info']
rustc_randomized_layouts = ['rustc_driver_impl/rustc_randomized_layouts']
rustc_use_parallel_compiler = ['rustc_driver_impl/rustc_use_parallel_compiler'] rustc_use_parallel_compiler = ['rustc_driver_impl/rustc_use_parallel_compiler']
# tidy-alphabetical-end # tidy-alphabetical-end

View File

@ -23,6 +23,7 @@ rustc_hir_analysis = { path = "../rustc_hir_analysis" }
rustc_hir_pretty = { path = "../rustc_hir_pretty" } rustc_hir_pretty = { path = "../rustc_hir_pretty" }
rustc_hir_typeck = { path = "../rustc_hir_typeck" } rustc_hir_typeck = { path = "../rustc_hir_typeck" }
rustc_incremental = { path = "../rustc_incremental" } rustc_incremental = { path = "../rustc_incremental" }
rustc_index = { path = "../rustc_index" }
rustc_infer = { path = "../rustc_infer" } rustc_infer = { path = "../rustc_infer" }
rustc_interface = { path = "../rustc_interface" } rustc_interface = { path = "../rustc_interface" }
rustc_lint = { path = "../rustc_lint" } rustc_lint = { path = "../rustc_lint" }
@ -72,6 +73,10 @@ ctrlc = "3.4.4"
# tidy-alphabetical-start # tidy-alphabetical-start
llvm = ['rustc_interface/llvm'] llvm = ['rustc_interface/llvm']
max_level_info = ['rustc_log/max_level_info'] max_level_info = ['rustc_log/max_level_info']
rustc_randomized_layouts = [
'rustc_index/rustc_randomized_layouts',
'rustc_middle/rustc_randomized_layouts'
]
rustc_use_parallel_compiler = [ rustc_use_parallel_compiler = [
'rustc_data_structures/rustc_use_parallel_compiler', 'rustc_data_structures/rustc_use_parallel_compiler',
'rustc_interface/rustc_use_parallel_compiler', 'rustc_interface/rustc_use_parallel_compiler',

View File

@ -20,4 +20,5 @@ nightly = [
"dep:rustc_macros", "dep:rustc_macros",
"rustc_index_macros/nightly", "rustc_index_macros/nightly",
] ]
rustc_randomized_layouts = []
# tidy-alphabetical-end # tidy-alphabetical-end

View File

@ -33,8 +33,19 @@
/// ///
/// </div> /// </div>
#[macro_export] #[macro_export]
#[cfg(not(feature = "rustc_randomized_layouts"))]
macro_rules! static_assert_size { macro_rules! static_assert_size {
($ty:ty, $size:expr) => { ($ty:ty, $size:expr) => {
const _: [(); $size] = [(); ::std::mem::size_of::<$ty>()]; const _: [(); $size] = [(); ::std::mem::size_of::<$ty>()];
}; };
} }
#[macro_export]
#[cfg(feature = "rustc_randomized_layouts")]
macro_rules! static_assert_size {
($ty:ty, $size:expr) => {
// no effect other than using the statements.
// struct sizes are not deterministic under randomized layouts
const _: (usize, usize) = ($size, ::std::mem::size_of::<$ty>());
};
}

View File

@ -40,5 +40,6 @@ tracing = "0.1"
[features] [features]
# tidy-alphabetical-start # tidy-alphabetical-start
rustc_randomized_layouts = []
rustc_use_parallel_compiler = ["dep:rustc-rayon-core"] rustc_use_parallel_compiler = ["dep:rustc-rayon-core"]
# tidy-alphabetical-end # tidy-alphabetical-end

View File

@ -337,6 +337,7 @@ pub fn provided_to_erased<'tcx>(
// Ensure that values grow no larger than 64 bytes by accident. // Ensure that values grow no larger than 64 bytes by accident.
// Increase this limit if necessary, but do try to keep the size low if possible // Increase this limit if necessary, but do try to keep the size low if possible
#[cfg(target_pointer_width = "64")] #[cfg(target_pointer_width = "64")]
#[cfg(not(feature = "rustc_randomized_layouts"))]
const _: () = { const _: () = {
if mem::size_of::<Value<'static>>() > 64 { if mem::size_of::<Value<'static>>() > 64 {
panic!("{}", concat!( panic!("{}", concat!(

View File

@ -678,6 +678,9 @@ fn rustc_features(&self, kind: Kind, target: TargetSelection) -> String {
if self.config.rustc_parallel { if self.config.rustc_parallel {
features.push("rustc_use_parallel_compiler"); features.push("rustc_use_parallel_compiler");
} }
if self.config.rust_randomize_layout {
features.push("rustc_randomized_layouts");
}
// If debug logging is on, then we want the default for tracing: // If debug logging is on, then we want the default for tracing:
// https://github.com/tokio-rs/tracing/blob/3dd5c03d907afdf2c39444a29931833335171554/tracing/src/level_filters.rs#L26 // https://github.com/tokio-rs/tracing/blob/3dd5c03d907afdf2c39444a29931833335171554/tracing/src/level_filters.rs#L26