File tree Expand file tree Collapse file tree 2 files changed +23
-12
lines changed
compiler/rustc_codegen_ssa/src/back Expand file tree Collapse file tree 2 files changed +23
-12
lines changed Original file line number Diff line number Diff line change @@ -138,23 +138,12 @@ impl ModuleConfig {
138138
139139 let emit_obj = if !should_emit_obj {
140140 EmitObj :: None
141- } else if sess. target . obj_is_bitcode
142- || ( sess. opts . cg . linker_plugin_lto . enabled ( ) && !no_builtins)
143- {
141+ } else if sess. target . obj_is_bitcode || sess. opts . cg . linker_plugin_lto . enabled ( ) {
144142 // This case is selected if the target uses objects as bitcode, or
145143 // if linker plugin LTO is enabled. In the linker plugin LTO case
146144 // the assumption is that the final link-step will read the bitcode
147145 // and convert it to object code. This may be done by either the
148146 // native linker or rustc itself.
149- //
150- // Note, however, that the linker-plugin-lto requested here is
151- // explicitly ignored for `#![no_builtins]` crates. These crates are
152- // specifically ignored by rustc's LTO passes and wouldn't work if
153- // loaded into the linker. These crates define symbols that LLVM
154- // lowers intrinsics to, and these symbol dependencies aren't known
155- // until after codegen. As a result any crate marked
156- // `#![no_builtins]` is assumed to not participate in LTO and
157- // instead goes on to generate object code.
158147 EmitObj :: Bitcode
159148 } else if need_bitcode_in_object ( tcx) {
160149 EmitObj :: ObjectCode ( BitcodeSection :: Full )
Original file line number Diff line number Diff line change 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 ( ) { }
You can’t perform that action at this time.
0 commit comments