// Contravariant with respect to a region:
//
// You can upcast to a *smaller region* but not a larger one.  This is
// the normal case.

struct contravariant {
    f: fn@() -> &self/int
}

fn to_same_lifetime(bi: contravariant/&r) {
    let bj: contravariant/&r = bi;
}

fn to_shorter_lifetime(bi: contravariant/&r) {
    let bj: contravariant/&blk = bi;
}

fn to_longer_lifetime(bi: contravariant/&r) -> contravariant/&static {
    bi //~ ERROR mismatched types
}

fn main() {
}