@@ -280,29 +280,35 @@ pub unsafe fn create_module<'ll>(
280
280
}
281
281
282
282
if let Some ( BranchProtection { bti, pac_ret } ) = sess. opts . unstable_opts . branch_protection {
283
+ let behavior = if llvm_version >= ( 15 , 0 , 0 ) {
284
+ llvm:: LLVMModFlagBehavior :: Min
285
+ } else {
286
+ llvm:: LLVMModFlagBehavior :: Error
287
+ } ;
288
+
283
289
if sess. target . arch == "aarch64" {
284
290
llvm:: LLVMRustAddModuleFlag (
285
291
llmod,
286
- llvm :: LLVMModFlagBehavior :: Min ,
292
+ behavior ,
287
293
"branch-target-enforcement\0 " . as_ptr ( ) . cast ( ) ,
288
294
bti. into ( ) ,
289
295
) ;
290
296
llvm:: LLVMRustAddModuleFlag (
291
297
llmod,
292
- llvm :: LLVMModFlagBehavior :: Min ,
298
+ behavior ,
293
299
"sign-return-address\0 " . as_ptr ( ) . cast ( ) ,
294
300
pac_ret. is_some ( ) . into ( ) ,
295
301
) ;
296
302
let pac_opts = pac_ret. unwrap_or ( PacRet { leaf : false , key : PAuthKey :: A } ) ;
297
303
llvm:: LLVMRustAddModuleFlag (
298
304
llmod,
299
- llvm :: LLVMModFlagBehavior :: Min ,
305
+ behavior ,
300
306
"sign-return-address-all\0 " . as_ptr ( ) . cast ( ) ,
301
307
pac_opts. leaf . into ( ) ,
302
308
) ;
303
309
llvm:: LLVMRustAddModuleFlag (
304
310
llmod,
305
- llvm :: LLVMModFlagBehavior :: Min ,
311
+ behavior ,
306
312
"sign-return-address-with-bkey\0 " . as_ptr ( ) . cast ( ) ,
307
313
u32:: from ( pac_opts. key == PAuthKey :: B ) ,
308
314
) ;
0 commit comments