@@ -2376,9 +2376,9 @@ impl<'a> Parser<'a> {
2376
2376
// `pub` is added in case users got confused with the ordering like `async pub fn`,
2377
2377
// only if it wasn't preceded by `default` as `default pub` is invalid.
2378
2378
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 ]
2380
2380
} 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 ]
2382
2382
} ;
2383
2383
self . check_keyword_case ( kw:: Fn , case) // Definitely an `fn`.
2384
2384
// `$qual fn` or `$qual $qual`:
@@ -2513,11 +2513,27 @@ impl<'a> Parser<'a> {
2513
2513
} else if self . check_keyword ( kw:: Unsafe ) {
2514
2514
match safety {
2515
2515
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
+ }
2516
2520
FnSafety :: Default => {
2517
2521
recover_safety = FnSafety :: Unsafe ( self . token . span ) ;
2518
2522
Some ( WrongKw :: Misplaced ( ext_start_sp) )
2519
2523
}
2520
2524
}
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
+ }
2521
2537
} else {
2522
2538
None
2523
2539
} ;
0 commit comments