diff options
| author | lcnr <rust@lcnr.de> | 2022-08-25 11:12:04 +0200 |
|---|---|---|
| committer | lcnr <rust@lcnr.de> | 2022-08-25 11:12:04 +0200 |
| commit | ef7bda3b62b7d6821acb4603e2c72b7120b02059 (patch) | |
| tree | 68f1c7c0dd88f530b1a84797b167f188ad9141b9 /src | |
| parent | 7e3e8a816f91fda5c6e05c659d7038747aff0b55 (diff) | |
no unnormalized types for implied bounds
Diffstat (limited to 'src')
| -rw-r--r-- | src/test/ui/implied-bounds/impl-header-unnormalized-types.rs | 28 | ||||
| -rw-r--r-- | src/test/ui/implied-bounds/impl-header-unnormalized-types.stderr | 20 |
2 files changed, 48 insertions, 0 deletions
diff --git a/src/test/ui/implied-bounds/impl-header-unnormalized-types.rs b/src/test/ui/implied-bounds/impl-header-unnormalized-types.rs new file mode 100644 index 00000000000..d84539f8ab5 --- /dev/null +++ b/src/test/ui/implied-bounds/impl-header-unnormalized-types.rs @@ -0,0 +1,28 @@ +struct Foo<T>(T); + +trait GoodBye { + type Forget; +} +impl<T> GoodBye for T { + type Forget = (); +} + +trait NeedsWf<'a, 'b> { + type Assoc; +} + +impl<'a, 'b> NeedsWf<'a, 'b> for Foo<<&'a &'b () as GoodBye>::Forget> { + type Assoc = &'a &'b (); + //~^ ERROR in type `&'a &'b ()`, reference has a longer lifetime than the data it references +} + +fn needs_wf<'a, 'b, T: NeedsWf<'a, 'b>>() {} + +fn foo<'a: 'a, 'b: 'b>(_: &'b String) { + needs_wf::<'a, 'b, Foo<()>>(); +} + +fn main() { + let x = String::from("hello"); + foo::<'static, '_>(&x); +} diff --git a/src/test/ui/implied-bounds/impl-header-unnormalized-types.stderr b/src/test/ui/implied-bounds/impl-header-unnormalized-types.stderr new file mode 100644 index 00000000000..88abd5f54c2 --- /dev/null +++ b/src/test/ui/implied-bounds/impl-header-unnormalized-types.stderr @@ -0,0 +1,20 @@ +error[E0491]: in type `&'a &'b ()`, reference has a longer lifetime than the data it references + --> $DIR/impl-header-unnormalized-types.rs:15:18 + | +LL | type Assoc = &'a &'b (); + | ^^^^^^^^^^ + | +note: the pointer is valid for the lifetime `'a` as defined here + --> $DIR/impl-header-unnormalized-types.rs:14:6 + | +LL | impl<'a, 'b> NeedsWf<'a, 'b> for Foo<<&'a &'b () as GoodBye>::Forget> { + | ^^ +note: but the referenced data is only valid for the lifetime `'b` as defined here + --> $DIR/impl-header-unnormalized-types.rs:14:10 + | +LL | impl<'a, 'b> NeedsWf<'a, 'b> for Foo<<&'a &'b () as GoodBye>::Forget> { + | ^^ + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0491`. |
