diff options
| author | Niko Matsakis <niko@alum.mit.edu> | 2018-06-01 13:17:45 -0400 |
|---|---|---|
| committer | Niko Matsakis <niko@alum.mit.edu> | 2018-06-09 11:02:13 -0400 |
| commit | 73a09f35b114d9ddf10e29df4e730d15e64f58c7 (patch) | |
| tree | 2913074e410dff9e61c791bbf91a4dd49d5309dd | |
| parent | 956e2f8348fae25d725adc0058c8156cc9be6ac2 (diff) | |
| download | rust-73a09f35b114d9ddf10e29df4e730d15e64f58c7.tar.gz rust-73a09f35b114d9ddf10e29df4e730d15e64f58c7.zip | |
skip `eq_types` and `sub_types` when the two types are equal
| -rw-r--r-- | src/librustc_mir/borrow_check/nll/type_check/mod.rs | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/src/librustc_mir/borrow_check/nll/type_check/mod.rs b/src/librustc_mir/borrow_check/nll/type_check/mod.rs index 060313399cb..697287d80c3 100644 --- a/src/librustc_mir/borrow_check/nll/type_check/mod.rs +++ b/src/librustc_mir/borrow_check/nll/type_check/mod.rs @@ -759,6 +759,11 @@ impl<'a, 'gcx, 'tcx> TypeChecker<'a, 'gcx, 'tcx> { sup: Ty<'tcx>, locations: Locations, ) -> UnitResult<'tcx> { + // Micro-optimization. + if sub == sup { + return Ok(()); + } + self.fully_perform_op( locations, || format!("sub_types({:?} <: {:?})", sub, sup), @@ -772,6 +777,11 @@ impl<'a, 'gcx, 'tcx> TypeChecker<'a, 'gcx, 'tcx> { #[inline(never)] fn eq_types(&mut self, a: Ty<'tcx>, b: Ty<'tcx>, locations: Locations) -> UnitResult<'tcx> { + // Micro-optimization. + if a == b { + return Ok(()); + } + self.fully_perform_op( locations, || format!("eq_types({:?} = {:?})", a, b), |
