@@ -21,7 +21,10 @@ extern crate rustc_macros;
2121#[ macro_use]
2222extern crate tracing;
2323
24- use back:: write:: { create_informational_target_machine, create_target_machine} ;
24+ use back:: write:: {
25+ add_cpp_args_to_target_machine, create_informational_target_machine, create_target_machine,
26+ create_target_machine_args,
27+ } ;
2528
2629use errors:: ParseTargetMachineConfig ;
2730pub use llvm_util:: target_features;
@@ -412,6 +415,7 @@ impl CodegenBackend for LlvmCodegenBackend {
412415pub struct ModuleLlvm {
413416 llcx : & ' static mut llvm:: Context ,
414417 llmod_raw : * const llvm:: Module ,
418+ tm_cpp_args : * mut llvm:: TargetMachineCppArgs ,
415419 tm : & ' static mut llvm:: TargetMachine ,
416420}
417421
@@ -423,15 +427,21 @@ impl ModuleLlvm {
423427 unsafe {
424428 let llcx = llvm:: LLVMRustContextCreate ( tcx. sess . fewer_names ( ) ) ;
425429 let llmod_raw = context:: create_module ( tcx, llcx, mod_name) as * const _ ;
426- ModuleLlvm { llmod_raw, llcx, tm : create_target_machine ( tcx, mod_name) }
430+ let tm_cpp_args = create_target_machine_args ( & tcx. sess . expanded_args ) ;
431+ let tm = create_target_machine ( tcx, mod_name) ;
432+ add_cpp_args_to_target_machine ( tm, & * tm_cpp_args) ;
433+ ModuleLlvm { llmod_raw, llcx, tm, tm_cpp_args }
427434 }
428435 }
429436
430437 fn new_metadata ( tcx : TyCtxt < ' _ > , mod_name : & str ) -> Self {
431438 unsafe {
432439 let llcx = llvm:: LLVMRustContextCreate ( tcx. sess . fewer_names ( ) ) ;
433440 let llmod_raw = context:: create_module ( tcx, llcx, mod_name) as * const _ ;
434- ModuleLlvm { llmod_raw, llcx, tm : create_informational_target_machine ( tcx. sess ) }
441+ let tm_cpp_args = create_target_machine_args ( & tcx. sess . expanded_args ) ;
442+ let tm = create_informational_target_machine ( tcx. sess ) ;
443+ add_cpp_args_to_target_machine ( tm, & * tm_cpp_args) ;
444+ ModuleLlvm { llmod_raw, llcx, tm, tm_cpp_args }
435445 }
436446 }
437447
@@ -451,8 +461,10 @@ impl ModuleLlvm {
451461 return Err ( handler. emit_almost_fatal ( ParseTargetMachineConfig ( e) ) ) ;
452462 }
453463 } ;
464+ let tm_cpp_args = create_target_machine_args ( & cgcx. expanded_args ) ;
465+ add_cpp_args_to_target_machine ( tm, & * tm_cpp_args) ;
454466
455- Ok ( ModuleLlvm { llmod_raw, llcx, tm } )
467+ Ok ( ModuleLlvm { llmod_raw, llcx, tm, tm_cpp_args } )
456468 }
457469 }
458470
@@ -465,6 +477,7 @@ impl Drop for ModuleLlvm {
465477 fn drop ( & mut self ) {
466478 unsafe {
467479 llvm:: LLVMRustDisposeTargetMachine ( & mut * ( self . tm as * mut _ ) ) ;
480+ llvm:: LLVMRustDisposeTargetMachineArgs ( self . tm_cpp_args ) ;
468481 llvm:: LLVMContextDispose ( & mut * ( self . llcx as * mut _ ) ) ;
469482 }
470483 }
0 commit comments