From 4c96932da75f46fe928959fba7e11cdd96de720e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Esteban=20K=C3=BCber?= Date: Mon, 16 Jul 2018 14:05:42 -0700 Subject: [PATCH] Change label span to point at iterator instead of iter item --- src/librustc/hir/lowering.rs | 8 +++++--- .../infer/error_reporting/need_type_info.rs | 16 ++++++++++------ src/test/ui/issue-51116.rs | 4 ++-- src/test/ui/issue-51116.stderr | 4 ++-- 4 files changed, 19 insertions(+), 13 deletions(-) diff --git a/src/librustc/hir/lowering.rs b/src/librustc/hir/lowering.rs index 358c64799d19..93fb282546bb 100644 --- a/src/librustc/hir/lowering.rs +++ b/src/librustc/hir/lowering.rs @@ -4011,10 +4011,12 @@ impl<'a> LoweringContext<'a> { let iter = self.str_to_ident("iter"); let next_ident = self.str_to_ident("__next"); - let sp = self.allow_internal_unstable(CompilerDesugaringKind::ForLoop, - pat.span); + let next_sp = self.allow_internal_unstable( + CompilerDesugaringKind::ForLoop, + head_sp, + ); let next_pat = self.pat_ident_binding_mode( - sp, + next_sp, next_ident, hir::BindingAnnotation::Mutable, ); diff --git a/src/librustc/infer/error_reporting/need_type_info.rs b/src/librustc/infer/error_reporting/need_type_info.rs index 876faadb1604..04d14f40b850 100644 --- a/src/librustc/infer/error_reporting/need_type_info.rs +++ b/src/librustc/infer/error_reporting/need_type_info.rs @@ -13,6 +13,7 @@ use hir::intravisit::{self, Visitor, NestedVisitorMap}; use infer::InferCtxt; use infer::type_variable::TypeVariableOrigin; use ty::{self, Ty, TyInfer, TyVar}; +use syntax::codemap::CompilerDesugaringKind; use syntax_pos::Span; use errors::DiagnosticBuilder; @@ -132,12 +133,15 @@ impl<'a, 'gcx, 'tcx> InferCtxt<'a, 'gcx, 'tcx> { labels.push((pattern.span, format!("consider giving this closure parameter a type"))); } else if let Some(pattern) = local_visitor.found_local_pattern { if let Some(simple_ident) = pattern.simple_ident() { - labels.push(( - pattern.span, - match pattern.span.compiler_desugaring_kind() { - None => format!("consider giving `{}` a type", simple_ident), - _ => "consider giving this a type".to_string(), - })); + match pattern.span.compiler_desugaring_kind() { + None => labels.push((pattern.span, + format!("consider giving `{}` a type", simple_ident))), + Some(CompilerDesugaringKind::ForLoop) => labels.push(( + pattern.span, + "the element type for this iterator is not specified".to_string(), + )), + _ => {} + } } else { labels.push((pattern.span, format!("consider giving the pattern a type"))); } diff --git a/src/test/ui/issue-51116.rs b/src/test/ui/issue-51116.rs index 0fdc51f29cce..34217c6236c4 100644 --- a/src/test/ui/issue-51116.rs +++ b/src/test/ui/issue-51116.rs @@ -12,13 +12,13 @@ fn main() { let tiles = Default::default(); for row in &mut tiles { for tile in row { - //~^ NOTE consider giving this a type + //~^ NOTE the element type for this iterator is not specified *tile = 0; //~^ ERROR type annotations needed //~| NOTE cannot infer type for `_` //~| NOTE type must be known at this point } } - + let tiles: [[usize; 3]; 3] = tiles; } diff --git a/src/test/ui/issue-51116.stderr b/src/test/ui/issue-51116.stderr index f2f116d47d8a..0c38688340bf 100644 --- a/src/test/ui/issue-51116.stderr +++ b/src/test/ui/issue-51116.stderr @@ -2,8 +2,8 @@ error[E0282]: type annotations needed --> $DIR/issue-51116.rs:16:13 | LL | for tile in row { - | ---- consider giving this a type -LL | //~^ NOTE consider giving this a type + | --- the element type for this iterator is not specified +LL | //~^ NOTE the element type for this iterator is not specified LL | *tile = 0; | ^^^^^ cannot infer type for `_` |