@@ -2,7 +2,7 @@ use crate::back::write::{
2
2
self , bitcode_section_name, save_temp_bitcode, CodegenDiagnosticsStage , DiagnosticHandlers ,
3
3
} ;
4
4
use crate :: errors:: {
5
- DynamicLinkingWithLTO , LlvmError , LtoBitcodeFromRlib , LtoDisallowed , LtoDylib ,
5
+ DynamicLinkingWithLTO , LlvmError , LtoBitcodeFromRlib , LtoDisallowed , LtoDylib , LtoProcMacro ,
6
6
} ;
7
7
use crate :: llvm:: { self , build_string} ;
8
8
use crate :: { LlvmCodegenBackend , ModuleLlvm } ;
@@ -36,8 +36,12 @@ pub const THIN_LTO_KEYS_INCR_COMP_FILE_NAME: &str = "thin-lto-past-keys.bin";
36
36
37
37
pub fn crate_type_allows_lto ( crate_type : CrateType ) -> bool {
38
38
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 ,
41
45
}
42
46
}
43
47
@@ -87,6 +91,11 @@ fn prepare_lto(
87
91
diag_handler. emit_err ( LtoDylib ) ;
88
92
return Err ( FatalError ) ;
89
93
}
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
+ }
90
99
}
91
100
}
92
101
0 commit comments