[llvm] r174827 - ok, ok, stop fighting type punning warnings by just using a union.
Chris Lattner
sabre at nondot.org
Sat Feb 9 22:36:29 PST 2013
Author: lattner
Date: Sun Feb 10 00:36:29 2013
New Revision: 174827
URL: http://llvm.org/viewvc/llvm-project?rev=174827&view=rev
Log:
ok, ok, stop fighting type punning warnings by just using a union.
Modified:
llvm/trunk/include/llvm/Bitcode/BitstreamReader.h
Modified: llvm/trunk/include/llvm/Bitcode/BitstreamReader.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Bitcode/BitstreamReader.h?rev=174827&r1=174826&r2=174827&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Bitcode/BitstreamReader.h (original)
+++ llvm/trunk/include/llvm/Bitcode/BitstreamReader.h Sun Feb 10 00:36:29 2013
@@ -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
+ <word_t, support::little, support::unaligned> EndianMember;
+ } buf = { { 0 } };
- typedef support::detail::packed_endian_specific_integral
- <word_t, support::little, support::unaligned> 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);
More information about the llvm-commits
mailing list