summary refs log tree commit diff
path: root/compiler/rustc_data_structures/src/sip128.rs
AgeCommit message (Collapse)AuthorLines
2022-01-25Auto merge of #93014 - Kobzol:revert-92103-stable-hash-skip-zero-bytes, ↵bors-16/+2
r=the8472 Revert "Do not hash leading zero bytes of i64 numbers in Sip128 hasher" Reverts rust-lang/rust#92103. It had a (in retrospect, obvious) correctness problem where changing the order of two adjacent values would produce identical hashes, which is problematic in stable hashing (see [this comment](https://github.com/rust-lang/rust/pull/92103#issuecomment-1014625442)). I'll try to send the PR again with a fix for this issue. r? `@the8472`
2022-01-04Do not hash zero bytes of i64 and u32 in Sip128 hasherJakub Beránek-2/+16
2020-10-11SipHasher128: improve constant names and add more commentsTyson Nottingham-36/+66
2020-10-05SipHasher128: use specific struct layoutTyson Nottingham-0/+6
2020-10-05SipHasher128: use more named constants, update commentsTyson Nottingham-50/+54
2020-10-03perf: buffer SipHasher128Tyson Nottingham-196/+303
2020-09-30Stable hashing: add comments and tests concerning platform-independenceTyson Nottingham-6/+19
SipHasher128 implements short_write in an endian-independent way, yet its write_xxx Hasher trait methods undo this endian-independence by byte swapping the integer inputs on big-endian hardware. StableHasher then adds endian-independence back by also byte-swapping on big-endian hardware prior to invoking SipHasher128. This double swap may have the appearance of being a no-op, but is in fact by design. In particular, we really do want SipHasher128 to be platform-dependent, in order to be consistent with the libstd SipHasher. Try to clarify this intent. Also, add and update a couple of unit tests.
2020-08-30mv compiler to compiler/mark-0/+330