Auto merge of #38057 - KiChjang:display-formal-type-param, r=nikomatsakis

Display better error messages for E0282

Fixes #36554.
This commit is contained in:
bors 2016-12-12 00:22:30 +00:00
commit 5e2f37fca9
28 changed files with 191 additions and 76 deletions

View file

@ -25,6 +25,6 @@ pub fn let_<'var, VAR, F: for<'v: 'var> Fn(Expr<'v, VAR>) -> Expr<'v, VAR>>
fn main() {
let ex = |x| {
let_(add(x,x), |y| { //~ ERROR unable to infer enough type information about `_`
let_(add(x,x), |y| { //~ ERROR unable to infer enough type information about `VAR`
let_(add(x, x), |x|x)})};
}

View file

@ -9,4 +9,4 @@
// except according to those terms.
fn main() { format!("{:?}", None); }
//~^ ERROR unable to infer enough type information about `_` [E0282]
//~^ ERROR unable to infer enough type information about `T` [E0282]

View file

@ -11,5 +11,5 @@
fn main() {
// Unconstrained type:
format!("{:?}", None);
//~^ ERROR unable to infer enough type information about `_` [E0282]
//~^ ERROR unable to infer enough type information about `T` [E0282]
}

View file

@ -12,7 +12,7 @@ use std::mem;
fn main() {
mem::transmute(0);
//~^ ERROR unable to infer enough type information about `_` [E0282]
//~| NOTE cannot infer type for `_`
//~^ ERROR unable to infer enough type information about `U` [E0282]
//~| NOTE cannot infer type for `U`
//~| NOTE type annotations or generic parameter binding
}

View file

@ -17,8 +17,8 @@ pub fn foo<State>(_: TypeWithState<State>) {}
pub fn bar() {
foo(TypeWithState(marker::PhantomData));
//~^ ERROR unable to infer enough type information about `_` [E0282]
//~| NOTE cannot infer type for `_`
//~^ ERROR unable to infer enough type information about `State` [E0282]
//~| NOTE cannot infer type for `State`
//~| NOTE type annotations or generic parameter binding
}

View file

@ -10,7 +10,7 @@
fn main() {
let v = &[];
let it = v.iter(); //~ ERROR unable to infer enough type information about `_` [E0282]
//~| NOTE cannot infer type for `_`
let it = v.iter(); //~ ERROR unable to infer enough type information about `T` [E0282]
//~| NOTE cannot infer type for `T`
//~| NOTE type annotations or generic parameter binding
}

View file

@ -32,7 +32,7 @@ impl foo for Vec<isize> {
fn m1() {
// we couldn't infer the type of the vector just based on calling foo()...
let mut x = Vec::new();
//~^ ERROR unable to infer enough type information about `_` [E0282]
//~^ ERROR unable to infer enough type information about `T` [E0282]
x.foo();
}

View file

@ -34,8 +34,8 @@ where T : Convert<U>
fn a() {
test(22, std::default::Default::default());
//~^ ERROR unable to infer enough type information about `_` [E0282]
//~| NOTE cannot infer type for `_`
//~^ ERROR unable to infer enough type information about `U` [E0282]
//~| NOTE cannot infer type for `U`
//~| NOTE type annotations or generic parameter binding
}

View file

@ -11,7 +11,7 @@
// Issue #5062
fn main() {
None; //~ ERROR unable to infer enough type information about `_` [E0282]
//~| NOTE cannot infer type for `_`
None; //~ ERROR unable to infer enough type information about `T` [E0282]
//~| NOTE cannot infer type for `T`
//~| NOTE type annotations or generic parameter binding
}

View file

@ -13,7 +13,7 @@ struct S<'a, T:'a> {
}
fn main() {
S { o: &None }; //~ ERROR unable to infer enough type information about `_` [E0282]
//~| NOTE cannot infer type for `_`
S { o: &None }; //~ ERROR unable to infer enough type information about `T` [E0282]
//~| NOTE cannot infer type for `T`
//~| NOTE type annotations or generic parameter binding
}

View file

@ -11,7 +11,7 @@
fn main() {
let _foo = Vec::new();
//~^ ERROR unable to infer enough type information about `_` [E0282]
//~| NOTE cannot infer type for `_`
//~^ ERROR unable to infer enough type information about `T` [E0282]
//~| NOTE cannot infer type for `T`
//~| NOTE type annotations or generic parameter binding
}

View file

@ -1,8 +1,8 @@
error[E0282]: unable to infer enough type information about `_`
error[E0282]: unable to infer enough type information about `T`
--> $DIR/repair_span_std_macros.rs:12:13
|
12 | let x = vec![];
| ^^^^^^ cannot infer type for `_`
| ^^^^^^ cannot infer type for `T`
|
= note: type annotations or generic parameter binding required
= note: this error originates in a macro outside of the current crate

View file

@ -0,0 +1,15 @@
// 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 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.
fn foo<X>() { }
fn main() {
foo();
}

View file

@ -0,0 +1,10 @@
error[E0282]: unable to infer enough type information about `X`
--> $DIR/missing-type-parameter.rs:14:5
|
14 | foo();
| ^^^ cannot infer type for `X`
|
= note: type annotations or generic parameter binding required
error: aborting due to previous error