about summary refs log tree commit diff
diff options
context:
space:
mode:
authorRalf Jung <post@ralfj.de>2020-06-01 21:04:11 +0200
committerRalf Jung <post@ralfj.de>2020-06-22 09:19:08 +0200
commit9576e307a7b8ac0c812fac927d247761662e7d1a (patch)
tree5423fea0b435a3d6bff7095a409cb47c0ff8d448
parent93e3552d040edfa67cdedfe2fe4a44fe0c4ead59 (diff)
downloadrust-9576e307a7b8ac0c812fac927d247761662e7d1a.tar.gz
rust-9576e307a7b8ac0c812fac927d247761662e7d1a.zip
also normalize_erasing_regions
-rw-r--r--src/librustc_mir/transform/validate.rs7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/librustc_mir/transform/validate.rs b/src/librustc_mir/transform/validate.rs
index 14c67c2372c..40189ca5c12 100644
--- a/src/librustc_mir/transform/validate.rs
+++ b/src/librustc_mir/transform/validate.rs
@@ -89,6 +89,13 @@ impl<'a, 'tcx> TypeChecker<'a, 'tcx> {
             // Equal types, all is good.
             return true;
         }
+        // Normalize projections and things like that.
+        let src = self.tcx.normalize_erasing_regions(self.param_env, src);
+        let dest = self.tcx.normalize_erasing_regions(self.param_env, dest);
+        // It's worth checking equality again.
+        if src == dest {
+            return true;
+        }
 
         // Type-changing assignments can happen for (at least) two reasons:
         // 1. `&mut T` -> `&T` gets optimized from a reborrow to a mere assignment.