| //@ check-pass |
| //@ compile-flags: --emit=mir,link |
| // Regression test for issue #68264 |
| // Checks that we don't encounter overflow |
| // when running const-prop on functions with |
| // complicated bounds |
| pub trait Query {} |
| |
| pub trait AsQuery { |
| type Query: Query; |
| } |
| pub trait Table: AsQuery + Sized {} |
| |
| pub trait LimitDsl { |
| type Output; |
| } |
| |
| pub(crate) trait LoadQuery<Conn, U>: RunQueryDsl<Conn> {} |
| |
| impl<T: Query> AsQuery for T { |
| type Query = Self; |
| } |
| |
| impl<T> LimitDsl for T |
| where |
| T: Table, |
| T::Query: LimitDsl, |
| { |
| type Output = <T::Query as LimitDsl>::Output; |
| } |
| |
| pub(crate) trait RunQueryDsl<Conn>: Sized { |
| fn first<U>(self, _conn: &Conn) -> U |
| where |
| Self: LimitDsl, |
| Self::Output: LoadQuery<Conn, U>, |
| { |
| // Overflow is caused by this function body |
| unimplemented!() |
| } |
| } |
| |
| fn main() {} |