diff options
| author | Michael Goulet <michael@errs.io> | 2023-07-23 13:56:03 -0400 |
|---|---|---|
| committer | Michael Goulet <michael@errs.io> | 2023-07-23 14:13:52 -0400 |
| commit | d1380a18447e9509cc9cd5307edcb4e22ca0351b (patch) | |
| tree | 4d14a4a6c25737f6939b801604b653c42564d289 /tests | |
| parent | 77e24f90f599070af2d8051ef9adad7fe528dd78 (diff) | |
| download | rust-d1380a18447e9509cc9cd5307edcb4e22ca0351b.tar.gz rust-d1380a18447e9509cc9cd5307edcb4e22ca0351b.zip | |
Use erased self type when autoderefing for trait error suggestion
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/ui/traits/dont-autoderef-ty-with-escaping-var.rs | 22 | ||||
| -rw-r--r-- | tests/ui/traits/dont-autoderef-ty-with-escaping-var.stderr | 27 |
2 files changed, 49 insertions, 0 deletions
diff --git a/tests/ui/traits/dont-autoderef-ty-with-escaping-var.rs b/tests/ui/traits/dont-autoderef-ty-with-escaping-var.rs new file mode 100644 index 00000000000..d5ba3847ac3 --- /dev/null +++ b/tests/ui/traits/dont-autoderef-ty-with-escaping-var.rs @@ -0,0 +1,22 @@ +// issue:113951 + +trait Foo<'x, T> {} + +trait RefFoo<T> { + fn ref_foo(&self); +} + +impl<T> RefFoo<T> for T +where + for<'a> &'a mut Vec<&'a u32>: Foo<'static, T>, +{ + fn ref_foo(&self) {} +} + +fn coerce_lifetime2() { + <i32 as RefFoo<i32>>::ref_foo(unknown); + //~^ ERROR cannot find value `unknown` in this scope + //~| ERROR the trait bound `for<'a> &'a mut Vec<&'a u32>: Foo<'static, i32>` is not satisfied +} + +fn main() {} diff --git a/tests/ui/traits/dont-autoderef-ty-with-escaping-var.stderr b/tests/ui/traits/dont-autoderef-ty-with-escaping-var.stderr new file mode 100644 index 00000000000..934d20b2267 --- /dev/null +++ b/tests/ui/traits/dont-autoderef-ty-with-escaping-var.stderr @@ -0,0 +1,27 @@ +error[E0425]: cannot find value `unknown` in this scope + --> $DIR/dont-autoderef-ty-with-escaping-var.rs:17:35 + | +LL | <i32 as RefFoo<i32>>::ref_foo(unknown); + | ^^^^^^^ not found in this scope + +error[E0277]: the trait bound `for<'a> &'a mut Vec<&'a u32>: Foo<'static, i32>` is not satisfied + --> $DIR/dont-autoderef-ty-with-escaping-var.rs:17:35 + | +LL | <i32 as RefFoo<i32>>::ref_foo(unknown); + | ----------------------------- ^^^^^^^ the trait `for<'a> Foo<'static, i32>` is not implemented for `&'a mut Vec<&'a u32>` + | | + | required by a bound introduced by this call + | +note: required for `i32` to implement `RefFoo<i32>` + --> $DIR/dont-autoderef-ty-with-escaping-var.rs:9:9 + | +LL | impl<T> RefFoo<T> for T + | ^^^^^^^^^ ^ +LL | where +LL | for<'a> &'a mut Vec<&'a u32>: Foo<'static, T>, + | --------------- unsatisfied trait bound introduced here + +error: aborting due to 2 previous errors + +Some errors have detailed explanations: E0277, E0425. +For more information about an error, try `rustc --explain E0277`. |
