//@ compile-flags: --crate-type=lib //@ revisions: current next current_sized_hierarchy next_sized_hierarchy //@ ignore-compare-mode-next-solver (explicit revisions) //@[current] check-pass //@[next] check-pass //@[next] compile-flags: -Znext-solver //@[next_sized_hierarchy] compile-flags: -Znext-solver #![cfg_attr(any(current_sized_hierarchy, next_sized_hierarchy), feature(sized_hierarchy))] // Test that we avoid incomplete inference when normalizing. Without this, // `Trait`'s implicit `MetaSized` supertrait requires proving `T::Assoc<_>: MetaSized` // before checking the `new` arguments, resulting in eagerly constraining the inference // var to `u32`. This is undesirable and would breaking code. pub trait Trait { type Assoc: OtherTrait; } pub trait OtherTrait { fn new(r: R) -> R { r } } pub fn function() where T::Assoc<[u32; 1]>: Clone, { let _x = T::Assoc::new(()); //[next_sized_hierarchy]~^ ERROR mismatched types //[current_sized_hierarchy]~^^ ERROR mismatched types }