From 6592eacf9006d046e8bc4999600e2973a3b56eac Mon Sep 17 00:00:00 2001 From: Jay Foad Date: Thu, 23 Feb 2012 09:16:04 +0000 Subject: The implementation of GeneralHash::addBits broke C++ aliasing rules; fix it with memcpy. This also fixes a problem on big-endian hosts, where addUnaligned would return different results depending on the alignment of the data. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@151247 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Support/Hashing.cpp | 46 ---------------------------------------------- 1 file changed, 46 deletions(-) delete mode 100644 lib/Support/Hashing.cpp (limited to 'lib/Support/Hashing.cpp') diff --git a/lib/Support/Hashing.cpp b/lib/Support/Hashing.cpp deleted file mode 100644 index 21fcdd7e7f..0000000000 --- a/lib/Support/Hashing.cpp +++ /dev/null @@ -1,46 +0,0 @@ -//===-- llvm/ADT/Hashing.cpp - Utilities for hashing ------------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -#include "llvm/ADT/Hashing.h" - -namespace llvm { - -// Add a possibly unaligned sequence of bytes. -void GeneralHash::addUnaligned(const uint8_t *I, const uint8_t *E) { - ptrdiff_t Length = E - I; - if ((uintptr_t(I) & 3) == 0) { - while (Length > 3) { - mix(*reinterpret_cast(I)); - I += 4; - Length -= 4; - } - } else { - while (Length > 3) { - mix( - uint32_t(I[0]) + - (uint32_t(I[1]) << 8) + - (uint32_t(I[2]) << 16) + - (uint32_t(I[3]) << 24)); - I += 4; - Length -= 4; - } - } - - if (Length & 3) { - uint32_t Data = 0; - switch (Length & 3) { - case 3: Data |= uint32_t(I[2]) << 16; // fall through - case 2: Data |= uint32_t(I[1]) << 8; // fall through - case 1: Data |= uint32_t(I[0]); break; - } - mix(Data); - } -} - -} -- cgit v1.2.3-18-g5258