@@ -2376,9 +2376,9 @@ impl<'a> Parser<'a> {
23762376 // `pub` is added in case users got confused with the ordering like `async pub fn`,
23772377 // only if it wasn't preceded by `default` as `default pub` is invalid.
23782378 let quals: & [ Symbol ] = if check_pub {
2379- & [ kw:: Pub , kw:: Gen , kw:: Const , kw:: Async , kw:: Unsafe , kw:: Extern ]
2379+ & [ kw:: Pub , kw:: Gen , kw:: Const , kw:: Async , kw:: Unsafe , kw:: Safe , kw :: Extern ]
23802380 } else {
2381- & [ kw:: Gen , kw:: Const , kw:: Async , kw:: Unsafe , kw:: Extern ]
2381+ & [ kw:: Gen , kw:: Const , kw:: Async , kw:: Unsafe , kw:: Safe , kw :: Extern ]
23822382 } ;
23832383 self . check_keyword_case ( kw:: Fn , case) // Definitely an `fn`.
23842384 // `$qual fn` or `$qual $qual`:
@@ -2513,11 +2513,27 @@ impl<'a> Parser<'a> {
25132513 } else if self . check_keyword ( kw:: Unsafe ) {
25142514 match safety {
25152515 FnSafety :: Unsafe ( sp) => Some ( WrongKw :: Duplicated ( sp) ) ,
2516+ FnSafety :: Safe ( sp) => {
2517+ recover_safety = FnSafety :: Unsafe ( self . token . span ) ;
2518+ Some ( WrongKw :: Misplaced ( sp) )
2519+ }
25162520 FnSafety :: Default => {
25172521 recover_safety = FnSafety :: Unsafe ( self . token . span ) ;
25182522 Some ( WrongKw :: Misplaced ( ext_start_sp) )
25192523 }
25202524 }
2525+ } else if self . check_keyword ( kw:: Safe ) {
2526+ match safety {
2527+ FnSafety :: Safe ( sp) => Some ( WrongKw :: Duplicated ( sp) ) ,
2528+ FnSafety :: Unsafe ( sp) => {
2529+ recover_safety = FnSafety :: Safe ( self . token . span ) ;
2530+ Some ( WrongKw :: Misplaced ( sp) )
2531+ }
2532+ FnSafety :: Default => {
2533+ recover_safety = FnSafety :: Safe ( self . token . span ) ;
2534+ Some ( WrongKw :: Misplaced ( ext_start_sp) )
2535+ }
2536+ }
25212537 } else {
25222538 None
25232539 } ;
0 commit comments