Skip to content
This repository was archived by the owner on May 28, 2025. It is now read-only.

Commit 97eb606

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

Lines changed: 3 additions & 3 deletions
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

Lines changed: 25 additions & 0 deletions
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)
This repository has been archived.