@@ -456,6 +456,12 @@ impl<'a> AstValidator<'a> {
456
456
}
457
457
}
458
458
459
+ fn check_item_safety ( & self , span : Span , safety : Safety ) {
460
+ if matches ! ( safety, Safety :: Safe ( _) ) {
461
+ self . dcx ( ) . emit_err ( errors:: InvalidSafetyOnItem { span } ) ;
462
+ }
463
+ }
464
+
459
465
fn check_foreign_item_safety ( & self , item_span : Span , safety : Safety ) {
460
466
if matches ! ( safety, Safety :: Unsafe ( _) | Safety :: Safe ( _) )
461
467
&& ( self . extern_mod_safety == Some ( Safety :: Default )
@@ -1015,6 +1021,7 @@ impl<'a> Visitor<'a> for AstValidator<'a> {
1015
1021
}
1016
1022
ItemKind :: Fn ( box Fn { defaultness, sig, generics, body } ) => {
1017
1023
self . check_defaultness ( item. span , * defaultness) ;
1024
+ self . check_item_safety ( item. span , sig. header . safety ) ;
1018
1025
1019
1026
if body. is_none ( ) {
1020
1027
self . dcx ( ) . emit_err ( errors:: FnWithoutBody {
@@ -1174,11 +1181,15 @@ impl<'a> Visitor<'a> for AstValidator<'a> {
1174
1181
} ) ;
1175
1182
}
1176
1183
}
1177
- ItemKind :: Static ( box StaticItem { expr : None , .. } ) => {
1178
- self . dcx ( ) . emit_err ( errors:: StaticWithoutBody {
1179
- span : item. span ,
1180
- replace_span : self . ending_semi_or_hi ( item. span ) ,
1181
- } ) ;
1184
+ ItemKind :: Static ( box StaticItem { expr, safety, .. } ) => {
1185
+ self . check_item_safety ( item. span , * safety) ;
1186
+
1187
+ if expr. is_none ( ) {
1188
+ self . dcx ( ) . emit_err ( errors:: StaticWithoutBody {
1189
+ span : item. span ,
1190
+ replace_span : self . ending_semi_or_hi ( item. span ) ,
1191
+ } ) ;
1192
+ }
1182
1193
}
1183
1194
ItemKind :: TyAlias (
1184
1195
ty_alias @ box TyAlias { defaultness, bounds, where_clauses, ty, .. } ,
0 commit comments