From 2308d2d68aa726eac33e8a5a43e70ab1b002ed1b Mon Sep 17 00:00:00 2001 From: varkor Date: Tue, 12 Mar 2019 20:55:19 +0000 Subject: [PATCH] Handle `ConstValue::Placeholder` in `canonicalizer` --- src/librustc/infer/canonical/canonicalizer.rs | 12 ++++++++++-- src/librustc/infer/canonical/mod.rs | 13 +++++++++++-- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/src/librustc/infer/canonical/canonicalizer.rs b/src/librustc/infer/canonical/canonicalizer.rs index 22e5767df33..95310996c18 100644 --- a/src/librustc/infer/canonical/canonicalizer.rs +++ b/src/librustc/infer/canonical/canonicalizer.rs @@ -454,9 +454,9 @@ fn fold_const(&mut self, c: &'tcx ty::LazyConst<'tcx>) -> &'tcx ty::LazyConst<'t } return self.canonicalize_const_var( CanonicalVarInfo { - kind: CanonicalVarKind::Const(ui) + kind: CanonicalVarKind::Const(ui), }, - c + c, ); } } @@ -471,6 +471,14 @@ fn fold_const(&mut self, c: &'tcx ty::LazyConst<'tcx>) -> &'tcx ty::LazyConst<'t return c; } } + ConstValue::Placeholder(placeholder) => { + return self.canonicalize_const_var( + CanonicalVarInfo { + kind: CanonicalVarKind::PlaceholderConst(placeholder), + }, + c, + ); + } _ => {} } } diff --git a/src/librustc/infer/canonical/mod.rs b/src/librustc/infer/canonical/mod.rs index 9fad1f47f13..a5694818b98 100644 --- a/src/librustc/infer/canonical/mod.rs +++ b/src/librustc/infer/canonical/mod.rs @@ -414,8 +414,17 @@ fn instantiate_canonical_var( CanonicalVarKind::PlaceholderConst( ty::PlaceholderConst { universe, name }, ) => { - let _ = (universe, name); - unimplemented!() // FIXME(const_generics) + let universe_mapped = universe_map(universe); + let placeholder_mapped = ty::PlaceholderConst { + universe: universe_mapped, + name, + }; + self.tcx.mk_lazy_const(ty::LazyConst::Evaluated( + ty::Const { + val: ConstValue::Placeholder(placeholder_mapped), + ty: self.tcx.types.err, // FIXME(const_generics) + } + )).into() } } } -- 2.44.0