diff options
| author | Guillaume Gomez <guillaume1.gomez@gmail.com> | 2022-11-12 17:25:02 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-11-12 17:25:02 +0100 |
| commit | fe803645005d190fd0bb147ccdee07d6d607cc68 (patch) | |
| tree | accfe868966303be2f27a2e185fb5d45c44b079e /src | |
| parent | 6601e2014881ce7bcd156851ed56457029eafe8f (diff) | |
| parent | 55f1f993ff87c15597bd0620e3cbde49601de8bb (diff) | |
| download | rust-fe803645005d190fd0bb147ccdee07d6d607cc68.tar.gz rust-fe803645005d190fd0bb147ccdee07d6d607cc68.zip | |
Rollup merge of #104261 - compiler-errors:formal-and-expected-differ, r=estebank
More accurately report error when formal and expected signature types differ Fixes #104242
Diffstat (limited to 'src')
| -rw-r--r-- | src/test/ui/argument-suggestions/formal-and-expected-differ.rs | 25 | ||||
| -rw-r--r-- | src/test/ui/argument-suggestions/formal-and-expected-differ.stderr | 30 |
2 files changed, 55 insertions, 0 deletions
diff --git a/src/test/ui/argument-suggestions/formal-and-expected-differ.rs b/src/test/ui/argument-suggestions/formal-and-expected-differ.rs new file mode 100644 index 00000000000..5e3b55ca525 --- /dev/null +++ b/src/test/ui/argument-suggestions/formal-and-expected-differ.rs @@ -0,0 +1,25 @@ +pub trait Foo { + type T; +} + +impl Foo for i32 { + type T = f32; +} + +pub struct U<T1, T2>(T1, S<T2>) +where + T1: Foo<T = T2>; + +pub struct S<T>(T); + +fn main() { + // The error message here isn't great -- it has to do with the fact that the + // `expected_inputs_for_expected_output` deduced inputs differs from the inputs + // that we infer from the constraints of the signature. + // + // I am not really sure what the best way of presenting this error message is, + // since right now it just suggests changing `3u32` <=> `3f32` back and forth. + let _: U<_, u32> = U(1, S(3u32)); + //~^ ERROR mismatched types + //~| ERROR mismatched types +} diff --git a/src/test/ui/argument-suggestions/formal-and-expected-differ.stderr b/src/test/ui/argument-suggestions/formal-and-expected-differ.stderr new file mode 100644 index 00000000000..905875b5277 --- /dev/null +++ b/src/test/ui/argument-suggestions/formal-and-expected-differ.stderr @@ -0,0 +1,30 @@ +error[E0308]: mismatched types + --> $DIR/formal-and-expected-differ.rs:22:29 + | +LL | let _: U<_, u32> = U(1, S(3u32)); + | - ^^^^^^^ expected `f32`, found `u32` + | | + | arguments to this struct are incorrect + | + = note: expected struct `S<f32>` + found struct `S<u32>` +note: tuple struct defined here + --> $DIR/formal-and-expected-differ.rs:9:12 + | +LL | pub struct U<T1, T2>(T1, S<T2>) + | ^ + +error[E0308]: mismatched types + --> $DIR/formal-and-expected-differ.rs:22:24 + | +LL | let _: U<_, u32> = U(1, S(3u32)); + | --------- ^^^^^^^^^^^^^ expected `u32`, found `f32` + | | + | expected due to this + | + = note: expected struct `U<_, u32>` + found struct `U<i32, f32>` + +error: aborting due to 2 previous errors + +For more information about this error, try `rustc --explain E0308`. |
