42 lines
620 B
Rust
42 lines
620 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
|
|
|
|
#![allow(dropping_copy_types)]
|
|
|
|
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);
|
|
}
|