diff options
| author | The 8472 <git@infinite-source.de> | 2024-08-31 14:43:23 +0200 |
|---|---|---|
| committer | The 8472 <git@infinite-source.de> | 2024-08-31 23:56:45 +0200 |
| commit | df20808f4dc7828c0f78cd17c3bd9edbd499d6f3 (patch) | |
| tree | f824bfc9d7d8675d763efecd3c19f826e5bde363 /compiler/rustc_middle/src | |
| parent | 1e377c5b9fd820d97d7fa3f0447c1c45b5fb64c7 (diff) | |
| download | rust-df20808f4dc7828c0f78cd17c3bd9edbd499d6f3.tar.gz rust-df20808f4dc7828c0f78cd17c3bd9edbd499d6f3.zip | |
inhibit layout randomization for Box
Diffstat (limited to 'compiler/rustc_middle/src')
| -rw-r--r-- | compiler/rustc_middle/src/ty/mod.rs | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/compiler/rustc_middle/src/ty/mod.rs b/compiler/rustc_middle/src/ty/mod.rs index e41ea7507ef..874e75f7179 100644 --- a/compiler/rustc_middle/src/ty/mod.rs +++ b/compiler/rustc_middle/src/ty/mod.rs @@ -35,6 +35,7 @@ use rustc_data_structures::tagged_ptr::CopyTaggedPtr; use rustc_errors::{Diag, ErrorGuaranteed, StashKey}; use rustc_hir::def::{CtorKind, CtorOf, DefKind, DocLinkResMap, LifetimeRes, Res}; use rustc_hir::def_id::{CrateNum, DefId, DefIdMap, LocalDefId, LocalDefIdMap}; +use rustc_hir::LangItem; use rustc_index::IndexVec; use rustc_macros::{ extension, Decodable, Encodable, HashStable, TyDecodable, TyEncodable, TypeFoldable, @@ -1570,8 +1571,15 @@ impl<'tcx> TyCtxt<'tcx> { flags.insert(ReprFlags::RANDOMIZE_LAYOUT); } + // box is special, on the one hand the compiler assumes an ordered layout, with the pointer + // always at offset zero. On the other hand we want scalar abi optimizations. + let is_box = self.is_lang_item(did.to_def_id(), LangItem::OwnedBox); + // This is here instead of layout because the choice must make it into metadata. - if !self.consider_optimizing(|| format!("Reorder fields of {:?}", self.def_path_str(did))) { + if is_box + || !self + .consider_optimizing(|| format!("Reorder fields of {:?}", self.def_path_str(did))) + { flags.insert(ReprFlags::IS_LINEAR); } |
