Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit cf8753e

Browse files
maurerrcvalle
authored andcommitted
Make lto and linker-plugin-lto work the same for compiler_builtins
Fix #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.
1 parent d9dba3a commit cf8753e

File tree

2 files changed

+23
-12
lines changed

2 files changed

+23
-12
lines changed

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

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -143,23 +143,12 @@ impl ModuleConfig {
143143

144144
let emit_obj = if !should_emit_obj {
145145
EmitObj::None
146-
} else if sess.target.obj_is_bitcode
147-
|| (sess.opts.cg.linker_plugin_lto.enabled() && !no_builtins)
148-
{
146+
} else if sess.target.obj_is_bitcode || sess.opts.cg.linker_plugin_lto.enabled() {
149147
// This case is selected if the target uses objects as bitcode, or
150148
// if linker plugin LTO is enabled. In the linker plugin LTO case
151149
// the assumption is that the final link-step will read the bitcode
152150
// and convert it to object code. This may be done by either the
153151
// native linker or rustc itself.
154-
//
155-
// Note, however, that the linker-plugin-lto requested here is
156-
// explicitly ignored for `#![no_builtins]` crates. These crates are
157-
// specifically ignored by rustc's LTO passes and wouldn't work if
158-
// loaded into the linker. These crates define symbols that LLVM
159-
// lowers intrinsics to, and these symbol dependencies aren't known
160-
// until after codegen. As a result any crate marked
161-
// `#![no_builtins]` is assumed to not participate in LTO and
162-
// instead goes on to generate object code.
163152
EmitObj::Bitcode
164153
} else if need_bitcode_in_object(tcx) {
165154
EmitObj::ObjectCode(BitcodeSection::Full)

‎tests/ui/sanitizer/cfi/no_builtins.rs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
// Verifies that `#![no_builtins]` crates can be built with linker-plugin-lto and CFI.
2+
// See Issue #142284
3+
//
4+
//@ needs-sanitizer-cfi
5+
//@ compile-flags: -Clinker-plugin-lto -Copt-level=0 -Zsanitizer=cfi -Ctarget-feature=-crt-static
6+
//@ compile-flags: --crate-type rlib
7+
//@ build-pass
8+
9+
#![no_builtins]
10+
#![no_std]
11+
12+
pub static FUNC: fn() = initializer;
13+
14+
pub fn initializer() {
15+
call(fma_with_fma);
16+
}
17+
18+
pub fn call(fn_ptr: fn()) {
19+
fn_ptr();
20+
}
21+
22+
pub fn fma_with_fma() {}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /