diff options
| author | Guillaume Gomez <guillaume1.gomez@gmail.com> | 2025-08-28 21:41:01 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-08-28 21:41:01 +0200 |
| commit | 9e4a28361570e4793ae77effd24901013e92c29b (patch) | |
| tree | 9fc4a784e2653cda8fcda8a4d491b4a32ec862c3 /compiler/rustc_codegen_ssa/src | |
| parent | f948c79911844709ad8aeea23b211fb9790257c7 (diff) | |
| parent | cf8753e4f9c3597f04cd5d3aa261e4561d5378a6 (diff) | |
| download | rust-9e4a28361570e4793ae77effd24901013e92c29b.tar.gz rust-9e4a28361570e4793ae77effd24901013e92c29b.zip | |
Rollup merge of #145368 - rcvalle:rust-cfi-fix-142284, r=dianqk
CFI: Make `lto` and `linker-plugin-lto` work the same for `compiler_builtins` Fix rust-lang/rust#142284 by ensuring that `#![no_builtins]` crates can still emit bitcode when proper (i.e., non-rustc) LTO (i.e., -Clinker-plugin-lto) is used.
Diffstat (limited to 'compiler/rustc_codegen_ssa/src')
| -rw-r--r-- | compiler/rustc_codegen_ssa/src/back/write.rs | 13 |
1 files changed, 1 insertions, 12 deletions
diff --git a/compiler/rustc_codegen_ssa/src/back/write.rs b/compiler/rustc_codegen_ssa/src/back/write.rs index 8586615f7c7..92582dcc399 100644 --- a/compiler/rustc_codegen_ssa/src/back/write.rs +++ b/compiler/rustc_codegen_ssa/src/back/write.rs @@ -138,23 +138,12 @@ impl ModuleConfig { let emit_obj = if !should_emit_obj { EmitObj::None - } else if sess.target.obj_is_bitcode - || (sess.opts.cg.linker_plugin_lto.enabled() && !no_builtins) - { + } else if sess.target.obj_is_bitcode || sess.opts.cg.linker_plugin_lto.enabled() { // This case is selected if the target uses objects as bitcode, or // if linker plugin LTO is enabled. In the linker plugin LTO case // the assumption is that the final link-step will read the bitcode // and convert it to object code. This may be done by either the // native linker or rustc itself. - // - // Note, however, that the linker-plugin-lto requested here is - // explicitly ignored for `#![no_builtins]` crates. These crates are - // specifically ignored by rustc's LTO passes and wouldn't work if - // loaded into the linker. These crates define symbols that LLVM - // lowers intrinsics to, and these symbol dependencies aren't known - // until after codegen. As a result any crate marked - // `#![no_builtins]` is assumed to not participate in LTO and - // instead goes on to generate object code. EmitObj::Bitcode } else if need_bitcode_in_object(tcx) { EmitObj::ObjectCode(BitcodeSection::Full) |
