about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMichael Hewson <michael@michaelhewson.ca>2017-11-09 08:39:02 -0500
committerMichael Hewson <michael@michaelhewson.ca>2017-11-09 08:42:33 -0500
commitdcbb27aa60f5105a49d5e416490d6549385c325d (patch)
tree61be0d3d8f4b18db310ea20333a9d82ac7cba610
parent7f8b003fbb965a3abfec75c70999332035d1f613 (diff)
downloadrust-dcbb27aa60f5105a49d5e416490d6549385c325d.tar.gz
rust-dcbb27aa60f5105a49d5e416490d6549385c325d.zip
fix the bug in region_inference where constraint origins were being overwritten
-rw-r--r--src/librustc/infer/region_inference/mod.rs5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/librustc/infer/region_inference/mod.rs b/src/librustc/infer/region_inference/mod.rs
index 8351be49076..0bc388a0089 100644
--- a/src/librustc/infer/region_inference/mod.rs
+++ b/src/librustc/infer/region_inference/mod.rs
@@ -633,11 +633,12 @@ impl<'a, 'gcx, 'tcx> RegionVarBindings<'a, 'gcx, 'tcx> {
 
         debug!("RegionVarBindings: add_constraint({:?})", constraint);
 
-        if self.constraints.borrow_mut().insert(constraint, origin).is_none() {
+        self.constraints.borrow_mut().entry(constraint).or_insert_with(|| {
             if self.in_snapshot() {
                 self.undo_log.borrow_mut().push(AddConstraint(constraint));
             }
-        }
+            origin
+        });
     }
 
     fn add_verify(&self, verify: Verify<'tcx>) {