// check-pass // revisions: current next //[next] compile-flags: -Ztrait-solver=next #![allow(non_upper_case_globals)] #![allow(dead_code)] #![allow(unused_assignments)] #![allow(unused_variables)] // Test a scenario where we generate a constraint like `?1 <: &?2`. // In such a case, it is important that we instantiate `?1` with `&?3` // where `?3 <: ?2`, and not with `&?2`. This is a regression test for // #18653. The important thing is that we build. use std::cell::RefCell; enum Wrap { WrapSome(A), WrapNone } use Wrap::*; struct T; struct U; trait Get { fn get(&self) -> &T; } impl Get for Wrap { fn get(&self) -> &(dyn MyShow + 'static) { static x: usize = 42; &x } } impl Get for Wrap { fn get(&self) -> &usize { static x: usize = 55; &x } } trait MyShow { fn dummy(&self) { } } impl<'a> MyShow for &'a (dyn MyShow + 'a) { } impl MyShow for usize { } fn constrain<'a>(rc: RefCell<&'a (dyn MyShow + 'a)>) { } fn main() { let mut collection: Wrap<_> = WrapNone; { let __arg0 = Get::get(&collection); let __args_cell = RefCell::new(__arg0); constrain(__args_cell); } collection = WrapSome(T); }