]> git.lizzy.rs Git - rust.git/blob - src/librustc_typeck/variance/xform.rs
Rollup merge of #61420 - felixrabe:patch-2, r=dtolnay
[rust.git] / src / librustc_typeck / variance / xform.rs
1 use rustc::ty;
2
3 pub fn glb(v1: ty::Variance, v2: ty::Variance) -> ty::Variance {
4     // Greatest lower bound of the variance lattice as
5     // defined in The Paper:
6     //
7     //       *
8     //    -     +
9     //       o
10     match (v1, v2) {
11         (ty::Invariant, _) |
12         (_, ty::Invariant) => ty::Invariant,
13
14         (ty::Covariant, ty::Contravariant) => ty::Invariant,
15         (ty::Contravariant, ty::Covariant) => ty::Invariant,
16
17         (ty::Covariant, ty::Covariant) => ty::Covariant,
18
19         (ty::Contravariant, ty::Contravariant) => ty::Contravariant,
20
21         (x, ty::Bivariant) |
22         (ty::Bivariant, x) => x,
23     }
24 }