about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMichael Goulet <michael@errs.io>2021-12-13 20:36:17 -0800
committerMichael Goulet <michael@errs.io>2021-12-13 20:36:17 -0800
commit75729afcc040f8df101baebc7eba438dfb044d72 (patch)
treeba388dd587cd66937b43ed1e99b686ec3e4c3dc2
parent8f117a77d0880ed59afcc1a19c72ec5c1e44b97c (diff)
downloadrust-75729afcc040f8df101baebc7eba438dfb044d72.tar.gz
rust-75729afcc040f8df101baebc7eba438dfb044d72.zip
Fix HashStable implementation on InferTy
-rw-r--r--compiler/rustc_type_ir/src/lib.rs1
-rw-r--r--src/test/ui/traits/vtable/issue-91807.rs17
2 files changed, 18 insertions, 0 deletions
diff --git a/compiler/rustc_type_ir/src/lib.rs b/compiler/rustc_type_ir/src/lib.rs
index 91dbbec782f..f11c93e9339 100644
--- a/compiler/rustc_type_ir/src/lib.rs
+++ b/compiler/rustc_type_ir/src/lib.rs
@@ -559,6 +559,7 @@ impl<CTX> HashStable<CTX> for FloatTy {
 impl<CTX> HashStable<CTX> for InferTy {
     fn hash_stable(&self, ctx: &mut CTX, hasher: &mut StableHasher) {
         use InferTy::*;
+        discriminant(self).hash_stable(ctx, hasher);
         match self {
             TyVar(v) => v.as_u32().hash_stable(ctx, hasher),
             IntVar(v) => v.index.hash_stable(ctx, hasher),
diff --git a/src/test/ui/traits/vtable/issue-91807.rs b/src/test/ui/traits/vtable/issue-91807.rs
new file mode 100644
index 00000000000..f435ff09dc3
--- /dev/null
+++ b/src/test/ui/traits/vtable/issue-91807.rs
@@ -0,0 +1,17 @@
+// check-pass
+// incremental
+
+struct Struct<T>(T);
+
+impl<T> std::ops::Deref for Struct<T> {
+    type Target = dyn Fn(T);
+    fn deref(&self) -> &Self::Target {
+        unimplemented!()
+    }
+}
+
+fn main() {
+    let f = Struct(Default::default());
+    f(0);
+    f(0);
+}