Skip to content

Commit 97eb606

Browse files
committedSep 9, 2020
Auto merge of #76540 - tmandry:rollup-5ogt8x0, r=tmandry
Rollup of 14 pull requests Successful merges: - #75094 (Add `-Z combine_cgu` flag) - #75984 (Improve unresolved use error message) - #76141 (Address review comments about config.toml from rustc-dev-guide PR) - #76313 (Improved the MIR spanview output) - #76430 (Add align to rustc-attrs unstable book) - #76465 (Add a script to automatically update Rust/Clang versions in documentation) - #76473 (Add missed spaces to GCC-WARNING.txt) - #76481 (Convert repetitive target_pointer_width checks to const solution.) - #76493 (Remove a stray ignore-tidy-undocumented-unsafe) - #76504 (Capitalize safety comments) - #76515 (SessionDiagnostic: Fix non-determinism in generated format string.) - #76516 (Enable GitHub Releases synchronization) - #76522 (remove redundant clones) - #76523 (Remove unused PlaceContext::NonUse(NonUseContext::Coverage)) Failed merges: r? `@ghost`
2 parents e2be5f5 + 32714eb commit 97eb606

File tree

96 files changed

+1285
-507
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

96 files changed

+1285
-507
lines changed
 

‎compiler/rustc_codegen_llvm/src/back/lto.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -346,14 +346,14 @@ fn fat_lto(
346346
Ok(LtoModuleCodegen::Fat { module: Some(module), _serialized_bitcode: serialized_bitcode })
347347
}
348348

349-
struct Linker<'a>(&'a mut llvm::Linker<'a>);
349+
crate struct Linker<'a>(&'a mut llvm::Linker<'a>);
350350

351351
impl Linker<'a> {
352-
fn new(llmod: &'a llvm::Module) -> Self {
352+
crate fn new(llmod: &'a llvm::Module) -> Self {
353353
unsafe { Linker(llvm::LLVMRustLinkerNew(llmod)) }
354354
}
355355

356-
fn add(&mut self, bytecode: &[u8]) -> Result<(), ()> {
356+
crate fn add(&mut self, bytecode: &[u8]) -> Result<(), ()> {
357357
unsafe {
358358
if llvm::LLVMRustLinkerAdd(
359359
self.0,

‎compiler/rustc_codegen_llvm/src/back/write.rs

+25
Original file line numberDiff line numberDiff line change
@@ -617,6 +617,31 @@ unsafe fn add_sanitizer_passes(config: &ModuleConfig, passes: &mut Vec<&'static
617617
}
618618
}
619619

620+
pub(crate) fn link(
621+
cgcx: &CodegenContext<LlvmCodegenBackend>,
622+
diag_handler: &Handler,
623+
mut modules: Vec<ModuleCodegen<ModuleLlvm>>,
624+
) -> Result<ModuleCodegen<ModuleLlvm>, FatalError> {
625+
use super::lto::{Linker, ModuleBuffer};
626+
// Sort the modules by name to ensure to ensure deterministic behavior.
627+
modules.sort_by(|a, b| a.name.cmp(&b.name));
628+
let (first, elements) =
629+
modules.split_first().expect("Bug! modules must contain at least one module.");
630+
631+
let mut linker = Linker::new(first.module_llvm.llmod());
632+
for module in elements {
633+
let _timer =
634+
cgcx.prof.generic_activity_with_arg("LLVM_link_module", format!("{:?}", module.name));
635+
let buffer = ModuleBuffer::new(module.module_llvm.llmod());
636+
linker.add(&buffer.data()).map_err(|()| {
637+
let msg = format!("failed to serialize module {:?}", module.name);
638+
llvm_err(&diag_handler, &msg)
639+
})?;
640+
}
641+
drop(linker);
642+
Ok(modules.remove(0))
643+
}
644+
620645
pub(crate) unsafe fn codegen(
621646
cgcx: &CodegenContext<LlvmCodegenBackend>,
622647
diag_handler: &Handler,

0 commit comments

Comments
 (0)