@@ -237,7 +237,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
237
237
} ) ;
238
238
let sig = hir:: FnSig {
239
239
decl,
240
- header : this. lower_fn_header ( * header) ,
240
+ header : this. lower_fn_header ( * header, hir :: Safety :: Safe ) ,
241
241
span : this. lower_span ( * fn_sig_span) ,
242
242
} ;
243
243
hir:: ItemKind :: Fn ( sig, generics, body_id)
@@ -668,7 +668,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
668
668
ForeignItemKind :: Fn ( box Fn { sig, generics, .. } ) => {
669
669
let fdec = & sig. decl ;
670
670
let itctx = ImplTraitContext :: Universal ;
671
- let ( generics, ( fn_dec , fn_args) ) =
671
+ let ( generics, ( decl , fn_args) ) =
672
672
self . lower_generics ( generics, Const :: No , false , i. id , itctx, |this| {
673
673
(
674
674
// Disallow `impl Trait` in foreign items.
@@ -682,9 +682,15 @@ impl<'hir> LoweringContext<'_, 'hir> {
682
682
this. lower_fn_params_to_names ( fdec) ,
683
683
)
684
684
} ) ;
685
- let safety = self . lower_safety ( sig. header . safety , hir:: Safety :: Unsafe ) ;
686
685
687
- hir:: ForeignItemKind :: Fn ( fn_dec, fn_args, generics, safety)
686
+ // Unmarked safety in unsafe block defaults to unsafe.
687
+ let header = self . lower_fn_header ( sig. header , hir:: Safety :: Unsafe ) ;
688
+
689
+ hir:: ForeignItemKind :: Fn (
690
+ hir:: FnSig { header, decl, span : self . lower_span ( sig. span ) } ,
691
+ fn_args,
692
+ generics,
693
+ )
688
694
}
689
695
ForeignItemKind :: Static ( box StaticItem { ty, mutability, expr : _, safety } ) => {
690
696
let ty = self
@@ -1390,7 +1396,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
1390
1396
coroutine_kind : Option < CoroutineKind > ,
1391
1397
parent_constness : Const ,
1392
1398
) -> ( & ' hir hir:: Generics < ' hir > , hir:: FnSig < ' hir > ) {
1393
- let header = self . lower_fn_header ( sig. header ) ;
1399
+ let header = self . lower_fn_header ( sig. header , hir :: Safety :: Safe ) ;
1394
1400
// Don't pass along the user-provided constness of trait associated functions; we don't want to
1395
1401
// synthesize a host effect param for them. We reject `const` on them during AST validation.
1396
1402
let constness =
@@ -1403,14 +1409,18 @@ impl<'hir> LoweringContext<'_, 'hir> {
1403
1409
( generics, hir:: FnSig { header, decl, span : self . lower_span ( sig. span ) } )
1404
1410
}
1405
1411
1406
- pub ( super ) fn lower_fn_header ( & mut self , h : FnHeader ) -> hir:: FnHeader {
1412
+ pub ( super ) fn lower_fn_header (
1413
+ & mut self ,
1414
+ h : FnHeader ,
1415
+ default_safety : hir:: Safety ,
1416
+ ) -> hir:: FnHeader {
1407
1417
let asyncness = if let Some ( CoroutineKind :: Async { span, .. } ) = h. coroutine_kind {
1408
1418
hir:: IsAsync :: Async ( span)
1409
1419
} else {
1410
1420
hir:: IsAsync :: NotAsync
1411
1421
} ;
1412
1422
hir:: FnHeader {
1413
- safety : self . lower_safety ( h. safety , hir :: Safety :: Safe ) ,
1423
+ safety : self . lower_safety ( h. safety , default_safety ) ,
1414
1424
asyncness : asyncness,
1415
1425
constness : self . lower_constness ( h. constness ) ,
1416
1426
abi : self . lower_extern ( h. ext ) ,
0 commit comments