Skip to content

Commit

Permalink
Rollup merge of #98538 - TaKO8Ki:add-test-for-issue-91883, r=Mark-Sim…
Browse files Browse the repository at this point in the history
…ulacrum

Add a ui test for issue #91883

closes #91883
  • Loading branch information
matthiaskrgr authored Jun 26, 2022
2 parents 50b6e7d + 30724eb commit 5efe7c7
Show file tree
Hide file tree
Showing 2 changed files with 68 additions and 0 deletions.
42 changes: 42 additions & 0 deletions src/test/ui/generic-associated-types/issue-91883.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
#![feature(generic_associated_types)]

use std::fmt::Debug;
use std::marker::PhantomData;

#[derive(Debug)]
pub struct TransactionImpl<'db> {
_marker: PhantomData<&'db ()>,
}

#[derive(Debug)]
pub struct CursorImpl<'txn> {
_marker: PhantomData<&'txn ()>,
}

pub trait Cursor<'txn> {}

pub trait Transaction<'db>: Send + Sync + Debug + Sized {
type Cursor<'tx>: Cursor<'tx>
where
'db: 'tx,
Self: 'tx;

fn cursor<'tx>(&'tx self) -> Result<Self::Cursor<'tx>, ()>
where
'db: 'tx;
}

impl<'tx> Cursor<'tx> for CursorImpl<'tx> {}

impl<'db> Transaction<'db> for TransactionImpl<'db> {
type Cursor<'tx> = CursorImpl<'tx>; //~ ERROR lifetime bound not satisfied

fn cursor<'tx>(&'tx self) -> Result<Self::Cursor<'tx>, ()>
where
'db: 'tx,
{
loop {}
}
}

fn main() {}
26 changes: 26 additions & 0 deletions src/test/ui/generic-associated-types/issue-91883.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
error[E0478]: lifetime bound not satisfied
--> $DIR/issue-91883.rs:32:24
|
LL | / type Cursor<'tx>: Cursor<'tx>
LL | | where
LL | | 'db: 'tx,
LL | | Self: 'tx;
| |__________________- definition of `Cursor` from trait
...
LL | type Cursor<'tx> = CursorImpl<'tx>;
| ^^^^^^^^^^^^^^^- help: try copying these clauses from the trait: `where 'db: 'tx, Self: 'tx`
|
note: lifetime parameter instantiated with the lifetime `'db` as defined here
--> $DIR/issue-91883.rs:31:6
|
LL | impl<'db> Transaction<'db> for TransactionImpl<'db> {
| ^^^
note: but lifetime parameter must outlive the lifetime `'tx` as defined here
--> $DIR/issue-91883.rs:32:17
|
LL | type Cursor<'tx> = CursorImpl<'tx>;
| ^^^

error: aborting due to previous error

For more information about this error, try `rustc --explain E0478`.

0 comments on commit 5efe7c7

Please sign in to comment.