about summary refs log tree commit diff
diff options
context:
space:
mode:
authorGuillaume Gomez <guillaume1.gomez@gmail.com>2021-08-18 19:54:57 +0200
committerGitHub <noreply@github.com>2021-08-18 19:54:57 +0200
commit9b7c771713ec2678f9dbd7a398f3759b253d960e (patch)
tree17be286d6e1ec98ae3758fae14dd4bcecd1c5ee9
parent627bc60702395b0527c4c89888ad2eabfa3e3fd4 (diff)
parent58f988fa408fb58266c1fbbc62fa29c4473d5e10 (diff)
downloadrust-9b7c771713ec2678f9dbd7a398f3759b253d960e.tar.gz
rust-9b7c771713ec2678f9dbd7a398f3759b253d960e.zip
Rollup merge of #88031 - ibraheemdev:build-hasher-object-safe, r=m-ou-se
Make `BuildHasher` object safe

Resolves #87991
-rw-r--r--library/core/src/hash/mod.rs5
-rw-r--r--library/core/tests/hash/mod.rs9
2 files changed, 12 insertions, 2 deletions
diff --git a/library/core/src/hash/mod.rs b/library/core/src/hash/mod.rs
index 510e233b431..77161e961e7 100644
--- a/library/core/src/hash/mod.rs
+++ b/library/core/src/hash/mod.rs
@@ -520,7 +520,10 @@ pub trait BuildHasher {
     /// );
     /// ```
     #[unstable(feature = "build_hasher_simple_hash_one", issue = "86161")]
-    fn hash_one<T: Hash>(&self, x: T) -> u64 {
+    fn hash_one<T: Hash>(&self, x: T) -> u64
+    where
+        Self: Sized,
+    {
         let mut hasher = self.build_hasher();
         x.hash(&mut hasher);
         hasher.finish()
diff --git a/library/core/tests/hash/mod.rs b/library/core/tests/hash/mod.rs
index 1566d357490..72ccdd4848a 100644
--- a/library/core/tests/hash/mod.rs
+++ b/library/core/tests/hash/mod.rs
@@ -1,7 +1,7 @@
 mod sip;
 
 use std::default::Default;
-use std::hash::{Hash, Hasher};
+use std::hash::{BuildHasher, Hash, Hasher};
 use std::rc::Rc;
 
 struct MyHasher {
@@ -139,3 +139,10 @@ fn test_indirect_hasher() {
     }
     assert_eq!(hasher.hash, 5);
 }
+
+#[test]
+fn test_build_hasher_object_safe() {
+    use std::collections::hash_map::{DefaultHasher, RandomState};
+
+    let _: &dyn BuildHasher<Hasher = DefaultHasher> = &RandomState::new();
+}