@@ -21,7 +21,10 @@ extern crate rustc_macros;
21
21
#[ macro_use]
22
22
extern crate tracing;
23
23
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
+ } ;
25
28
26
29
use errors:: ParseTargetMachineConfig ;
27
30
pub use llvm_util:: target_features;
@@ -412,6 +415,7 @@ impl CodegenBackend for LlvmCodegenBackend {
412
415
pub struct ModuleLlvm {
413
416
llcx : & ' static mut llvm:: Context ,
414
417
llmod_raw : * const llvm:: Module ,
418
+ tm_cpp_args : * mut llvm:: TargetMachineCppArgs ,
415
419
tm : & ' static mut llvm:: TargetMachine ,
416
420
}
417
421
@@ -423,15 +427,21 @@ impl ModuleLlvm {
423
427
unsafe {
424
428
let llcx = llvm:: LLVMRustContextCreate ( tcx. sess . fewer_names ( ) ) ;
425
429
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 }
427
434
}
428
435
}
429
436
430
437
fn new_metadata ( tcx : TyCtxt < ' _ > , mod_name : & str ) -> Self {
431
438
unsafe {
432
439
let llcx = llvm:: LLVMRustContextCreate ( tcx. sess . fewer_names ( ) ) ;
433
440
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 }
435
445
}
436
446
}
437
447
@@ -451,8 +461,10 @@ impl ModuleLlvm {
451
461
return Err ( handler. emit_almost_fatal ( ParseTargetMachineConfig ( e) ) ) ;
452
462
}
453
463
} ;
464
+ let tm_cpp_args = create_target_machine_args ( & cgcx. expanded_args ) ;
465
+ add_cpp_args_to_target_machine ( tm, & * tm_cpp_args) ;
454
466
455
- Ok ( ModuleLlvm { llmod_raw, llcx, tm } )
467
+ Ok ( ModuleLlvm { llmod_raw, llcx, tm, tm_cpp_args } )
456
468
}
457
469
}
458
470
@@ -465,6 +477,7 @@ impl Drop for ModuleLlvm {
465
477
fn drop ( & mut self ) {
466
478
unsafe {
467
479
llvm:: LLVMRustDisposeTargetMachine ( & mut * ( self . tm as * mut _ ) ) ;
480
+ llvm:: LLVMRustDisposeTargetMachineArgs ( self . tm_cpp_args ) ;
468
481
llvm:: LLVMContextDispose ( & mut * ( self . llcx as * mut _ ) ) ;
469
482
}
470
483
}
0 commit comments