@@ -15,7 +15,8 @@ use rustc_data_structures::fx::FxIndexMap;
15
15
use rustc_feature:: Features ;
16
16
use rustc_parse:: validate_attr;
17
17
use 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 ,
19
20
} ;
20
21
use rustc_session:: lint:: { BuiltinLintDiag , LintBuffer } ;
21
22
use rustc_session:: Session ;
@@ -1021,12 +1022,23 @@ impl<'a> Visitor<'a> for AstValidator<'a> {
1021
1022
walk_list ! ( self , visit_attribute, & item. attrs) ;
1022
1023
return ; // Avoid visiting again.
1023
1024
}
1024
- ItemKind :: ForeignMod ( ForeignMod { abi, .. } ) => {
1025
+ ItemKind :: ForeignMod ( ForeignMod { abi, unsafety , .. } ) => {
1025
1026
let old_item = mem:: replace ( & mut self . extern_mod , Some ( item) ) ;
1026
1027
self . visibility_not_permitted (
1027
1028
& item. vis ,
1028
1029
errors:: VisibilityNotPermittedNote :: IndividualForeignItems ,
1029
1030
) ;
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
+
1030
1042
if abi. is_none ( ) {
1031
1043
self . maybe_lint_missing_abi ( item. span , item. id ) ;
1032
1044
}
0 commit comments