diff options
| -rw-r--r-- | src/test/ui/type-mismatch.rs | 86 | ||||
| -rw-r--r-- | src/test/ui/type-mismatch.stderr | 432 |
2 files changed, 518 insertions, 0 deletions
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 <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. + +trait Qux {} +struct A; +struct B; +impl Qux for A {} +impl Qux for B {} + +struct Foo<T, U: Qux = A, V: Qux = B>(T, U, V); + +struct foo; +struct bar; + +fn want<T>(t: T) {} + +fn have_usize(f: usize) { + want::<foo>(f); //~ ERROR mismatched types + want::<bar>(f); //~ ERROR mismatched types + want::<Foo<usize>>(f); //~ ERROR mismatched types + want::<Foo<usize, B>>(f); //~ ERROR mismatched types + want::<Foo<foo>>(f); //~ ERROR mismatched types + want::<Foo<foo, B>>(f); //~ ERROR mismatched types + want::<Foo<bar>>(f); //~ ERROR mismatched types + want::<Foo<bar, B>>(f); //~ ERROR mismatched types +} + +fn have_foo(f: foo) { + want::<usize>(f); //~ ERROR mismatched types + want::<bar>(f); //~ ERROR mismatched types + want::<Foo<usize>>(f); //~ ERROR mismatched types + want::<Foo<usize, B>>(f); //~ ERROR mismatched types + want::<Foo<foo>>(f); //~ ERROR mismatched types + want::<Foo<foo, B>>(f); //~ ERROR mismatched types + want::<Foo<bar>>(f); //~ ERROR mismatched types + want::<Foo<bar, B>>(f); //~ ERROR mismatched types +} + +fn have_foo_foo(f: Foo<foo>) { + want::<usize>(f); //~ ERROR mismatched types + want::<foo>(f); //~ ERROR mismatched types + want::<bar>(f); //~ ERROR mismatched types + want::<Foo<usize>>(f); //~ ERROR mismatched types + want::<Foo<usize, B>>(f); //~ ERROR mismatched types + want::<Foo<foo, B>>(f); //~ ERROR mismatched types + want::<Foo<bar>>(f); //~ ERROR mismatched types + want::<Foo<bar, B>>(f); //~ ERROR mismatched types + want::<&Foo<foo>>(f); //~ ERROR mismatched types + want::<&Foo<foo, B>>(f); //~ ERROR mismatched types +} + +fn have_foo_foo_b(f: Foo<foo, B>) { + want::<usize>(f); //~ ERROR mismatched types + want::<foo>(f); //~ ERROR mismatched types + want::<bar>(f); //~ ERROR mismatched types + want::<Foo<usize>>(f); //~ ERROR mismatched types + want::<Foo<usize, B>>(f); //~ ERROR mismatched types + want::<Foo<foo>>(f); //~ ERROR mismatched types + want::<Foo<bar>>(f); //~ ERROR mismatched types + want::<Foo<bar, B>>(f); //~ ERROR mismatched types + want::<&Foo<foo>>(f); //~ ERROR mismatched types + want::<&Foo<foo, B>>(f); //~ ERROR mismatched types +} + +fn have_foo_foo_b_a(f: Foo<foo, B, A>) { + want::<usize>(f); //~ ERROR mismatched types + want::<foo>(f); //~ ERROR mismatched types + want::<bar>(f); //~ ERROR mismatched types + want::<Foo<usize>>(f); //~ ERROR mismatched types + want::<Foo<usize, B>>(f); //~ ERROR mismatched types + want::<Foo<foo>>(f); //~ ERROR mismatched types + want::<Foo<foo, B>>(f); //~ ERROR mismatched types + want::<Foo<bar>>(f); //~ ERROR mismatched types + want::<Foo<bar, B>>(f); //~ ERROR mismatched types + want::<&Foo<foo>>(f); //~ ERROR mismatched types + want::<&Foo<foo, B>>(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::<foo>(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::<bar>(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::<Foo<usize>>(f); //~ ERROR mismatched types + | ^ expected struct `Foo`, found usize + | + = note: expected type `Foo<usize>` + found type `usize` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:28:27 + | +LL | want::<Foo<usize, B>>(f); //~ ERROR mismatched types + | ^ expected struct `Foo`, found usize + | + = note: expected type `Foo<usize, B>` + found type `usize` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:29:22 + | +LL | want::<Foo<foo>>(f); //~ ERROR mismatched types + | ^ expected struct `Foo`, found usize + | + = note: expected type `Foo<foo>` + found type `usize` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:30:25 + | +LL | want::<Foo<foo, B>>(f); //~ ERROR mismatched types + | ^ expected struct `Foo`, found usize + | + = note: expected type `Foo<foo, B>` + found type `usize` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:31:22 + | +LL | want::<Foo<bar>>(f); //~ ERROR mismatched types + | ^ expected struct `Foo`, found usize + | + = note: expected type `Foo<bar>` + found type `usize` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:32:25 + | +LL | want::<Foo<bar, B>>(f); //~ ERROR mismatched types + | ^ expected struct `Foo`, found usize + | + = note: expected type `Foo<bar, B>` + found type `usize` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:36:19 + | +LL | want::<usize>(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::<bar>(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::<Foo<usize>>(f); //~ ERROR mismatched types + | ^ expected struct `Foo`, found struct `foo` + | + = note: expected type `Foo<usize>` + found type `foo` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:39:27 + | +LL | want::<Foo<usize, B>>(f); //~ ERROR mismatched types + | ^ expected struct `Foo`, found struct `foo` + | + = note: expected type `Foo<usize, B>` + found type `foo` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:40:22 + | +LL | want::<Foo<foo>>(f); //~ ERROR mismatched types + | ^ expected struct `Foo`, found struct `foo` + | + = note: expected type `Foo<foo, A, B>` + found type `foo` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:41:25 + | +LL | want::<Foo<foo, B>>(f); //~ ERROR mismatched types + | ^ expected struct `Foo`, found struct `foo` + | + = note: expected type `Foo<foo, B, B>` + found type `foo` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:42:22 + | +LL | want::<Foo<bar>>(f); //~ ERROR mismatched types + | ^ expected struct `Foo`, found struct `foo` + | + = note: expected type `Foo<bar>` + found type `foo` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:43:25 + | +LL | want::<Foo<bar, B>>(f); //~ ERROR mismatched types + | ^ expected struct `Foo`, found struct `foo` + | + = note: expected type `Foo<bar, B>` + found type `foo` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:47:19 + | +LL | want::<usize>(f); //~ ERROR mismatched types + | ^ expected usize, found struct `Foo` + | + = note: expected type `usize` + found type `Foo<foo>` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:48:17 + | +LL | want::<foo>(f); //~ ERROR mismatched types + | ^ expected struct `foo`, found struct `Foo` + | + = note: expected type `foo` + found type `Foo<foo, A, B>` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:49:17 + | +LL | want::<bar>(f); //~ ERROR mismatched types + | ^ expected struct `bar`, found struct `Foo` + | + = note: expected type `bar` + found type `Foo<foo>` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:50:24 + | +LL | want::<Foo<usize>>(f); //~ ERROR mismatched types + | ^ expected usize, found struct `foo` + | + = note: expected type `Foo<usize, _, _>` + found type `Foo<foo, _, _>` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:51:27 + | +LL | want::<Foo<usize, B>>(f); //~ ERROR mismatched types + | ^ expected usize, found struct `foo` + | + = note: expected type `Foo<usize, B, _>` + found type `Foo<foo, A, _>` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:52:25 + | +LL | want::<Foo<foo, B>>(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::<Foo<bar>>(f); //~ ERROR mismatched types + | ^ expected struct `bar`, found struct `foo` + | + = note: expected type `Foo<bar, _, _>` + found type `Foo<foo, _, _>` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:54:25 + | +LL | want::<Foo<bar, B>>(f); //~ ERROR mismatched types + | ^ expected struct `bar`, found struct `foo` + | + = note: expected type `Foo<bar, B, _>` + found type `Foo<foo, A, _>` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:55:23 + | +LL | want::<&Foo<foo>>(f); //~ ERROR mismatched types + | ^ + | | + | expected &Foo<foo>, found struct `Foo` + | help: consider borrowing here: `&f` + | + = note: expected type `&Foo<foo>` + found type `Foo<foo>` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:56:26 + | +LL | want::<&Foo<foo, B>>(f); //~ ERROR mismatched types + | ^ expected reference, found struct `Foo` + | + = note: expected type `&Foo<foo, B>` + found type `Foo<foo>` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:60:19 + | +LL | want::<usize>(f); //~ ERROR mismatched types + | ^ expected usize, found struct `Foo` + | + = note: expected type `usize` + found type `Foo<foo, B>` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:61:17 + | +LL | want::<foo>(f); //~ ERROR mismatched types + | ^ expected struct `foo`, found struct `Foo` + | + = note: expected type `foo` + found type `Foo<foo, B, B>` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:62:17 + | +LL | want::<bar>(f); //~ ERROR mismatched types + | ^ expected struct `bar`, found struct `Foo` + | + = note: expected type `bar` + found type `Foo<foo, B>` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:63:24 + | +LL | want::<Foo<usize>>(f); //~ ERROR mismatched types + | ^ expected usize, found struct `foo` + | + = note: expected type `Foo<usize, A, _>` + found type `Foo<foo, B, _>` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:64:27 + | +LL | want::<Foo<usize, B>>(f); //~ ERROR mismatched types + | ^ expected usize, found struct `foo` + | + = note: expected type `Foo<usize, _, _>` + found type `Foo<foo, _, _>` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:65:22 + | +LL | want::<Foo<foo>>(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::<Foo<bar>>(f); //~ ERROR mismatched types + | ^ expected struct `bar`, found struct `foo` + | + = note: expected type `Foo<bar, A, _>` + found type `Foo<foo, B, _>` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:67:25 + | +LL | want::<Foo<bar, B>>(f); //~ ERROR mismatched types + | ^ expected struct `bar`, found struct `foo` + | + = note: expected type `Foo<bar, _, _>` + found type `Foo<foo, _, _>` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:68:23 + | +LL | want::<&Foo<foo>>(f); //~ ERROR mismatched types + | ^ expected &Foo<foo>, found struct `Foo` + | + = note: expected type `&Foo<foo>` + found type `Foo<foo, B>` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:69:26 + | +LL | want::<&Foo<foo, B>>(f); //~ ERROR mismatched types + | ^ + | | + | expected reference, found struct `Foo` + | help: consider borrowing here: `&f` + | + = note: expected type `&Foo<foo, B>` + found type `Foo<foo, B>` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:73:19 + | +LL | want::<usize>(f); //~ ERROR mismatched types + | ^ expected usize, found struct `Foo` + | + = note: expected type `usize` + found type `Foo<foo, B, A>` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:74:17 + | +LL | want::<foo>(f); //~ ERROR mismatched types + | ^ expected struct `foo`, found struct `Foo` + | + = note: expected type `foo` + found type `Foo<foo, B, A>` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:75:17 + | +LL | want::<bar>(f); //~ ERROR mismatched types + | ^ expected struct `bar`, found struct `Foo` + | + = note: expected type `bar` + found type `Foo<foo, B, A>` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:76:24 + | +LL | want::<Foo<usize>>(f); //~ ERROR mismatched types + | ^ expected usize, found struct `foo` + | + = note: expected type `Foo<usize, A, B>` + found type `Foo<foo, B, A>` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:77:27 + | +LL | want::<Foo<usize, B>>(f); //~ ERROR mismatched types + | ^ expected usize, found struct `foo` + | + = note: expected type `Foo<usize, _, B>` + found type `Foo<foo, _, A>` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:78:22 + | +LL | want::<Foo<foo>>(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::<Foo<foo, B>>(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::<Foo<bar>>(f); //~ ERROR mismatched types + | ^ expected struct `bar`, found struct `foo` + | + = note: expected type `Foo<bar, A, B>` + found type `Foo<foo, B, A>` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:81:25 + | +LL | want::<Foo<bar, B>>(f); //~ ERROR mismatched types + | ^ expected struct `bar`, found struct `foo` + | + = note: expected type `Foo<bar, _, B>` + found type `Foo<foo, _, A>` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:82:23 + | +LL | want::<&Foo<foo>>(f); //~ ERROR mismatched types + | ^ expected &Foo<foo>, found struct `Foo` + | + = note: expected type `&Foo<foo>` + found type `Foo<foo, B, A>` + +error[E0308]: mismatched types + --> $DIR/type-mismatch.rs:83:26 + | +LL | want::<&Foo<foo, B>>(f); //~ ERROR mismatched types + | ^ expected reference, found struct `Foo` + | + = note: expected type `&Foo<foo, B>` + found type `Foo<foo, B, A>` + +error: aborting due to 47 previous errors + +For more information about this error, try `rustc --explain E0308`. |
