Skip to content

Commit 24c04d5

Browse files
moar checkpointing
1 parent 4e5405f commit 24c04d5

5 files changed

Lines changed: 28 additions & 31 deletions

File tree

Cargo.lock

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4288,7 +4288,6 @@ dependencies = [
42884288
"rustc_macros",
42894289
"rustc_middle",
42904290
"rustc_proc_macro",
4291-
"rustc_query_system",
42924291
"rustc_serialize",
42934292
"rustc_session",
42944293
"rustc_span",

compiler/rustc_metadata/Cargo.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ rustc_middle = { path = "../rustc_middle" }
2525
# We must use the proc_macro version that we will compile proc-macros against,
2626
# not the one from our own sysroot.
2727
rustc_proc_macro = { path = "../rustc_proc_macro" }
28-
rustc_query_system = { path = "../rustc_query_system" }
2928
rustc_serialize = { path = "../rustc_serialize" }
3029
rustc_session = { path = "../rustc_session" }
3130
rustc_span = { path = "../rustc_span" }

compiler/rustc_metadata/src/rmeta/encoder.rs

Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use std::sync::Arc;
88
use rustc_data_structures::fx::{FxIndexMap, FxIndexSet};
99
use rustc_data_structures::memmap::{Mmap, MmapMut};
1010
use rustc_data_structures::stable_hasher::{HashStable, StableHasher};
11-
use rustc_data_structures::sync::{join, par_for_each_in};
11+
use rustc_data_structures::sync::{par_for_each_in, par_join};
1212
use rustc_data_structures::temp_dir::MaybeTempDir;
1313
use rustc_data_structures::thousands::usize_with_underscores;
1414
use rustc_feature::Features;
@@ -19,6 +19,7 @@ use rustc_hir::definitions::DefPathData;
1919
use rustc_hir::find_attr;
2020
use rustc_hir_pretty::id_to_string;
2121
use rustc_middle::dep_graph::WorkProductId;
22+
use rustc_middle::ich::StableHashingContext;
2223
use rustc_middle::middle::dependency_format::Linkage;
2324
use rustc_middle::mir::interpret;
2425
use rustc_middle::query::Providers;
@@ -27,7 +28,6 @@ use rustc_middle::ty::AssocContainer;
2728
use rustc_middle::ty::codec::TyEncoder;
2829
use rustc_middle::ty::fast_reject::{self, TreatParams};
2930
use rustc_middle::{bug, span_bug};
30-
use rustc_query_system::ich::StableHashingContext;
3131
use rustc_serialize::{Decodable, Decoder, Encodable, Encoder, opaque};
3232
use rustc_session::config::{CrateType, OptLevel, TargetModifier};
3333
use rustc_span::hygiene::HygieneEncodeContext;
@@ -42,7 +42,7 @@ use crate::errors::{FailCreateFileEncoder, FailWriteFile};
4242
use crate::rmeta::*;
4343

4444
// Struct to enable split borrows.
45-
struct ContextEncoder<'a> {
45+
pub(super) struct ContextEncoder<'a> {
4646
opaque: opaque::FileEncoder,
4747
stable_hasher: StableHasher,
4848
hcx: StableHashingContext<'a>,
@@ -120,9 +120,17 @@ impl<'a> Encoder for ContextEncoder<'a> {
120120

121121
impl<'a> ContextEncoder<'a> {
122122
#[inline]
123-
fn position(&self) -> usize {
123+
pub(super) fn position(&self) -> usize {
124124
self.opaque.position()
125125
}
126+
127+
pub(super) fn write_m_with<const N: usize>(&mut self, b: &[u8; N], m: usize) {
128+
(b[..m]).hash_stable(&mut self.hcx, &mut self.stable_hasher);
129+
self.opaque.write_with(|dest| {
130+
*dest = *b;
131+
m
132+
});
133+
}
126134
}
127135

128136
macro_rules! encoder_methods {
@@ -194,11 +202,6 @@ impl<'a, 'tcx> SpanEncoder for EncodeContext<'a, 'tcx> {
194202
}
195203

196204
fn encode_def_id(&mut self, def_id: DefId) {
197-
HashStable::<StableHashingContext<'_>>::hash_stable(
198-
&def_id,
199-
&mut self.encoder.hcx,
200-
&mut self.encoder.stable_hasher,
201-
);
202205
def_id.krate.encode(self);
203206
def_id.index.encode(self);
204207
}
@@ -231,17 +234,15 @@ impl<'a, 'tcx> SpanEncoder for EncodeContext<'a, 'tcx> {
231234
if offset < last_location {
232235
let needed = bytes_needed(offset);
233236
SpanTag::indirect(true, needed as u8).encode(self);
234-
self.encoder.opaque.write_with(|dest| {
235-
*dest = offset.to_le_bytes();
236-
needed
237-
});
237+
self.encoder.write_m_with(&offset.to_le_bytes(), needed);
238+
offset.hash_stable(&mut self.encoder.hcx, &mut self.encoder.stable_hasher);
238239
} else {
239240
let needed = bytes_needed(last_location);
240241
SpanTag::indirect(false, needed as u8).encode(self);
241-
self.encoder.opaque.write_with(|dest| {
242-
*dest = last_location.to_le_bytes();
243-
needed
244-
});
242+
self.encoder.write_m_with(&last_location.to_le_bytes(), needed);
243+
244+
last_location
245+
.hash_stable(&mut self.encoder.hcx, &mut self.encoder.stable_hasher);
245246
}
246247
}
247248
Entry::Vacant(v) => {
@@ -648,7 +649,7 @@ impl<'a, 'tcx> EncodeContext<'a, 'tcx> {
648649
adapted.set_some(on_disk_index, self.lazy(adapted_source_file));
649650
}
650651

651-
adapted.encode(&mut self.encoder.opaque)
652+
adapted.encode(&mut self.encoder)
652653
}
653654

654655
fn encode_crate_root(&mut self) -> LazyValue<CrateRoot> {
@@ -732,7 +733,7 @@ impl<'a, 'tcx> EncodeContext<'a, 'tcx> {
732733
// encode_def_path_table.
733734
let proc_macro_data = stat!("proc-macro-data", || self.encode_proc_macros());
734735

735-
let tables = stat!("tables", || self.tables.encode(&mut self.encoder.opaque));
736+
let tables = stat!("tables", || self.tables.encode(&mut self.encoder));
736737

737738
let debugger_visualizers =
738739
stat!("debugger-visualizers", || self.encode_debugger_visualizers());
@@ -2018,9 +2019,9 @@ impl<'a, 'tcx> EncodeContext<'a, 'tcx> {
20182019
);
20192020

20202021
(
2021-
syntax_contexts.encode(&mut self.encoder.opaque),
2022-
expn_data_table.encode(&mut self.encoder.opaque),
2023-
expn_hash_table.encode(&mut self.encoder.opaque),
2022+
syntax_contexts.encode(&mut self.encoder),
2023+
expn_data_table.encode(&mut self.encoder),
2024+
expn_hash_table.encode(&mut self.encoder),
20242025
)
20252026
}
20262027

compiler/rustc_metadata/src/rmeta/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ use rustc_middle::mir::ConstValue;
3535
use rustc_middle::ty::fast_reject::SimplifiedType;
3636
use rustc_middle::ty::{self, Ty, TyCtxt};
3737
use rustc_middle::util::Providers;
38-
use rustc_serialize::opaque::FileEncoder;
3938
use rustc_session::config::{SymbolManglingVersion, TargetModifier};
4039
use rustc_session::cstore::{CrateDepKind, ForeignModule, LinkagePreference, NativeLib};
4140
use rustc_span::edition::Edition;
@@ -46,6 +45,7 @@ use table::TableBuilder;
4645

4746
use crate::creader::CrateMetadataRef;
4847
use crate::eii::EiiMapEncodedKeyValue;
48+
use crate::rmeta::encoder::ContextEncoder;
4949

5050
mod decoder;
5151
mod def_path_hash_map;
@@ -367,7 +367,7 @@ macro_rules! define_tables {
367367
}
368368

369369
impl TableBuilders {
370-
fn encode(&self, buf: &mut FileEncoder) -> LazyTables {
370+
fn encode(&self, buf: &mut ContextEncoder<'_>) -> LazyTables {
371371
LazyTables {
372372
$($name1: self.$name1.encode(buf),)+
373373
$($name2: self.$name2.encode(buf),)+

compiler/rustc_metadata/src/rmeta/table.rs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ use rustc_hir::def::CtorOf;
22
use rustc_index::Idx;
33

44
use crate::rmeta::decoder::Metadata;
5+
use crate::rmeta::encoder::ContextEncoder;
56
use crate::rmeta::*;
67

78
pub(super) trait IsDefault: Default {
@@ -486,15 +487,12 @@ impl<I: Idx, const N: usize, T: FixedSizeEncoding<ByteArray = [u8; N]>> TableBui
486487
}
487488
}
488489

489-
pub(crate) fn encode(&self, buf: &mut FileEncoder) -> LazyTable<I, T> {
490+
pub(crate) fn encode(&self, buf: &mut ContextEncoder<'_>) -> LazyTable<I, T> {
490491
let pos = buf.position();
491492

492493
let width = self.width;
493494
for block in &self.blocks {
494-
buf.write_with(|dest| {
495-
*dest = *block;
496-
width
497-
});
495+
buf.write_m_with(block, width);
498496
}
499497

500498
LazyTable::from_position_and_encoded_size(

0 commit comments

Comments
 (0)