@@ -15,7 +15,8 @@ use rustc_data_structures::fx::FxIndexMap;
1515use rustc_feature:: Features ;
1616use rustc_parse:: validate_attr;
1717use rustc_session:: lint:: builtin:: {
18- DEPRECATED_WHERE_CLAUSE_LOCATION , MISSING_ABI , PATTERNS_IN_FNS_WITHOUT_BODY ,
18+ DEPRECATED_WHERE_CLAUSE_LOCATION , MISSING_ABI , MISSING_UNSAFE_ON_EXTERN ,
19+ PATTERNS_IN_FNS_WITHOUT_BODY ,
1920} ;
2021use rustc_session:: lint:: { BuiltinLintDiag , LintBuffer } ;
2122use rustc_session:: Session ;
@@ -1016,12 +1017,22 @@ impl<'a> Visitor<'a> for AstValidator<'a> {
10161017 walk_list ! ( self , visit_attribute, & item. attrs) ;
10171018 return ; // Avoid visiting again.
10181019 }
1019- ItemKind :: ForeignMod ( ForeignMod { abi, .. } ) => {
1020+ ItemKind :: ForeignMod ( ForeignMod { abi, safety , .. } ) => {
10201021 let old_item = mem:: replace ( & mut self . extern_mod , Some ( item) ) ;
10211022 self . visibility_not_permitted (
10221023 & item. vis ,
10231024 errors:: VisibilityNotPermittedNote :: IndividualForeignItems ,
10241025 ) ;
1026+
1027+ if & Safety :: Default == safety {
1028+ self . lint_buffer . buffer_lint (
1029+ MISSING_UNSAFE_ON_EXTERN ,
1030+ item. id ,
1031+ item. span ,
1032+ BuiltinLintDiag :: MissingUnsafeOnExtern ,
1033+ ) ;
1034+ }
1035+
10251036 if abi. is_none ( ) {
10261037 self . maybe_lint_missing_abi ( item. span , item. id ) ;
10271038 }
0 commit comments