| //! 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() {} |