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 {
138
138
139
139
let emit_obj = if !should_emit_obj {
140
140
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 ( ) {
144
142
// This case is selected if the target uses objects as bitcode, or
145
143
// if linker plugin LTO is enabled. In the linker plugin LTO case
146
144
// the assumption is that the final link-step will read the bitcode
147
145
// and convert it to object code. This may be done by either the
148
146
// 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.
158
147
EmitObj :: Bitcode
159
148
} else if need_bitcode_in_object ( tcx) {
160
149
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