Skip to content

Commit 95da53f

Browse files
authored
Rollup merge of rust-lang#73800 - nikic:hash_i, r=kennytm
Forward Hash::write_iN to Hash::write_uN The `Hasher::write_iN()` methods should forward to `Hasher::write_uN()`, because some Hasher implementations implement only the `write_uN()` variants, with the expectation that `write_iN()` will use the same implementation. Most notably, this is the case for the [FxHasher](https://github.com/rust-lang/rustc-hash/blob/5e09ea0a1c7ab7e4f9e27771f5a0e5a36c58d1bb/src/lib.rs#L111) used by rustc itself. This used to be the case previously, but was broken in rust-lang#59982. As the PR description makes no mention of this particular change, I assume it was unintentional. In a local test, this mitigates the regression from rust-lang#73526 on at least one test-case (cc @cuviper), because we're no longer at the mercy of `FxHasher::write()` getting inlined to get reasonable performance.
2 parents 2c1b732 + 4c14f9d commit 95da53f

File tree

1 file changed

+5
-5
lines changed

1 file changed

+5
-5
lines changed

src/libcore/hash/mod.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -333,31 +333,31 @@ pub trait Hasher {
333333
#[inline]
334334
#[stable(feature = "hasher_write", since = "1.3.0")]
335335
fn write_i16(&mut self, i: i16) {
336-
self.write(&i.to_ne_bytes())
336+
self.write_u16(i as u16)
337337
}
338338
/// Writes a single `i32` into this hasher.
339339
#[inline]
340340
#[stable(feature = "hasher_write", since = "1.3.0")]
341341
fn write_i32(&mut self, i: i32) {
342-
self.write(&i.to_ne_bytes())
342+
self.write_u32(i as u32)
343343
}
344344
/// Writes a single `i64` into this hasher.
345345
#[inline]
346346
#[stable(feature = "hasher_write", since = "1.3.0")]
347347
fn write_i64(&mut self, i: i64) {
348-
self.write(&i.to_ne_bytes())
348+
self.write_u64(i as u64)
349349
}
350350
/// Writes a single `i128` into this hasher.
351351
#[inline]
352352
#[stable(feature = "i128", since = "1.26.0")]
353353
fn write_i128(&mut self, i: i128) {
354-
self.write(&i.to_ne_bytes())
354+
self.write_u128(i as u128)
355355
}
356356
/// Writes a single `isize` into this hasher.
357357
#[inline]
358358
#[stable(feature = "hasher_write", since = "1.3.0")]
359359
fn write_isize(&mut self, i: isize) {
360-
self.write(&i.to_ne_bytes())
360+
self.write_usize(i as usize)
361361
}
362362
}
363363

0 commit comments

Comments
 (0)