@@ -18,7 +18,6 @@ use rustc::hir::def::{Def, CtorKind};
1818use rustc:: util:: nodemap:: { NodeMap , NodeSet } ;
1919
2020use syntax:: ast;
21- use syntax:: feature_gate:: { GateIssue , emit_feature_err} ;
2221use syntax_pos:: Span ;
2322use rustc:: hir:: intravisit:: { self , Visitor , NestedVisitorMap } ;
2423use rustc:: hir;
@@ -43,7 +42,7 @@ impl<'a, 'hir: 'a> Visitor<'hir> for CheckCrateVisitor<'a, 'hir> {
4342 match it. node {
4443 hir:: ItemStatic ( ..) |
4544 hir:: ItemConst ( ..) => {
46- let mut recursion_visitor = CheckItemRecursionVisitor :: new ( self , & it . span ) ;
45+ let mut recursion_visitor = CheckItemRecursionVisitor :: new ( self ) ;
4746 recursion_visitor. visit_item ( it) ;
4847 }
4948 hir:: ItemEnum ( ref enum_def, ref generics) => {
@@ -52,8 +51,7 @@ impl<'a, 'hir: 'a> Visitor<'hir> for CheckCrateVisitor<'a, 'hir> {
5251 // less redundant output.
5352 for variant in & enum_def. variants {
5453 if let Some ( _) = variant. node . disr_expr {
55- let mut recursion_visitor = CheckItemRecursionVisitor :: new ( self ,
56- & variant. span ) ;
54+ let mut recursion_visitor = CheckItemRecursionVisitor :: new ( self ) ;
5755 recursion_visitor. populate_enum_discriminants ( enum_def) ;
5856 recursion_visitor. visit_variant ( variant, generics, it. id ) ;
5957 }
@@ -68,7 +66,7 @@ impl<'a, 'hir: 'a> Visitor<'hir> for CheckCrateVisitor<'a, 'hir> {
6866 match ti. node {
6967 hir:: TraitItemKind :: Const ( _, ref default) => {
7068 if let Some ( _) = * default {
71- let mut recursion_visitor = CheckItemRecursionVisitor :: new ( self , & ti . span ) ;
69+ let mut recursion_visitor = CheckItemRecursionVisitor :: new ( self ) ;
7270 recursion_visitor. visit_trait_item ( ti) ;
7371 }
7472 }
@@ -80,7 +78,7 @@ impl<'a, 'hir: 'a> Visitor<'hir> for CheckCrateVisitor<'a, 'hir> {
8078 fn visit_impl_item ( & mut self , ii : & ' hir hir:: ImplItem ) {
8179 match ii. node {
8280 hir:: ImplItemKind :: Const ( ..) => {
83- let mut recursion_visitor = CheckItemRecursionVisitor :: new ( self , & ii . span ) ;
81+ let mut recursion_visitor = CheckItemRecursionVisitor :: new ( self ) ;
8482 recursion_visitor. visit_impl_item ( ii) ;
8583 }
8684 _ => { }
@@ -105,7 +103,6 @@ pub fn check_crate<'hir>(sess: &Session, hir_map: &hir_map::Map<'hir>) -> Compil
105103}
106104
107105struct CheckItemRecursionVisitor < ' a , ' b : ' a , ' hir : ' b > {
108- root_span : & ' b Span ,
109106 sess : & ' b Session ,
110107 hir_map : & ' b hir_map:: Map < ' hir > ,
111108 discriminant_map : & ' a mut NodeMap < Option < hir:: BodyId > > ,
@@ -114,9 +111,8 @@ struct CheckItemRecursionVisitor<'a, 'b: 'a, 'hir: 'b> {
114111}
115112
116113impl < ' a , ' b : ' a , ' hir : ' b > CheckItemRecursionVisitor < ' a , ' b , ' hir > {
117- fn new ( v : & ' a mut CheckCrateVisitor < ' b , ' hir > , span : & ' b Span ) -> Self {
114+ fn new ( v : & ' a mut CheckCrateVisitor < ' b , ' hir > ) -> Self {
118115 CheckItemRecursionVisitor {
119- root_span : span,
120116 sess : v. sess ,
121117 hir_map : v. hir_map ,
122118 discriminant_map : & mut v. discriminant_map ,
@@ -143,15 +139,7 @@ impl<'a, 'b: 'a, 'hir: 'b> CheckItemRecursionVisitor<'a, 'b, 'hir> {
143139 false
144140 }
145141 } ) ;
146- if any_static {
147- if !self . sess . features . borrow ( ) . static_recursion {
148- emit_feature_err ( & self . sess . parse_sess ,
149- "static_recursion" ,
150- * self . root_span ,
151- GateIssue :: Language ,
152- "recursive static" ) ;
153- }
154- } else {
142+ if !any_static {
155143 struct_span_err ! ( self . sess, span, E0265 , "recursive constant" )
156144 . span_label ( span, & format ! ( "recursion not allowed in constant" ) )
157145 . emit ( ) ;
0 commit comments