// Test that we don't ICE when computing the drop types for

//@ ignore-compare-mode-polonius (explicit revisions)
//@ revisions: nll polonius
//@ [polonius] compile-flags: -Zpolonius=next

trait Decode<'a> {
    type Decoder;
}

trait NonImplementedTrait {
    type Assoc;
}
struct NonImplementedStruct;

pub struct ADecoder<'a> {
    b: <B as Decode<'a>>::Decoder,
}
fn make_a_decoder<'a>() -> ADecoder<'a> {
    //~^ ERROR the trait bound
    //[nll]~| ERROR the trait bound
    panic!()
}

struct B;
impl<'a> Decode<'a> for B {
    type Decoder = BDecoder;
    //~^ ERROR the trait bound
}
pub struct BDecoder {
    non_implemented: <NonImplementedStruct as NonImplementedTrait>::Assoc,
    //~^ ERROR the trait bound
}

fn main() {}
