diff options
| author | fee1-dead <ent3rm4n@gmail.com> | 2023-07-06 09:20:32 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-07-06 09:20:32 +0800 |
| commit | a105aa227fd6d82a8f77fe30478c6216d15cd638 (patch) | |
| tree | 4c62d2fcb57df6e824bc986dc807f881ddf28bca | |
| parent | baba9047ebdba3f0555d5c4443f2668a7a1ac0c8 (diff) | |
| parent | 40f2fbf61e8daf19a06a237e35e94aafdc649fc7 (diff) | |
| download | rust-a105aa227fd6d82a8f77fe30478c6216d15cd638.tar.gz rust-a105aa227fd6d82a8f77fe30478c6216d15cd638.zip | |
Rollup merge of #113163 - JohnTitor:issue-112895, r=compiler-errors
Add a regression test for #112895 Closes #112895 if the second option is enough to close the issue r? `@compiler-errors`
| -rw-r--r-- | tests/ui/generic-associated-types/gat-bounds-not-checked-with-right-substitutions.rs | 29 | ||||
| -rw-r--r-- | tests/ui/generic-associated-types/gat-bounds-not-checked-with-right-substitutions.stderr | 11 |
2 files changed, 40 insertions, 0 deletions
diff --git a/tests/ui/generic-associated-types/gat-bounds-not-checked-with-right-substitutions.rs b/tests/ui/generic-associated-types/gat-bounds-not-checked-with-right-substitutions.rs new file mode 100644 index 00000000000..05d205266b4 --- /dev/null +++ b/tests/ui/generic-associated-types/gat-bounds-not-checked-with-right-substitutions.rs @@ -0,0 +1,29 @@ +// This test checks that we correctly reject the following unsound code. + +trait Lengthen<T> { + fn lengthen(self) -> T; +} + +impl<'a> Lengthen<&'a str> for &'a str { + fn lengthen(self) -> &'a str { self } +} + +trait Gat { + type Gat<'a>: for<'b> Lengthen<Self::Gat<'b>>; + + fn lengthen(s: Self::Gat<'_>) -> Self::Gat<'static> { + s.lengthen() + } +} + +impl Gat for () { + type Gat<'a> = &'a str; //~ ERROR: implementation of `Lengthen` is not general enough +} + +fn main() { + let s = "hello, garbage".to_string(); + let borrow: &'static str = <() as Gat>::lengthen(&s); + drop(s); + + println!("{borrow}"); +} diff --git a/tests/ui/generic-associated-types/gat-bounds-not-checked-with-right-substitutions.stderr b/tests/ui/generic-associated-types/gat-bounds-not-checked-with-right-substitutions.stderr new file mode 100644 index 00000000000..7ea7a7b2de7 --- /dev/null +++ b/tests/ui/generic-associated-types/gat-bounds-not-checked-with-right-substitutions.stderr @@ -0,0 +1,11 @@ +error: implementation of `Lengthen` is not general enough + --> $DIR/gat-bounds-not-checked-with-right-substitutions.rs:20:20 + | +LL | type Gat<'a> = &'a str; + | ^^^^^^^ implementation of `Lengthen` is not general enough + | + = note: `Lengthen<&'0 str>` would have to be implemented for the type `&'a str`, for any lifetime `'0`... + = note: ...but `Lengthen<&'1 str>` is actually implemented for the type `&'1 str`, for some specific lifetime `'1` + +error: aborting due to previous error + |
