//@ run-pass #![allow(dead_code)] #![allow(unused_variables)] // Test that when we match a trait reference like `Foo: Foo`, // we unify with `?0t` with `A`. In this code, if we failed to do // that, then you get an unconstrained type-variable in `call`. // // Also serves as a regression test for issue #26952, though the test // was derived from another reported regression with the same cause. use std::marker::PhantomData; trait Trait { fn foo(&self); } struct Type { a: PhantomData } fn as_trait(t: &Type) -> &dyn Trait { loop { } } fn want+?Sized>(t: &T) { } fn call(p: Type) { let q = as_trait(&p); want(q); // parameter A to `want` *would* be unconstrained } fn main() { }