diff --git a/src/librustc/middle/typeck/infer/error_reporting.rs b/src/librustc/middle/typeck/infer/error_reporting.rs index 8ff5b3c902493..2a8a695b63ed1 100644 --- a/src/librustc/middle/typeck/infer/error_reporting.rs +++ b/src/librustc/middle/typeck/infer/error_reporting.rs @@ -869,6 +869,19 @@ impl<'a, 'tcx> ErrorReporting for InferCtxt<'a, 'tcx> { ast::TypeImplItem(_) => None, } }, + ast_map::NodeTraitItem(ref item) => { + match **item { + ast::ProvidedMethod(ref m) => { + Some((m.pe_fn_decl(), + m.pe_generics(), + m.pe_fn_style(), + m.pe_ident(), + Some(&m.pe_explicit_self().node), + m.span)) + } + _ => None + } + } _ => None }, None => None diff --git a/src/test/compile-fail/issue-17758.rs b/src/test/compile-fail/issue-17758.rs new file mode 100644 index 0000000000000..bb480e5e4dd82 --- /dev/null +++ b/src/test/compile-fail/issue-17758.rs @@ -0,0 +1,22 @@ +// Copyright 2014 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// Test that regionck suggestions in a provided method of a trait +// don't ICE + +trait Foo<'a> { + fn foo(&'a self); + fn bar(&self) { + self.foo(); + //~^ ERROR mismatched types: expected `&'a Self`, found `&Self` (lifetime mismatch) + } +} + +fn main() {}