diff options
Diffstat (limited to 'src/test/ui/type')
-rw-r--r-- | src/test/ui/type/issue-101866.rs | 15 | ||||
-rw-r--r-- | src/test/ui/type/issue-101866.stderr | 18 | ||||
-rw-r--r-- | src/test/ui/type/issue-94187-verbose-type-name.rs | 13 | ||||
-rw-r--r-- | src/test/ui/type/type-check/assignment-expected-bool.stderr | 22 | ||||
-rw-r--r-- | src/test/ui/type/type-check/assignment-in-if.rs | 19 | ||||
-rw-r--r-- | src/test/ui/type/type-check/assignment-in-if.stderr | 71 | ||||
-rw-r--r-- | src/test/ui/type/type-mismatch-same-crate-name.stderr | 11 | ||||
-rw-r--r-- | src/test/ui/type/type-recursive-box-shadowed.stderr | 4 | ||||
-rw-r--r-- | src/test/ui/type/type-recursive.stderr | 42 |
9 files changed, 173 insertions, 42 deletions
diff --git a/src/test/ui/type/issue-101866.rs b/src/test/ui/type/issue-101866.rs new file mode 100644 index 000000000..d332c4adb --- /dev/null +++ b/src/test/ui/type/issue-101866.rs @@ -0,0 +1,15 @@ +trait TraitA<T> { + fn func(); +} + +struct StructA {} + +impl TraitA<i32> for StructA { + fn func() {} +} + +fn main() { + TraitA::<i32>::func(); + //~^ ERROR: cannot call associated function on trait without specifying the corresponding `impl` type [E0790] + //~| help: use the fully-qualified path to the only available implementation +} diff --git a/src/test/ui/type/issue-101866.stderr b/src/test/ui/type/issue-101866.stderr new file mode 100644 index 000000000..fe9982119 --- /dev/null +++ b/src/test/ui/type/issue-101866.stderr @@ -0,0 +1,18 @@ +error[E0790]: cannot call associated function on trait without specifying the corresponding `impl` type + --> $DIR/issue-101866.rs:12:5 + | +LL | fn func(); + | ---------- `TraitA::func` defined here +... +LL | TraitA::<i32>::func(); + | ^^^^^^^^^^^^^^^^^^^ cannot call associated function of trait + | +help: use the fully-qualified path to the only available implementation + | +LL - TraitA::<i32>::func(); +LL + <StructA as TraitA<i32>>::func(); + | + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0790`. diff --git a/src/test/ui/type/issue-94187-verbose-type-name.rs b/src/test/ui/type/issue-94187-verbose-type-name.rs new file mode 100644 index 000000000..902ef5ade --- /dev/null +++ b/src/test/ui/type/issue-94187-verbose-type-name.rs @@ -0,0 +1,13 @@ +// Check to insure that the output of `std::any::type_name` does not change based on -Zverbose +// when printing constants +// run-pass +// edition: 2018 +// revisions: normal verbose +// [verbose]compile-flags:-Zverbose + +struct Wrapper<const VALUE: usize>; + +fn main() { + assert_eq!(std::any::type_name::<[u32; 0]>(), "[u32; 0]"); + assert_eq!(std::any::type_name::<Wrapper<0>>(), "issue_94187_verbose_type_name::Wrapper<0>"); +} diff --git a/src/test/ui/type/type-check/assignment-expected-bool.stderr b/src/test/ui/type/type-check/assignment-expected-bool.stderr index e2b821f7b..56494baff 100644 --- a/src/test/ui/type/type-check/assignment-expected-bool.stderr +++ b/src/test/ui/type/type-check/assignment-expected-bool.stderr @@ -7,7 +7,7 @@ LL | let _: bool = 0 = 0; help: you might have meant to compare for equality | LL | let _: bool = 0 == 0; - | ~~ + | + error[E0308]: mismatched types --> $DIR/assignment-expected-bool.rs:9:14 @@ -18,7 +18,7 @@ LL | 0 => 0 = 0, help: you might have meant to compare for equality | LL | 0 => 0 == 0, - | ~~ + | + error[E0308]: mismatched types --> $DIR/assignment-expected-bool.rs:10:14 @@ -29,7 +29,7 @@ LL | _ => 0 = 0, help: you might have meant to compare for equality | LL | _ => 0 == 0, - | ~~ + | + error[E0308]: mismatched types --> $DIR/assignment-expected-bool.rs:14:17 @@ -40,7 +40,7 @@ LL | true => 0 = 0, help: you might have meant to compare for equality | LL | true => 0 == 0, - | ~~ + | + error[E0308]: mismatched types --> $DIR/assignment-expected-bool.rs:18:8 @@ -51,7 +51,7 @@ LL | if 0 = 0 {} help: you might have meant to compare for equality | LL | if 0 == 0 {} - | ~~ + | + error[E0308]: mismatched types --> $DIR/assignment-expected-bool.rs:20:24 @@ -62,7 +62,7 @@ LL | let _: bool = if { 0 = 0 } { help: you might have meant to compare for equality | LL | let _: bool = if { 0 == 0 } { - | ~~ + | + error[E0308]: mismatched types --> $DIR/assignment-expected-bool.rs:21:9 @@ -73,7 +73,7 @@ LL | 0 = 0 help: you might have meant to compare for equality | LL | 0 == 0 - | ~~ + | + error[E0308]: mismatched types --> $DIR/assignment-expected-bool.rs:23:9 @@ -84,7 +84,7 @@ LL | 0 = 0 help: you might have meant to compare for equality | LL | 0 == 0 - | ~~ + | + error[E0308]: mismatched types --> $DIR/assignment-expected-bool.rs:26:13 @@ -95,7 +95,7 @@ LL | let _ = (0 = 0) help: you might have meant to compare for equality | LL | let _ = (0 == 0) - | ~~ + | + error[E0308]: mismatched types --> $DIR/assignment-expected-bool.rs:27:14 @@ -106,7 +106,7 @@ LL | && { 0 = 0 } help: you might have meant to compare for equality | LL | && { 0 == 0 } - | ~~ + | + error[E0308]: mismatched types --> $DIR/assignment-expected-bool.rs:28:12 @@ -117,7 +117,7 @@ LL | || (0 = 0); help: you might have meant to compare for equality | LL | || (0 == 0); - | ~~ + | + error[E0070]: invalid left-hand side of assignment --> $DIR/assignment-expected-bool.rs:31:22 diff --git a/src/test/ui/type/type-check/assignment-in-if.rs b/src/test/ui/type/type-check/assignment-in-if.rs index 8da7b32b4..ada250df2 100644 --- a/src/test/ui/type/type-check/assignment-in-if.rs +++ b/src/test/ui/type/type-check/assignment-in-if.rs @@ -40,4 +40,23 @@ fn main() { ) { println!("{}", x); } + + if x == x && x = x && x == x { + //~^ ERROR mismatched types + //~| ERROR mismatched types + //~| ERROR mismatched types + println!("{}", x); + } + + if x == x && x == x && x = x { + //~^ ERROR mismatched types + //~| ERROR mismatched types + println!("{}", x); + } + + if x = 1 && x == 1 { + //~^ ERROR mismatched types + //~| ERROR mismatched types + println!("{}", x); + } } diff --git a/src/test/ui/type/type-check/assignment-in-if.stderr b/src/test/ui/type/type-check/assignment-in-if.stderr index f4ef44e24..8ab08e25e 100644 --- a/src/test/ui/type/type-check/assignment-in-if.stderr +++ b/src/test/ui/type/type-check/assignment-in-if.stderr @@ -7,7 +7,7 @@ LL | if x = x { help: you might have meant to compare for equality | LL | if x == x { - | ~~ + | + error[E0308]: mismatched types --> $DIR/assignment-in-if.rs:20:8 @@ -18,7 +18,7 @@ LL | if (x = x) { help: you might have meant to compare for equality | LL | if (x == x) { - | ~~ + | + error[E0308]: mismatched types --> $DIR/assignment-in-if.rs:25:8 @@ -29,7 +29,7 @@ LL | if y = (Foo { foo: x }) { help: you might have meant to compare for equality | LL | if y == (Foo { foo: x }) { - | ~~ + | + error[E0308]: mismatched types --> $DIR/assignment-in-if.rs:30:8 @@ -40,7 +40,7 @@ LL | if 3 = x { help: you might have meant to compare for equality | LL | if 3 == x { - | ~~ + | + error[E0308]: mismatched types --> $DIR/assignment-in-if.rs:36:13 @@ -51,7 +51,7 @@ LL | x = 4 help: you might have meant to compare for equality | LL | x == 4 - | ~~ + | + error[E0308]: mismatched types --> $DIR/assignment-in-if.rs:38:13 @@ -62,8 +62,65 @@ LL | x = 5 help: you might have meant to compare for equality | LL | x == 5 - | ~~ + | + -error: aborting due to 6 previous errors +error[E0308]: mismatched types + --> $DIR/assignment-in-if.rs:44:18 + | +LL | if x == x && x = x && x == x { + | ^ expected `bool`, found `usize` + +error[E0308]: mismatched types + --> $DIR/assignment-in-if.rs:44:22 + | +LL | if x == x && x = x && x == x { + | ^ expected `bool`, found `usize` + +error[E0308]: mismatched types + --> $DIR/assignment-in-if.rs:44:8 + | +LL | if x == x && x = x && x == x { + | ^^^^^^^^^^^^^^^^^^^^^^^^^ expected `bool`, found `()` + | +help: you might have meant to compare for equality + | +LL | if x == x && x == x && x == x { + | + + +error[E0308]: mismatched types + --> $DIR/assignment-in-if.rs:51:28 + | +LL | if x == x && x == x && x = x { + | ^ expected `bool`, found `usize` + +error[E0308]: mismatched types + --> $DIR/assignment-in-if.rs:51:8 + | +LL | if x == x && x == x && x = x { + | ^^^^^^^^^^^^^^^^^^^^^^^^^ expected `bool`, found `()` + | +help: you might have meant to compare for equality + | +LL | if x == x && x == x && x == x { + | + + +error[E0308]: mismatched types + --> $DIR/assignment-in-if.rs:57:12 + | +LL | if x = 1 && x == 1 { + | ^ expected `bool`, found integer + +error[E0308]: mismatched types + --> $DIR/assignment-in-if.rs:57:8 + | +LL | if x = 1 && x == 1 { + | ^^^^^^^^^^^^^^^ expected `bool`, found `()` + | +help: you might have meant to compare for equality + | +LL | if x == 1 && x == 1 { + | + + +error: aborting due to 13 previous errors For more information about this error, try `rustc --explain E0308`. diff --git a/src/test/ui/type/type-mismatch-same-crate-name.stderr b/src/test/ui/type/type-mismatch-same-crate-name.stderr index 783f747fa..fcafd315e 100644 --- a/src/test/ui/type/type-mismatch-same-crate-name.stderr +++ b/src/test/ui/type/type-mismatch-same-crate-name.stderr @@ -6,6 +6,17 @@ LL | a::try_foo(foo2); | | | arguments to this function are incorrect | + = note: struct `main::a::Foo` and struct `main::a::Foo` have similar names, but are actually distinct types +note: struct `main::a::Foo` is defined in crate `crate_a2` + --> $DIR/auxiliary/crate_a2.rs:1:1 + | +LL | pub struct Foo; + | ^^^^^^^^^^^^^^ +note: struct `main::a::Foo` is defined in crate `crate_a1` + --> $DIR/auxiliary/crate_a1.rs:1:1 + | +LL | pub struct Foo; + | ^^^^^^^^^^^^^^ = note: perhaps two different versions of crate `crate_a1` are being used? note: function defined here --> $DIR/auxiliary/crate_a1.rs:10:8 diff --git a/src/test/ui/type/type-recursive-box-shadowed.stderr b/src/test/ui/type/type-recursive-box-shadowed.stderr index c22d848f3..cb0e98287 100644 --- a/src/test/ui/type/type-recursive-box-shadowed.stderr +++ b/src/test/ui/type/type-recursive-box-shadowed.stderr @@ -2,12 +2,12 @@ error[E0072]: recursive type `Foo` has infinite size --> $DIR/type-recursive-box-shadowed.rs:7:1 | LL | struct Foo { - | ^^^^^^^^^^ recursive type has infinite size + | ^^^^^^^^^^ LL | LL | inner: Foo, | --- recursive without indirection | -help: insert some indirection (e.g., a `Box`, `Rc`, or `&`) to make `Foo` representable +help: insert some indirection (e.g., a `Box`, `Rc`, or `&`) to break the cycle | LL | inner: Box<Foo>, | ++++ + diff --git a/src/test/ui/type/type-recursive.stderr b/src/test/ui/type/type-recursive.stderr index 320271028..9a4d798f6 100644 --- a/src/test/ui/type/type-recursive.stderr +++ b/src/test/ui/type/type-recursive.stderr @@ -2,12 +2,12 @@ error[E0072]: recursive type `T1` has infinite size --> $DIR/type-recursive.rs:1:1 | LL | struct T1 { - | ^^^^^^^^^ recursive type has infinite size + | ^^^^^^^^^ LL | foo: isize, LL | foolish: T1, | -- recursive without indirection | -help: insert some indirection (e.g., a `Box`, `Rc`, or `&`) to make `T1` representable +help: insert some indirection (e.g., a `Box`, `Rc`, or `&`) to break the cycle | LL | foolish: Box<T1>, | ++++ + @@ -16,11 +16,11 @@ error[E0072]: recursive type `T2` has infinite size --> $DIR/type-recursive.rs:6:1 | LL | struct T2 { - | ^^^^^^^^^ recursive type has infinite size + | ^^^^^^^^^ LL | inner: Option<T2>, - | ---------- recursive without indirection + | -- recursive without indirection | -help: insert some indirection (e.g., a `Box`, `Rc`, or `&`) to make `T2` representable +help: insert some indirection (e.g., a `Box`, `Rc`, or `&`) to break the cycle | LL | inner: Option<Box<T2>>, | ++++ + @@ -29,11 +29,11 @@ error[E0072]: recursive type `T3` has infinite size --> $DIR/type-recursive.rs:12:1 | LL | struct T3 { - | ^^^^^^^^^ recursive type has infinite size + | ^^^^^^^^^ LL | inner: OptionT3, | -------- recursive without indirection | -help: insert some indirection (e.g., a `Box`, `Rc`, or `&`) to make `T3` representable +help: insert some indirection (e.g., a `Box`, `Rc`, or `&`) to break the cycle | LL | inner: Box<OptionT3>, | ++++ + @@ -42,11 +42,9 @@ error[E0072]: recursive type `T4` has infinite size --> $DIR/type-recursive.rs:16:1 | LL | struct T4(Option<T4>); - | ^^^^^^^^^ ---------- recursive without indirection - | | - | recursive type has infinite size + | ^^^^^^^^^ -- recursive without indirection | -help: insert some indirection (e.g., a `Box`, `Rc`, or `&`) to make `T4` representable +help: insert some indirection (e.g., a `Box`, `Rc`, or `&`) to break the cycle | LL | struct T4(Option<Box<T4>>); | ++++ + @@ -55,11 +53,11 @@ error[E0072]: recursive type `T5` has infinite size --> $DIR/type-recursive.rs:18:1 | LL | enum T5 { - | ^^^^^^^ recursive type has infinite size + | ^^^^^^^ LL | Variant(Option<T5>), - | ---------- recursive without indirection + | -- recursive without indirection | -help: insert some indirection (e.g., a `Box`, `Rc`, or `&`) to make `T5` representable +help: insert some indirection (e.g., a `Box`, `Rc`, or `&`) to break the cycle | LL | Variant(Option<Box<T5>>), | ++++ + @@ -68,11 +66,11 @@ error[E0072]: recursive type `T6` has infinite size --> $DIR/type-recursive.rs:22:1 | LL | enum T6 { - | ^^^^^^^ recursive type has infinite size + | ^^^^^^^ LL | Variant{ field: Option<T6> }, - | ---------- recursive without indirection + | -- recursive without indirection | -help: insert some indirection (e.g., a `Box`, `Rc`, or `&`) to make `T6` representable +help: insert some indirection (e.g., a `Box`, `Rc`, or `&`) to break the cycle | LL | Variant{ field: Option<Box<T6>> }, | ++++ + @@ -81,14 +79,14 @@ error[E0072]: recursive type `T7` has infinite size --> $DIR/type-recursive.rs:26:1 | LL | struct T7 { - | ^^^^^^^^^ recursive type has infinite size + | ^^^^^^^^^ LL | foo: std::cell::Cell<Option<T7>>, - | --------------------------- recursive without indirection + | -- recursive without indirection | -help: insert some indirection (e.g., a `Box`, `Rc`, or `&`) to make `T7` representable +help: insert some indirection (e.g., a `Box`, `Rc`, or `&`) to break the cycle | -LL | foo: Box<std::cell::Cell<Option<T7>>>, - | ++++ + +LL | foo: std::cell::Cell<Option<Box<T7>>>, + | ++++ + error: aborting due to 7 previous errors |