diff --git a/src/librustc_codegen_llvm/back/lto.rs b/src/librustc_codegen_llvm/back/lto.rs index c88f5993889d..5f5d0c40fe3c 100644 --- a/src/librustc_codegen_llvm/back/lto.rs +++ b/src/librustc_codegen_llvm/back/lto.rs @@ -144,22 +144,15 @@ fn prepare_lto(cgcx: &CodegenContext, /// for further optimization. pub(crate) fn run_fat(cgcx: &CodegenContext, modules: Vec>, - _cached_modules: Vec<(SerializedModule, WorkProduct)>, timeline: &mut Timeline) - -> Result<(Vec>, Vec), FatalError> + -> Result, FatalError> { let diag_handler = cgcx.create_diag_handler(); let (symbol_white_list, upstream_modules) = prepare_lto(cgcx, timeline, &diag_handler)?; let symbol_white_list = symbol_white_list.iter() .map(|c| c.as_ptr()) .collect::>(); - let opt_jobs = fat_lto(cgcx, - &diag_handler, - modules, - upstream_modules, - &symbol_white_list, - timeline); - opt_jobs.map(|opt_jobs| (opt_jobs, vec![])) + fat_lto(cgcx, &diag_handler, modules, upstream_modules, &symbol_white_list, timeline) } /// Performs thin LTO by performing necessary global analysis and returning two @@ -195,7 +188,7 @@ fn fat_lto(cgcx: &CodegenContext, mut serialized_modules: Vec<(SerializedModule, CString)>, symbol_white_list: &[*const libc::c_char], timeline: &mut Timeline) - -> Result>, FatalError> + -> Result, FatalError> { info!("going for a fat lto"); @@ -284,10 +277,10 @@ fn fat_lto(cgcx: &CodegenContext, timeline.record("passes"); } - Ok(vec![LtoModuleCodegen::Fat { + Ok(LtoModuleCodegen::Fat { module: Some(module), _serialized_bitcode: serialized_bitcode, - }]) + }) } struct Linker<'a>(&'a mut llvm::Linker<'a>); diff --git a/src/librustc_codegen_llvm/lib.rs b/src/librustc_codegen_llvm/lib.rs index 7d941a99e2f2..4eb1fc1b1dc3 100644 --- a/src/librustc_codegen_llvm/lib.rs +++ b/src/librustc_codegen_llvm/lib.rs @@ -179,10 +179,9 @@ impl WriteBackendMethods for LlvmCodegenBackend { fn run_fat_lto( cgcx: &CodegenContext, modules: Vec>, - cached_modules: Vec<(SerializedModule, WorkProduct)>, timeline: &mut Timeline - ) -> Result<(Vec>, Vec), FatalError> { - back::lto::run_fat(cgcx, modules, cached_modules, timeline) + ) -> Result, FatalError> { + back::lto::run_fat(cgcx, modules, timeline) } fn run_thin_lto( cgcx: &CodegenContext, diff --git a/src/librustc_codegen_ssa/back/write.rs b/src/librustc_codegen_ssa/back/write.rs index 5e89265d56f2..fe40cb184836 100644 --- a/src/librustc_codegen_ssa/back/write.rs +++ b/src/librustc_codegen_ssa/back/write.rs @@ -264,8 +264,10 @@ fn generate_lto_work( let (lto_modules, copy_jobs) = if !needs_fat_lto.is_empty() { assert!(needs_thin_lto.is_empty()); - B::run_fat_lto(cgcx, needs_fat_lto, import_only_modules, &mut timeline) - .unwrap_or_else(|e| e.raise()) + assert!(import_only_modules.is_empty()); + let lto_module = B::run_fat_lto(cgcx, needs_fat_lto, &mut timeline) + .unwrap_or_else(|e| e.raise()); + (vec![lto_module], vec![]) } else { assert!(needs_fat_lto.is_empty()); B::run_thin_lto(cgcx, needs_thin_lto, import_only_modules, &mut timeline) diff --git a/src/librustc_codegen_ssa/traits/write.rs b/src/librustc_codegen_ssa/traits/write.rs index 5bc44dfeeb32..7b8f9395f85e 100644 --- a/src/librustc_codegen_ssa/traits/write.rs +++ b/src/librustc_codegen_ssa/traits/write.rs @@ -29,9 +29,8 @@ pub trait WriteBackendMethods: 'static + Sized + Clone { fn run_fat_lto( cgcx: &CodegenContext, modules: Vec>, - cached_modules: Vec<(SerializedModule, WorkProduct)>, timeline: &mut Timeline, - ) -> Result<(Vec>, Vec), FatalError>; + ) -> Result, FatalError>; /// Performs thin LTO by performing necessary global analysis and returning two /// lists, one of the modules that need optimization and another for modules that /// can simply be copied over from the incr. comp. cache.