@@ -126,7 +126,7 @@ impl<'a, 'ast: 'a> CheckItemRecursionVisitor<'a, 'ast> {
126126 idstack : Vec :: new ( ) ,
127127 }
128128 }
129- fn with_item_id_pushed < F > ( & mut self , id : ast:: NodeId , f : F )
129+ fn with_item_id_pushed < F > ( & mut self , id : ast:: NodeId , f : F , span : Span )
130130 where F : Fn ( & mut Self )
131131 {
132132 if self . idstack . iter ( ) . any ( |& x| x == id) {
@@ -150,7 +150,9 @@ impl<'a, 'ast: 'a> CheckItemRecursionVisitor<'a, 'ast> {
150150 "recursive static" ) ;
151151 }
152152 } else {
153- span_err ! ( self . sess, * self . root_span, E0265 , "recursive constant" ) ;
153+ struct_span_err ! ( self . sess, span, E0265 , "recursive constant" )
154+ . span_label ( span, & format ! ( "recursion not allowed in constant" ) )
155+ . emit ( ) ;
154156 }
155157 return ;
156158 }
@@ -203,7 +205,7 @@ impl<'a, 'ast: 'a> CheckItemRecursionVisitor<'a, 'ast> {
203205
204206impl < ' a , ' ast : ' a > Visitor < ' ast > for CheckItemRecursionVisitor < ' a , ' ast > {
205207 fn visit_item ( & mut self , it : & ' ast hir:: Item ) {
206- self . with_item_id_pushed ( it. id , |v| intravisit:: walk_item ( v, it) ) ;
208+ self . with_item_id_pushed ( it. id , |v| intravisit:: walk_item ( v, it) , it . span ) ;
207209 }
208210
209211 fn visit_enum_def ( & mut self ,
@@ -233,16 +235,16 @@ impl<'a, 'ast: 'a> Visitor<'ast> for CheckItemRecursionVisitor<'a, 'ast> {
233235 // If `maybe_expr` is `None`, that's because no discriminant is
234236 // specified that affects this variant. Thus, no risk of recursion.
235237 if let Some ( expr) = maybe_expr {
236- self . with_item_id_pushed ( expr. id , |v| intravisit:: walk_expr ( v, expr) ) ;
238+ self . with_item_id_pushed ( expr. id , |v| intravisit:: walk_expr ( v, expr) , expr . span ) ;
237239 }
238240 }
239241
240242 fn visit_trait_item ( & mut self , ti : & ' ast hir:: TraitItem ) {
241- self . with_item_id_pushed ( ti. id , |v| intravisit:: walk_trait_item ( v, ti) ) ;
243+ self . with_item_id_pushed ( ti. id , |v| intravisit:: walk_trait_item ( v, ti) , ti . span ) ;
242244 }
243245
244246 fn visit_impl_item ( & mut self , ii : & ' ast hir:: ImplItem ) {
245- self . with_item_id_pushed ( ii. id , |v| intravisit:: walk_impl_item ( v, ii) ) ;
247+ self . with_item_id_pushed ( ii. id , |v| intravisit:: walk_impl_item ( v, ii) , ii . span ) ;
246248 }
247249
248250 fn visit_expr ( & mut self , e : & ' ast hir:: Expr ) {
0 commit comments