@@ -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 ;
@@ -1021,12 +1022,23 @@ impl<'a> Visitor<'a> for AstValidator<'a> {
10211022 walk_list ! ( self , visit_attribute, & item. attrs) ;
10221023 return ; // Avoid visiting again.
10231024 }
1024- ItemKind :: ForeignMod ( ForeignMod { abi, .. } ) => {
1025+ ItemKind :: ForeignMod ( ForeignMod { abi, unsafety , .. } ) => {
10251026 let old_item = mem:: replace ( & mut self . extern_mod , Some ( item) ) ;
10261027 self . visibility_not_permitted (
10271028 & item. vis ,
10281029 errors:: VisibilityNotPermittedNote :: IndividualForeignItems ,
10291030 ) ;
1031+
1032+ if & Unsafe :: No == unsafety {
1033+ self . lint_buffer . buffer_lint_with_diagnostic (
1034+ MISSING_UNSAFE_ON_EXTERN ,
1035+ item. id ,
1036+ item. span ,
1037+ fluent:: ast_passes_extern_missing_unsafe,
1038+ BuiltinLintDiag :: Normal ,
1039+ ) ;
1040+ }
1041+
10301042 if abi. is_none ( ) {
10311043 self . maybe_lint_missing_abi ( item. span , item. id ) ;
10321044 }
0 commit comments