@@ -456,6 +456,12 @@ impl<'a> AstValidator<'a> {
456456 }
457457 }
458458
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+
459465 fn check_foreign_item_safety ( & self , item_span : Span , safety : Safety ) {
460466 if matches ! ( safety, Safety :: Unsafe ( _) | Safety :: Safe ( _) )
461467 && ( self . extern_mod_safety == Some ( Safety :: Default )
@@ -1015,6 +1021,7 @@ impl<'a> Visitor<'a> for AstValidator<'a> {
10151021 }
10161022 ItemKind :: Fn ( box Fn { defaultness, sig, generics, body } ) => {
10171023 self . check_defaultness ( item. span , * defaultness) ;
1024+ self . check_item_safety ( item. span , sig. header . safety ) ;
10181025
10191026 if body. is_none ( ) {
10201027 self . dcx ( ) . emit_err ( errors:: FnWithoutBody {
@@ -1174,11 +1181,15 @@ impl<'a> Visitor<'a> for AstValidator<'a> {
11741181 } ) ;
11751182 }
11761183 }
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+ }
11821193 }
11831194 ItemKind :: TyAlias (
11841195 ty_alias @ box TyAlias { defaultness, bounds, where_clauses, ty, .. } ,
0 commit comments