From cdaee4aba76bf3c5a3a817715e4ee33f738e3644 Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Thu, 17 Mar 2016 05:22:53 -0400 Subject: [PATCH] pick off some easy cases for LUB/GLB in regions the goal here is to minimize creating variables --- .../middle/infer/region_inference/mod.rs | 25 ++++++++++--------- 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/src/librustc/middle/infer/region_inference/mod.rs b/src/librustc/middle/infer/region_inference/mod.rs index 36462b68288c..0772641dbded 100644 --- a/src/librustc/middle/infer/region_inference/mod.rs +++ b/src/librustc/middle/infer/region_inference/mod.rs @@ -530,16 +530,14 @@ impl<'a, 'tcx> RegionVarBindings<'a, 'tcx> { assert!(self.values_are_none()); debug!("RegionVarBindings: lub_regions({:?}, {:?})", a, b); - match (a, b) { - (ReStatic, _) | (_, ReStatic) => { - ReStatic // nothing lives longer than static - } - - _ => { - self.combine_vars(Lub, a, b, origin.clone(), |this, old_r, new_r| { - this.make_subregion(origin.clone(), old_r, new_r) - }) - } + if a == ty::ReStatic || b == ty::ReStatic { + ReStatic // nothing lives longer than static + } else if a == b { + a // LUB(a,a) = a + } else { + self.combine_vars(Lub, a, b, origin.clone(), |this, old_r, new_r| { + this.make_subregion(origin.clone(), old_r, new_r) + }) } } @@ -550,8 +548,11 @@ impl<'a, 'tcx> RegionVarBindings<'a, 'tcx> { debug!("RegionVarBindings: glb_regions({:?}, {:?})", a, b); match (a, b) { (ReStatic, r) | (r, ReStatic) => { - // static lives longer than everything else - r + r // static lives longer than everything else + } + + _ if a == b => { + a // GLB(a,a) = a } _ => {