about summary refs log tree commit diff
diff options
context:
space:
mode:
authorBen Kimock <kimockb@gmail.com>2022-10-09 15:18:08 -0400
committerBen Kimock <kimockb@gmail.com>2022-10-09 15:18:08 -0400
commitbfd5bfe6ba007039eacb75ed087ef893bce70e77 (patch)
treefa6d3854bcc23972a0039c79306ca4ce84c4865d
parent0ca356586fed56002b10920fd21ddf6fb12de797 (diff)
downloadrust-bfd5bfe6ba007039eacb75ed087ef893bce70e77.tar.gz
rust-bfd5bfe6ba007039eacb75ed087ef893bce70e77.zip
Add a regression test for #39137
-rw-r--r--src/test/ui/deriving/deriving-hash.rs20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/test/ui/deriving/deriving-hash.rs b/src/test/ui/deriving/deriving-hash.rs
index 8b51370bca5..16738ec4ae4 100644
--- a/src/test/ui/deriving/deriving-hash.rs
+++ b/src/test/ui/deriving/deriving-hash.rs
@@ -44,6 +44,17 @@ fn fake_hash<A: Hash>(v: &mut Vec<u8>, a: A) {
     a.hash(&mut FakeHasher(v));
 }
 
+struct OnlyOneByteHasher;
+impl Hasher for OnlyOneByteHasher {
+    fn finish(&self) -> u64 {
+        unreachable!()
+    }
+
+    fn write(&mut self, bytes: &[u8]) {
+        assert_eq!(bytes.len(), 1);
+    }
+}
+
 fn main() {
     let person1 = Person {
         id: 5,
@@ -73,4 +84,13 @@ fn main() {
     let mut v = vec![];
     fake_hash(&mut v, SingleVariantEnum::A(17));
     assert_eq!(vec![17], v);
+
+    // issue #39137
+    #[repr(u8)]
+    #[derive(Hash)]
+    enum E {
+        A,
+        B,
+    }
+    E::A.hash(&mut OnlyOneByteHasher);
 }