@@ -59,14 +59,15 @@ macro_rules! gate_legacy {
59
59
}
60
60
61
61
pub fn check_attribute ( attr : & ast:: Attribute , sess : & Session , features : & Features ) {
62
- PostExpansionVisitor { sess, features } . visit_attribute ( attr)
62
+ PostExpansionVisitor { sess, features, is_in_generics : false } . visit_attribute ( attr)
63
63
}
64
64
65
65
struct PostExpansionVisitor < ' a > {
66
66
sess : & ' a Session ,
67
67
68
68
// `sess` contains a `Features`, but this might not be that one.
69
69
features : & ' a Features ,
70
+ is_in_generics : bool ,
70
71
}
71
72
72
73
impl < ' a > PostExpansionVisitor < ' a > {
@@ -349,17 +350,20 @@ impl<'a> Visitor<'a> for PostExpansionVisitor<'a> {
349
350
_ => { }
350
351
}
351
352
}
353
+ let prev = std:: mem:: replace ( & mut self . is_in_generics , true ) ;
352
354
visit:: walk_generics ( self , g) ;
355
+ self . is_in_generics = prev;
353
356
}
354
357
355
358
fn visit_fn_ret_ty ( & mut self , ret_ty : & ' a ast:: FnRetTy ) {
356
- if let ast:: FnRetTy :: Ty ( output_ty) = ret_ty {
357
- if let ast:: TyKind :: Never = output_ty. kind {
358
- // Do nothing.
359
- } else {
360
- self . visit_ty ( output_ty )
361
- }
359
+ if let ast:: FnRetTy :: Ty ( output_ty) = ret_ty
360
+ && let ast:: TyKind :: Never = output_ty. kind
361
+ && ! self . is_in_generics
362
+ {
363
+ // Do nothing.
364
+ return ;
362
365
}
366
+ visit:: walk_fn_ret_ty ( self , ret_ty) ;
363
367
}
364
368
365
369
fn visit_expr ( & mut self , e : & ' a ast:: Expr ) {
@@ -489,7 +493,7 @@ impl<'a> Visitor<'a> for PostExpansionVisitor<'a> {
489
493
pub fn check_crate ( krate : & ast:: Crate , sess : & Session , features : & Features ) {
490
494
maybe_stage_features ( sess, features, krate) ;
491
495
check_incompatible_features ( sess, features) ;
492
- let mut visitor = PostExpansionVisitor { sess, features } ;
496
+ let mut visitor = PostExpansionVisitor { sess, features, is_in_generics : false } ;
493
497
494
498
let spans = sess. parse_sess . gated_spans . spans . borrow ( ) ;
495
499
macro_rules! gate_all {
0 commit comments