From 73a09f35b114d9ddf10e29df4e730d15e64f58c7 Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Fri, 1 Jun 2018 13:17:45 -0400 Subject: [PATCH] skip `eq_types` and `sub_types` when the two types are equal --- src/librustc_mir/borrow_check/nll/type_check/mod.rs | 10 ++++++++++ 1 file changed, 10 insertions(+) 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 060313399cb5..697287d80c37 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),