From 1fce415649784ecaf3bcb3a6916e10284c0affec Mon Sep 17 00:00:00 2001 From: scalexm Date: Thu, 29 Nov 2018 20:50:16 +0100 Subject: [PATCH] Correctly generalize inference variables in `nll_relate` --- src/librustc/infer/nll_relate/mod.rs | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/src/librustc/infer/nll_relate/mod.rs b/src/librustc/infer/nll_relate/mod.rs index ce5aee81ef9d7..972ba16f7e2c7 100644 --- a/src/librustc/infer/nll_relate/mod.rs +++ b/src/librustc/infer/nll_relate/mod.rs @@ -762,23 +762,18 @@ where drop(variables); self.relate(&u, &u) } - TypeVariableValue::Unknown { universe } => { - if self.universe.cannot_name(universe) { - debug!( - "TypeGeneralizer::tys: root universe {:?} cannot name\ - variable in universe {:?}", - self.universe, - universe - ); - return Err(TypeError::Mismatch); - } - + TypeVariableValue::Unknown { universe: _universe } => { if self.ambient_variance == ty::Bivariant { // FIXME: we may need a WF predicate (related to #54105). } let origin = *variables.var_origin(vid); + + // Replacing with a new variable in the universe `self.universe`, + // it will be unified later with the original type variable in + // the universe `_universe`. let new_var_id = variables.new_var(self.universe, false, origin); + let u = self.tcx().mk_var(new_var_id); debug!( "generalize: replacing original vid={:?} with new={:?}",