@@ -18,7 +18,6 @@ use rustc::hir::def::{Def, CtorKind};
18
18
use rustc:: util:: nodemap:: { NodeMap , NodeSet } ;
19
19
20
20
use syntax:: ast;
21
- use syntax:: feature_gate:: { GateIssue , emit_feature_err} ;
22
21
use syntax_pos:: Span ;
23
22
use rustc:: hir:: intravisit:: { self , Visitor , NestedVisitorMap } ;
24
23
use rustc:: hir;
@@ -43,7 +42,7 @@ impl<'a, 'hir: 'a> Visitor<'hir> for CheckCrateVisitor<'a, 'hir> {
43
42
match it. node {
44
43
hir:: ItemStatic ( ..) |
45
44
hir:: ItemConst ( ..) => {
46
- let mut recursion_visitor = CheckItemRecursionVisitor :: new ( self , & it . span ) ;
45
+ let mut recursion_visitor = CheckItemRecursionVisitor :: new ( self ) ;
47
46
recursion_visitor. visit_item ( it) ;
48
47
}
49
48
hir:: ItemEnum ( ref enum_def, ref generics) => {
@@ -52,8 +51,7 @@ impl<'a, 'hir: 'a> Visitor<'hir> for CheckCrateVisitor<'a, 'hir> {
52
51
// less redundant output.
53
52
for variant in & enum_def. variants {
54
53
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 ) ;
57
55
recursion_visitor. populate_enum_discriminants ( enum_def) ;
58
56
recursion_visitor. visit_variant ( variant, generics, it. id ) ;
59
57
}
@@ -68,7 +66,7 @@ impl<'a, 'hir: 'a> Visitor<'hir> for CheckCrateVisitor<'a, 'hir> {
68
66
match ti. node {
69
67
hir:: TraitItemKind :: Const ( _, ref default) => {
70
68
if let Some ( _) = * default {
71
- let mut recursion_visitor = CheckItemRecursionVisitor :: new ( self , & ti . span ) ;
69
+ let mut recursion_visitor = CheckItemRecursionVisitor :: new ( self ) ;
72
70
recursion_visitor. visit_trait_item ( ti) ;
73
71
}
74
72
}
@@ -80,7 +78,7 @@ impl<'a, 'hir: 'a> Visitor<'hir> for CheckCrateVisitor<'a, 'hir> {
80
78
fn visit_impl_item ( & mut self , ii : & ' hir hir:: ImplItem ) {
81
79
match ii. node {
82
80
hir:: ImplItemKind :: Const ( ..) => {
83
- let mut recursion_visitor = CheckItemRecursionVisitor :: new ( self , & ii . span ) ;
81
+ let mut recursion_visitor = CheckItemRecursionVisitor :: new ( self ) ;
84
82
recursion_visitor. visit_impl_item ( ii) ;
85
83
}
86
84
_ => { }
@@ -105,7 +103,6 @@ pub fn check_crate<'hir>(sess: &Session, hir_map: &hir_map::Map<'hir>) -> Compil
105
103
}
106
104
107
105
struct CheckItemRecursionVisitor < ' a , ' b : ' a , ' hir : ' b > {
108
- root_span : & ' b Span ,
109
106
sess : & ' b Session ,
110
107
hir_map : & ' b hir_map:: Map < ' hir > ,
111
108
discriminant_map : & ' a mut NodeMap < Option < hir:: BodyId > > ,
@@ -114,9 +111,8 @@ struct CheckItemRecursionVisitor<'a, 'b: 'a, 'hir: 'b> {
114
111
}
115
112
116
113
impl < ' 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 {
118
115
CheckItemRecursionVisitor {
119
- root_span : span,
120
116
sess : v. sess ,
121
117
hir_map : v. hir_map ,
122
118
discriminant_map : & mut v. discriminant_map ,
@@ -143,15 +139,7 @@ impl<'a, 'b: 'a, 'hir: 'b> CheckItemRecursionVisitor<'a, 'b, 'hir> {
143
139
false
144
140
}
145
141
} ) ;
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 {
155
143
struct_span_err ! ( self . sess, span, E0265 , "recursive constant" )
156
144
. span_label ( span, & format ! ( "recursion not allowed in constant" ) )
157
145
. emit ( ) ;
0 commit comments