@@ -2,7 +2,7 @@ use crate::back::write::{
22 self , bitcode_section_name, save_temp_bitcode, CodegenDiagnosticsStage , DiagnosticHandlers ,
33} ;
44use crate :: errors:: {
5- DynamicLinkingWithLTO , LlvmError , LtoBitcodeFromRlib , LtoDisallowed , LtoDylib ,
5+ DynamicLinkingWithLTO , LlvmError , LtoBitcodeFromRlib , LtoDisallowed , LtoDylib , LtoProcMacro ,
66} ;
77use crate :: llvm:: { self , build_string} ;
88use crate :: { LlvmCodegenBackend , ModuleLlvm } ;
@@ -36,8 +36,12 @@ pub const THIN_LTO_KEYS_INCR_COMP_FILE_NAME: &str = "thin-lto-past-keys.bin";
3636
3737pub fn crate_type_allows_lto ( crate_type : CrateType ) -> bool {
3838 match crate_type {
39- CrateType :: Executable | CrateType :: Dylib | CrateType :: Staticlib | CrateType :: Cdylib => true ,
40- CrateType :: Rlib | CrateType :: ProcMacro => false ,
39+ CrateType :: Executable
40+ | CrateType :: Dylib
41+ | CrateType :: Staticlib
42+ | CrateType :: Cdylib
43+ | CrateType :: ProcMacro => true ,
44+ CrateType :: Rlib => false ,
4145 }
4246}
4347
@@ -87,6 +91,11 @@ fn prepare_lto(
8791 diag_handler. emit_err ( LtoDylib ) ;
8892 return Err ( FatalError ) ;
8993 }
94+ } else if * crate_type == CrateType :: ProcMacro {
95+ if !cgcx. opts . unstable_opts . dylib_lto {
96+ diag_handler. emit_err ( LtoProcMacro ) ;
97+ return Err ( FatalError ) ;
98+ }
9099 }
91100 }
92101
0 commit comments