//@ run-pass
// Test that the lifetime of the enclosing `&` is used for the object
// lifetime bound.

//@ pretty-expanded FIXME #23616

#![allow(dead_code)]

use std::fmt::Display;

trait Test {
    fn foo(&self) { }
}

struct Ref<'a,T:'a+?Sized> {
    r: &'a T
}

struct Ref2<'a,'b,T:'a+'b+?Sized> {
    a: &'a T,
    b: &'b T
}

struct SomeStruct<'a> {
    t: Ref<'a, dyn Test>,
    u: Ref<'a, dyn Test+'a>,
}

fn a<'a>(t: Ref<'a, dyn Test>, mut ss: SomeStruct<'a>) {
    ss.t = t;
}

fn b<'a>(t: Ref<'a, dyn Test>, mut ss: SomeStruct<'a>) {
    ss.u = t;
}

fn c<'a>(t: Ref<'a, dyn Test+'a>, mut ss: SomeStruct<'a>) {
    ss.t = t;
}

fn d<'a>(t: Ref<'a, dyn Test+'a>, mut ss: SomeStruct<'a>) {
    ss.u = t;
}

fn e<'a>(_: Ref<'a, dyn Display+'static>) {}
fn g<'a, 'b>(_: Ref2<'a, 'b, dyn Display+'static>) {}


fn main() {
    // Inside a function body, we can just infer all
    // lifetimes, to allow Ref<'tmp, Display+'static>
    // and Ref2<'tmp, 'tmp, Display+'static>.
    let x = &0 as &(dyn Display+'static);
    let r: Ref<dyn Display> = Ref { r: x };
    let r2: Ref2<dyn Display> = Ref2 { a: x, b: x };
    e(r);
    g(r2);
}
