about summary refs log tree commit diff
diff options
context:
space:
mode:
authorNiko Matsakis <niko@alum.mit.edu>2018-06-01 13:17:45 -0400
committerNiko Matsakis <niko@alum.mit.edu>2018-06-09 11:02:13 -0400
commit73a09f35b114d9ddf10e29df4e730d15e64f58c7 (patch)
tree2913074e410dff9e61c791bbf91a4dd49d5309dd
parent956e2f8348fae25d725adc0058c8156cc9be6ac2 (diff)
downloadrust-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.rs10
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),