Auto merge of #136201 - davidv1992:eliminate-field-offset-alt, r= · rust-lang/rust@3da1435 (original) (raw)

7 files changed

lines changed

Original file line number Diff line number Diff line change
@@ -1195,16 +1195,6 @@ version = "2.3.0"
1195 1195 source = "registry+https://github.com/rust-lang/crates.io-index"
1196 1196 checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be"
1197 1197
1198 -[[package]]
1199 -name = "field-offset"
1200 -version = "0.3.6"
1201 -source = "registry+https://github.com/rust-lang/crates.io-index"
1202 -checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f"
1203 -dependencies = [
1204 -"memoffset",
1205 -"rustc_version",
1206 -]
1207 -
1208 1198 [[package]]
1209 1199 name = "filetime"
1210 1200 version = "0.2.25"
@@ -2269,15 +2259,6 @@ dependencies = [
2269 2259 "libc",
2270 2260 ]
2271 2261
2272 -[[package]]
2273 -name = "memoffset"
2274 -version = "0.9.1"
2275 -source = "registry+https://github.com/rust-lang/crates.io-index"
2276 -checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a"
2277 -dependencies = [
2278 -"autocfg",
2279 -]
2280 -
2281 2262 [[package]]
2282 2263 name = "mime"
2283 2264 version = "0.3.17"
@@ -4119,7 +4100,6 @@ version = "0.0.0"
4119 4100 dependencies = [
4120 4101 "bitflags",
4121 4102 "either",
4122 -"field-offset",
4123 4103 "gsgdt",
4124 4104 "polonius-engine",
4125 4105 "rustc-rayon-core",
@@ -4365,7 +4345,6 @@ dependencies = [
4365 4345 name = "rustc_query_impl"
4366 4346 version = "0.0.0"
4367 4347 dependencies = [
4368 -"field-offset",
4369 4348 "measureme",
4370 4349 "rustc_data_structures",
4371 4350 "rustc_errors",
Original file line number Diff line number Diff line change
@@ -7,7 +7,6 @@ edition = "2021"
7 7 # tidy-alphabetical-start
8 8 bitflags = "2.4.1"
9 9 either = "1.5.0"
10 -field-offset = "0.3.5"
11 10 gsgdt = "0.1.2"
12 11 polonius-engine = "0.13.0"
13 12 rustc-rayon-core = { version = "0.5.0" }
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
1 1 use std::ops::Deref;
2 2
3 -use field_offset::FieldOffset;
4 3 use rustc_data_structures::sync::{AtomicU64, WorkerLocal};
5 4 use rustc_hir::def_id::{DefId, LocalDefId};
6 5 use rustc_hir::hir_id::OwnerId;
@@ -24,8 +23,8 @@ pub struct DynamicQuery<'tcx, C: QueryCache> {
24 23 pub eval_always: bool,
25 24 pub dep_kind: DepKind,
26 25 pub handle_cycle_error: HandleCycleError,
27 -pub query_state: FieldOffset<QueryStates<'tcx>, QueryState<C::Key>>,
28 -pub query_cache: FieldOffset<QueryCaches<'tcx>, C>,
26 +pub query_state: usize,
27 +pub query_cache: usize,
29 28 pub cache_on_disk: fn(tcx: TyCtxt<'tcx>, key: &C::Key) -> bool,
30 29 pub execute_query: fn(tcx: TyCtxt<'tcx>, k: C::Key) -> C::Value,
31 30 pub compute: fn(tcx: TyCtxt<'tcx>, key: C::Key) -> C::Value,
Original file line number Diff line number Diff line change
@@ -5,7 +5,6 @@ edition = "2021"
5 5
6 6 [dependencies]
7 7 # tidy-alphabetical-start
8 -field-offset = "0.3.5"
9 8 measureme = "11"
10 9 rustc_data_structures = { path = "../rustc_data_structures" }
11 10 rustc_errors = { path = "../rustc_errors" }
Original file line number Diff line number Diff line change
@@ -11,7 +11,6 @@
11 11 #![warn(unreachable_pub)]
12 12 // tidy-alphabetical-end
13 13
14 -use field_offset::offset_of;
15 14 use rustc_data_structures::stable_hasher::HashStable;
16 15 use rustc_data_structures::sync::AtomicU64;
17 16 use rustc_middle::arena::Arena;
@@ -89,15 +88,27 @@ where
89 88 where
90 89 QueryCtxt<'tcx>: 'a,
91 90 {
92 -self.dynamic.query_state.apply(&qcx.tcx.query_system.states)
91 +// Safety:
92 +// This is just manually doing the subfield referencing through pointer math.
93 +unsafe {
94 +&*(&qcx.tcx.query_system.states as *const QueryStates<'tcx>)
95 +.byte_add(self.dynamic.query_state)
96 +.cast::<QueryStateSelf::Key\>()
97 +}
93 98 }
94 99
95 100 #[inline(always)]
96 101 fn query_cache<'a>(self, qcx: QueryCtxt<'tcx>) -> &'a Self::Cache
97 102 where
98 103 'tcx: 'a,
99 104 {
100 -self.dynamic.query_cache.apply(&qcx.tcx.query_system.caches)
105 +// Safety:
106 +// This is just manually doing the subfield referencing through pointer math.
107 +unsafe {
108 +&*(&qcx.tcx.query_system.caches as *const QueryCaches<'tcx>)
109 +.byte_add(self.dynamic.query_cache)
110 +.cast::Self::Cache\()
111 +}
101 112 }
102 113
103 114 #[inline(always)]
Original file line number Diff line number Diff line change
@@ -605,8 +605,8 @@ macro_rules! define_queries {
605 605 eval_always: is_eval_always!([$($modifiers)*]),
606 606 dep_kind: dep_graph::dep_kinds::$name,
607 607 handle_cycle_error: handle_cycle_error!([$($modifiers)*]),
608 - query_state: offset_of!(QueryStates<'tcx> => $name),
609 - query_cache: offset_of!(QueryCaches<'tcx> => $name),
608 + query_state: std::mem::offset_of!(QueryStates<'tcx>, $name),
609 + query_cache: std::mem::offset_of!(QueryCaches<'tcx>, $name),
610 610 cache_on_disk: |tcx, key
611 611 execute_query: |tcx, key
612 612 compute: |tcx, key
Original file line number Diff line number Diff line change
@@ -285,7 +285,6 @@ const PERMITTED_RUSTC_DEPENDENCIES: &[&str] = &[
285 285 "expect-test",
286 286 "fallible-iterator", // dependency of `thorin`
287 287 "fastrand",
288 -"field-offset",
289 288 "flate2",
290 289 "fluent-bundle",
291 290 "fluent-langneg",
@@ -327,7 +326,6 @@ const PERMITTED_RUSTC_DEPENDENCIES: &[&str] = &[
327 326 "measureme",
328 327 "memchr",
329 328 "memmap2",
330 -"memoffset",
331 329 "miniz_oxide",
332 330 "nix",
333 331 "nu-ansi-term",
@@ -367,14 +365,12 @@ const PERMITTED_RUSTC_DEPENDENCIES: &[&str] = &[
367 365 "rustc-rayon-core",
368 366 "rustc-stable-hash",
369 367 "rustc_apfloat",
370 -"rustc_version",
371 368 "rustix",
372 369 "ruzstd", // via object in thorin-dwp
373 370 "ryu",
374 371 "scoped-tls",
375 372 "scopeguard",
376 373 "self_cell",
377 -"semver",
378 374 "serde",
379 375 "serde_derive",
380 376 "serde_json",