// Test various cases where the old rules under lifetime elision
// yield slightly different results than the new rules.

#![allow(dead_code)]

trait SomeTrait {
    fn dummy(&self) { }
}

struct SomeStruct<'a> {
    r: Box<dyn SomeTrait+'a>
}

fn deref<T>(ss: &T) -> T {
    // produces the type of a deref without worrying about whether a
    // move out would actually be legal
    loop { }
}

fn load0<'a>(ss: &'a Box<dyn SomeTrait>) -> Box<dyn SomeTrait> {
    // Under old rules, the fully elaborated types of input/output were:
    //
    // for<'a,'b> fn(&'a Box<SomeTrait+'b>) -> Box<SomeTrait+'a>
    //
    // Under new rules the result is:
    //
    // for<'a> fn(&'a Box<SomeTrait+'static>) -> Box<SomeTrait+'static>
    //
    // Therefore, no type error.

    deref(ss)
}

fn load1(ss: &dyn SomeTrait) -> &dyn SomeTrait {
    // Under old rules, the fully elaborated types of input/output were:
    //
    // for<'a,'b> fn(&'a (SomeTrait+'b)) -> &'a (SomeTrait+'a)
    //
    // Under new rules the result is:
    //
    // for<'a> fn(&'a (SomeTrait+'a)) -> &'a (SomeTrait+'a)
    //
    // In both cases, returning `ss` is legal.

    ss
}

fn load2<'a>(ss: &'a dyn SomeTrait) -> &dyn SomeTrait {
    //~^ WARNING elided lifetime has a name

    // Same as `load1` but with an explicit name thrown in for fun.

    ss
}

fn load3<'a,'b>(ss: &'a dyn SomeTrait) -> &'b dyn SomeTrait {
    // Under old rules, the fully elaborated types of input/output were:
    //
    // for<'a,'b,'c>fn(&'a (SomeTrait+'c)) -> &'b (SomeTrait+'a)
    //
    // Based on the input/output types, the compiler could infer that
    //     'c : 'a
    //     'b : 'a
    // must hold, and therefore it permitted `&'a (Sometrait+'c)` to be
    // coerced to `&'b (SomeTrait+'a)`.
    //
    // Under the newer defaults, though, we get:
    //
    // for<'a,'b> fn(&'a (SomeTrait+'a)) -> &'b (SomeTrait+'b)
    //
    // which fails to type check.

    ss
        //~^ ERROR lifetime may not live long enough
}

fn main() {
}
