From: Chris Lattner Date: Sun, 10 Feb 2013 06:36:29 +0000 (+0000) Subject: ok, ok, stop fighting type punning warnings by just using a union. X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=e9288fbe4df5c912f5bb42c33a675b61d45c0a99;p=oota-llvm.git ok, ok, stop fighting type punning warnings by just using a union. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@174827 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/Bitcode/BitstreamReader.h b/include/llvm/Bitcode/BitstreamReader.h index 48a6989deb5..edec6e1da51 100644 --- a/include/llvm/Bitcode/BitstreamReader.h +++ b/include/llvm/Bitcode/BitstreamReader.h @@ -364,13 +364,16 @@ public: uint32_t R = uint32_t(CurWord); // Read the next word from the stream. - char buf[sizeof(word_t)] = {0}; - BitStream->getBitcodeBytes().readBytes(NextChar, sizeof(buf), - (uint8_t*)buf, NULL); + union { + uint8_t ArrayMember[sizeof(word_t)]; + support::detail::packed_endian_specific_integral + EndianMember; + } buf = { { 0 } }; - typedef support::detail::packed_endian_specific_integral - Endian_T; - CurWord = *(Endian_T*)buf; + BitStream->getBitcodeBytes().readBytes(NextChar, sizeof(buf), + buf.ArrayMember, NULL); + // Handle big-endian byte-swapping if necessary. + CurWord = buf.EndianMember; NextChar += sizeof(word_t);