Skip to content

Commit b4ba2f0

Browse files
committed
Change rlink serialization from MemEncoder to FileEncoder.
Because we're writing to a file, so `FileEncoder` is better because we don't have to write all the data to memory first.
1 parent 9ecda8d commit b4ba2f0

File tree

2 files changed

+8
-5
lines changed

2 files changed

+8
-5
lines changed

compiler/rustc_codegen_ssa/src/lib.rs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,15 @@ use rustc_middle::dep_graph::WorkProduct;
3131
use rustc_middle::middle::dependency_format::Dependencies;
3232
use rustc_middle::middle::exported_symbols::SymbolExportKind;
3333
use rustc_middle::ty::query::{ExternProviders, Providers};
34-
use rustc_serialize::opaque::{MemDecoder, MemEncoder};
34+
use rustc_serialize::opaque::{FileEncoder, MemDecoder};
3535
use rustc_serialize::{Decodable, Decoder, Encodable, Encoder};
3636
use rustc_session::config::{CrateType, OutputFilenames, OutputType, RUST_CGU_EXT};
3737
use rustc_session::cstore::{self, CrateSource};
3838
use rustc_session::utils::NativeLibKind;
3939
use rustc_span::symbol::Symbol;
4040
use rustc_span::DebuggerVisualizerFile;
4141
use std::collections::BTreeSet;
42+
use std::io;
4243
use std::path::{Path, PathBuf};
4344

4445
pub mod back;
@@ -215,8 +216,11 @@ const RLINK_MAGIC: &[u8] = b"rustlink";
215216
const RUSTC_VERSION: Option<&str> = option_env!("CFG_VERSION");
216217

217218
impl CodegenResults {
218-
pub fn serialize_rlink(codegen_results: &CodegenResults) -> Vec<u8> {
219-
let mut encoder = MemEncoder::new();
219+
pub fn serialize_rlink(
220+
rlink_file: &Path,
221+
codegen_results: &CodegenResults,
222+
) -> Result<usize, io::Error> {
223+
let mut encoder = FileEncoder::new(rlink_file)?;
220224
encoder.emit_raw_bytes(RLINK_MAGIC);
221225
// `emit_raw_bytes` is used to make sure that the version representation does not depend on
222226
// Encoder's inner representation of `u32`.

compiler/rustc_interface/src/queries.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -368,9 +368,8 @@ impl Linker {
368368
}
369369

370370
if sess.opts.unstable_opts.no_link {
371-
let encoded = CodegenResults::serialize_rlink(&codegen_results);
372371
let rlink_file = self.prepare_outputs.with_extension(config::RLINK_EXT);
373-
std::fs::write(&rlink_file, encoded)
372+
CodegenResults::serialize_rlink(&rlink_file, &codegen_results)
374373
.map_err(|error| sess.emit_fatal(FailedWritingFile { path: &rlink_file, error }))?;
375374
return Ok(());
376375
}

0 commit comments

Comments
 (0)