From 75729afcc040f8df101baebc7eba438dfb044d72 Mon Sep 17 00:00:00 2001 From: Michael Goulet Date: Mon, 13 Dec 2021 20:36:17 -0800 Subject: [PATCH] Fix HashStable implementation on InferTy --- compiler/rustc_type_ir/src/lib.rs | 1 + src/test/ui/traits/vtable/issue-91807.rs | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) create mode 100644 src/test/ui/traits/vtable/issue-91807.rs 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 @@ fn hash_stable(&self, ctx: &mut CTX, hasher: &mut StableHasher) { impl HashStable 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); + +impl std::ops::Deref for Struct { + type Target = dyn Fn(T); + fn deref(&self) -> &Self::Target { + unimplemented!() + } +} + +fn main() { + let f = Struct(Default::default()); + f(0); + f(0); +}