40 lines
588 B
Rust
40 lines
588 B
Rust
|
// Regression test for #79902
|
||
|
|
||
|
// Check that evaluation (which is used to determine whether to copy a type in
|
||
|
// MIR building) evaluates bounds from normalizing an impl after evaluating
|
||
|
// any bounds on the impl.
|
||
|
|
||
|
// check-pass
|
||
|
|
||
|
trait A {
|
||
|
type B;
|
||
|
}
|
||
|
trait M {}
|
||
|
|
||
|
struct G<T, U>(*const T, *const U);
|
||
|
|
||
|
impl<T, U> Clone for G<T, U> {
|
||
|
fn clone(&self) -> Self {
|
||
|
G { ..*self }
|
||
|
}
|
||
|
}
|
||
|
|
||
|
impl<T, U> Copy for G<T, U::B>
|
||
|
where
|
||
|
T: A<B = U>,
|
||
|
U: A,
|
||
|
{
|
||
|
}
|
||
|
|
||
|
impl A for () {
|
||
|
type B = ();
|
||
|
}
|
||
|
|
||
|
fn is_m<T: M>(_: T) {}
|
||
|
|
||
|
fn main() {
|
||
|
let x = G(&(), &());
|
||
|
drop(x);
|
||
|
drop(x);
|
||
|
}
|