about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorvarkor <github@varkor.com>2019-10-23 17:40:18 +0100
committervarkor <github@varkor.com>2019-10-23 17:40:18 +0100
commit12f68e6987c4669b90a6cdac1643b99b6c677aea (patch)
tree9e7d4ab946fe9facdde7d0293015a8fb668ce1c3 /src
parentcc7294c751fd700b77c3556eaae8507661f08f22 (diff)
downloadrust-12f68e6987c4669b90a6cdac1643b99b6c677aea.tar.gz
rust-12f68e6987c4669b90a6cdac1643b99b6c677aea.zip
Account for const generalisation in combine
Diffstat (limited to 'src')
-rw-r--r--src/librustc/infer/combine.rs18
1 files changed, 15 insertions, 3 deletions
diff --git a/src/librustc/infer/combine.rs b/src/librustc/infer/combine.rs
index 2e724ac56ee..a6c3c2de139 100644
--- a/src/librustc/infer/combine.rs
+++ b/src/librustc/infer/combine.rs
@@ -605,9 +605,21 @@ impl TypeRelation<'tcx> for Generalizer<'_, 'tcx> {
         match c.val {
             ConstValue::Infer(InferConst::Var(vid)) => {
                 let mut variable_table = self.infcx.const_unification_table.borrow_mut();
-                match variable_table.probe_value(vid).val.known() {
-                    Some(u) => self.relate(&u, &u),
-                    None => Ok(c),
+                let var_value = variable_table.probe_value(vid);
+                match var_value.val {
+                    ConstVariableValue::Known { value: u } => self.relate(&u, &u),
+                    ConstVariableValue::Unknown { universe } => {
+                        if self.for_universe.can_name(universe) {
+                            Ok(c)
+                        } else {
+                            let new_var_id = variable_table.new_key(ConstVarValue {
+                                origin: var_value.origin,
+                                val: ConstVariableValue::Unknown { universe: self.for_universe },
+                            });
+                            let u = self.tcx().mk_const_var(new_var_id, c.ty);
+                            return Ok(u);
+                        }
+                    }
                 }
             }
             _ => relate::super_relate_consts(self, c, c),