about summary refs log tree commit diff
diff options
context:
space:
mode:
authorvarkor <github@varkor.com>2019-03-12 20:55:19 +0000
committervarkor <github@varkor.com>2019-05-01 23:10:57 +0100
commit2308d2d68aa726eac33e8a5a43e70ab1b002ed1b (patch)
tree64b674361617d73dbda60480c7c43daed87a2c34
parente70797b575f4806528e24f7316cbfbacb27c6cf2 (diff)
downloadrust-2308d2d68aa726eac33e8a5a43e70ab1b002ed1b.tar.gz
rust-2308d2d68aa726eac33e8a5a43e70ab1b002ed1b.zip
Handle `ConstValue::Placeholder` in `canonicalizer`
-rw-r--r--src/librustc/infer/canonical/canonicalizer.rs12
-rw-r--r--src/librustc/infer/canonical/mod.rs13
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 @@ impl<'cx, 'gcx, 'tcx> TypeFolder<'gcx, 'tcx> for Canonicalizer<'cx, 'gcx, 'tcx>
                             }
                             return self.canonicalize_const_var(
                                 CanonicalVarInfo {
-                                    kind: CanonicalVarKind::Const(ui)
+                                    kind: CanonicalVarKind::Const(ui),
                                 },
-                                c
+                                c,
                             );
                         }
                     }
@@ -471,6 +471,14 @@ impl<'cx, 'gcx, 'tcx> TypeFolder<'gcx, 'tcx> for Canonicalizer<'cx, 'gcx, 'tcx>
                         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 @@ impl<'cx, 'gcx, 'tcx> InferCtxt<'cx, 'gcx, 'tcx> {
             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()
             }
         }
     }