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 @@ -147,23 +147,12 @@ impl ModuleConfig {
147147
148148 let emit_obj = if !should_emit_obj {
149149 EmitObj :: None
150- } else if sess. target . obj_is_bitcode
151- || ( sess. opts . cg . linker_plugin_lto . enabled ( ) && !no_builtins)
152- {
150+ } else if sess. target . obj_is_bitcode || sess. opts . cg . linker_plugin_lto . enabled ( ) {
153151 // This case is selected if the target uses objects as bitcode, or
154152 // if linker plugin LTO is enabled. In the linker plugin LTO case
155153 // the assumption is that the final link-step will read the bitcode
156154 // and convert it to object code. This may be done by either the
157155 // native linker or rustc itself.
158- //
159- // Note, however, that the linker-plugin-lto requested here is
160- // explicitly ignored for `#![no_builtins]` crates. These crates are
161- // specifically ignored by rustc's LTO passes and wouldn't work if
162- // loaded into the linker. These crates define symbols that LLVM
163- // lowers intrinsics to, and these symbol dependencies aren't known
164- // until after codegen. As a result any crate marked
165- // `#![no_builtins]` is assumed to not participate in LTO and
166- // instead goes on to generate object code.
167156 EmitObj :: Bitcode
168157 } else if need_bitcode_in_object ( tcx) {
169158 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