25 lines
822 B
Rust
25 lines
822 B
Rust
//! This test checks that we allow subtyping predicates that contain opaque types.
|
|
//! No hidden types are being constrained in the subtyping predicate, but type and
|
|
//! lifetime variables get subtyped in the generic parameter list of the opaque.
|
|
|
|
//@ check-pass
|
|
|
|
fn foo() -> impl Default + Copy {
|
|
if false {
|
|
let x = Default::default();
|
|
// add `Subtype(?x, ?y)` obligation
|
|
let y = x;
|
|
|
|
// Make a tuple `(?x, ?y)` and equate it with `(impl Default, u32)`.
|
|
// For us to try and prove a `Subtype(impl Default, u32)` obligation,
|
|
// we have to instantiate both `?x` and `?y` without any
|
|
// `select_where_possible` calls inbetween.
|
|
let mut tup = &mut (x, y);
|
|
let assign_tup = &mut (foo(), 1u32);
|
|
tup = assign_tup;
|
|
}
|
|
1u32
|
|
}
|
|
|
|
fn main() {}
|