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 @@ -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 ) 
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