diff --git a/src/test/ui/type-mismatch.rs b/src/test/ui/type-mismatch.rs new file mode 100644 index 00000000000..2592b07eda7 --- /dev/null +++ b/src/test/ui/type-mismatch.rs @@ -0,0 +1,86 @@ +// Copyright 2018 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. + +trait Qux {} +struct A; +struct B; +impl Qux for A {} +impl Qux for B {} + +struct Foo(T, U, V); + +struct foo; +struct bar; + +fn want(t: T) {} + +fn have_usize(f: usize) { + want::(f); //~ ERROR mismatched types + want::(f); //~ ERROR mismatched types + want::>(f); //~ ERROR mismatched types + want::>(f); //~ ERROR mismatched types + want::>(f); //~ ERROR mismatched types + want::>(f); //~ ERROR mismatched types + want::>(f); //~ ERROR mismatched types + want::>(f); //~ ERROR mismatched types +} + +fn have_foo(f: foo) { + want::(f); //~ ERROR mismatched types + want::(f); //~ ERROR mismatched types + want::>(f); //~ ERROR mismatched types + want::>(f); //~ ERROR mismatched types + want::>(f); //~ ERROR mismatched types + want::>(f); //~ ERROR mismatched types + want::>(f); //~ ERROR mismatched types + want::>(f); //~ ERROR mismatched types +} + +fn have_foo_foo(f: Foo) { + want::(f); //~ ERROR mismatched types + want::(f); //~ ERROR mismatched types + want::(f); //~ ERROR mismatched types + want::>(f); //~ ERROR mismatched types + want::>(f); //~ ERROR mismatched types + want::>(f); //~ ERROR mismatched types + want::>(f); //~ ERROR mismatched types + want::>(f); //~ ERROR mismatched types + want::<&Foo>(f); //~ ERROR mismatched types + want::<&Foo>(f); //~ ERROR mismatched types +} + +fn have_foo_foo_b(f: Foo) { + want::(f); //~ ERROR mismatched types + want::(f); //~ ERROR mismatched types + want::(f); //~ ERROR mismatched types + want::>(f); //~ ERROR mismatched types + want::>(f); //~ ERROR mismatched types + want::>(f); //~ ERROR mismatched types + want::>(f); //~ ERROR mismatched types + want::>(f); //~ ERROR mismatched types + want::<&Foo>(f); //~ ERROR mismatched types + want::<&Foo>(f); //~ ERROR mismatched types +} + +fn have_foo_foo_b_a(f: Foo) { + want::(f); //~ ERROR mismatched types + want::(f); //~ ERROR mismatched types + want::(f); //~ ERROR mismatched types + want::>(f); //~ ERROR mismatched types + want::>(f); //~ ERROR mismatched types + want::>(f); //~ ERROR mismatched types + want::>(f); //~ ERROR mismatched types + want::>(f); //~ ERROR mismatched types + want::>(f); //~ ERROR mismatched types + want::<&Foo>(f); //~ ERROR mismatched types + want::<&Foo>(f); //~ ERROR mismatched types +} + +fn main() {} diff --git a/src/test/ui/type-mismatch.stderr b/src/test/ui/type-mismatch.stderr new file mode 100644 index 00000000000..634f3b402a1 --- /dev/null +++ b/src/test/ui/type-mismatch.stderr @@ -0,0 +1,432 @@ +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:25:17 + | +LL | want::(f); //~ ERROR mismatched types + | ^ expected struct `foo`, found usize + | + = note: expected type `foo` + found type `usize` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:26:17 + | +LL | want::(f); //~ ERROR mismatched types + | ^ expected struct `bar`, found usize + | + = note: expected type `bar` + found type `usize` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:27:24 + | +LL | want::>(f); //~ ERROR mismatched types + | ^ expected struct `Foo`, found usize + | + = note: expected type `Foo` + found type `usize` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:28:27 + | +LL | want::>(f); //~ ERROR mismatched types + | ^ expected struct `Foo`, found usize + | + = note: expected type `Foo` + found type `usize` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:29:22 + | +LL | want::>(f); //~ ERROR mismatched types + | ^ expected struct `Foo`, found usize + | + = note: expected type `Foo` + found type `usize` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:30:25 + | +LL | want::>(f); //~ ERROR mismatched types + | ^ expected struct `Foo`, found usize + | + = note: expected type `Foo` + found type `usize` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:31:22 + | +LL | want::>(f); //~ ERROR mismatched types + | ^ expected struct `Foo`, found usize + | + = note: expected type `Foo` + found type `usize` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:32:25 + | +LL | want::>(f); //~ ERROR mismatched types + | ^ expected struct `Foo`, found usize + | + = note: expected type `Foo` + found type `usize` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:36:19 + | +LL | want::(f); //~ ERROR mismatched types + | ^ expected usize, found struct `foo` + | + = note: expected type `usize` + found type `foo` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:37:17 + | +LL | want::(f); //~ ERROR mismatched types + | ^ expected struct `bar`, found struct `foo` + | + = note: expected type `bar` + found type `foo` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:38:24 + | +LL | want::>(f); //~ ERROR mismatched types + | ^ expected struct `Foo`, found struct `foo` + | + = note: expected type `Foo` + found type `foo` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:39:27 + | +LL | want::>(f); //~ ERROR mismatched types + | ^ expected struct `Foo`, found struct `foo` + | + = note: expected type `Foo` + found type `foo` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:40:22 + | +LL | want::>(f); //~ ERROR mismatched types + | ^ expected struct `Foo`, found struct `foo` + | + = note: expected type `Foo` + found type `foo` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:41:25 + | +LL | want::>(f); //~ ERROR mismatched types + | ^ expected struct `Foo`, found struct `foo` + | + = note: expected type `Foo` + found type `foo` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:42:22 + | +LL | want::>(f); //~ ERROR mismatched types + | ^ expected struct `Foo`, found struct `foo` + | + = note: expected type `Foo` + found type `foo` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:43:25 + | +LL | want::>(f); //~ ERROR mismatched types + | ^ expected struct `Foo`, found struct `foo` + | + = note: expected type `Foo` + found type `foo` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:47:19 + | +LL | want::(f); //~ ERROR mismatched types + | ^ expected usize, found struct `Foo` + | + = note: expected type `usize` + found type `Foo` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:48:17 + | +LL | want::(f); //~ ERROR mismatched types + | ^ expected struct `foo`, found struct `Foo` + | + = note: expected type `foo` + found type `Foo` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:49:17 + | +LL | want::(f); //~ ERROR mismatched types + | ^ expected struct `bar`, found struct `Foo` + | + = note: expected type `bar` + found type `Foo` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:50:24 + | +LL | want::>(f); //~ ERROR mismatched types + | ^ expected usize, found struct `foo` + | + = note: expected type `Foo` + found type `Foo` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:51:27 + | +LL | want::>(f); //~ ERROR mismatched types + | ^ expected usize, found struct `foo` + | + = note: expected type `Foo` + found type `Foo` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:52:25 + | +LL | want::>(f); //~ ERROR mismatched types + | ^ expected struct `B`, found struct `A` + | + = note: expected type `Foo<_, B, _>` + found type `Foo<_, A, _>` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:53:22 + | +LL | want::>(f); //~ ERROR mismatched types + | ^ expected struct `bar`, found struct `foo` + | + = note: expected type `Foo` + found type `Foo` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:54:25 + | +LL | want::>(f); //~ ERROR mismatched types + | ^ expected struct `bar`, found struct `foo` + | + = note: expected type `Foo` + found type `Foo` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:55:23 + | +LL | want::<&Foo>(f); //~ ERROR mismatched types + | ^ + | | + | expected &Foo, found struct `Foo` + | help: consider borrowing here: `&f` + | + = note: expected type `&Foo` + found type `Foo` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:56:26 + | +LL | want::<&Foo>(f); //~ ERROR mismatched types + | ^ expected reference, found struct `Foo` + | + = note: expected type `&Foo` + found type `Foo` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:60:19 + | +LL | want::(f); //~ ERROR mismatched types + | ^ expected usize, found struct `Foo` + | + = note: expected type `usize` + found type `Foo` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:61:17 + | +LL | want::(f); //~ ERROR mismatched types + | ^ expected struct `foo`, found struct `Foo` + | + = note: expected type `foo` + found type `Foo` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:62:17 + | +LL | want::(f); //~ ERROR mismatched types + | ^ expected struct `bar`, found struct `Foo` + | + = note: expected type `bar` + found type `Foo` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:63:24 + | +LL | want::>(f); //~ ERROR mismatched types + | ^ expected usize, found struct `foo` + | + = note: expected type `Foo` + found type `Foo` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:64:27 + | +LL | want::>(f); //~ ERROR mismatched types + | ^ expected usize, found struct `foo` + | + = note: expected type `Foo` + found type `Foo` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:65:22 + | +LL | want::>(f); //~ ERROR mismatched types + | ^ expected struct `A`, found struct `B` + | + = note: expected type `Foo<_, A, _>` + found type `Foo<_, B, _>` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:66:22 + | +LL | want::>(f); //~ ERROR mismatched types + | ^ expected struct `bar`, found struct `foo` + | + = note: expected type `Foo` + found type `Foo` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:67:25 + | +LL | want::>(f); //~ ERROR mismatched types + | ^ expected struct `bar`, found struct `foo` + | + = note: expected type `Foo` + found type `Foo` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:68:23 + | +LL | want::<&Foo>(f); //~ ERROR mismatched types + | ^ expected &Foo, found struct `Foo` + | + = note: expected type `&Foo` + found type `Foo` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:69:26 + | +LL | want::<&Foo>(f); //~ ERROR mismatched types + | ^ + | | + | expected reference, found struct `Foo` + | help: consider borrowing here: `&f` + | + = note: expected type `&Foo` + found type `Foo` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:73:19 + | +LL | want::(f); //~ ERROR mismatched types + | ^ expected usize, found struct `Foo` + | + = note: expected type `usize` + found type `Foo` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:74:17 + | +LL | want::(f); //~ ERROR mismatched types + | ^ expected struct `foo`, found struct `Foo` + | + = note: expected type `foo` + found type `Foo` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:75:17 + | +LL | want::(f); //~ ERROR mismatched types + | ^ expected struct `bar`, found struct `Foo` + | + = note: expected type `bar` + found type `Foo` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:76:24 + | +LL | want::>(f); //~ ERROR mismatched types + | ^ expected usize, found struct `foo` + | + = note: expected type `Foo` + found type `Foo` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:77:27 + | +LL | want::>(f); //~ ERROR mismatched types + | ^ expected usize, found struct `foo` + | + = note: expected type `Foo` + found type `Foo` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:78:22 + | +LL | want::>(f); //~ ERROR mismatched types + | ^ expected struct `A`, found struct `B` + | + = note: expected type `Foo<_, A, B>` + found type `Foo<_, B, A>` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:79:25 + | +LL | want::>(f); //~ ERROR mismatched types + | ^ expected struct `B`, found struct `A` + | + = note: expected type `Foo<_, _, B>` + found type `Foo<_, _, A>` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:80:22 + | +LL | want::>(f); //~ ERROR mismatched types + | ^ expected struct `bar`, found struct `foo` + | + = note: expected type `Foo` + found type `Foo` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:81:25 + | +LL | want::>(f); //~ ERROR mismatched types + | ^ expected struct `bar`, found struct `foo` + | + = note: expected type `Foo` + found type `Foo` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:82:23 + | +LL | want::<&Foo>(f); //~ ERROR mismatched types + | ^ expected &Foo, found struct `Foo` + | + = note: expected type `&Foo` + found type `Foo` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:83:26 + | +LL | want::<&Foo>(f); //~ ERROR mismatched types + | ^ expected reference, found struct `Foo` + | + = note: expected type `&Foo` + found type `Foo` + +error: aborting due to 47 previous errors + +For more information about this error, try `rustc --explain E0308`.