OSDN Git Service

ok, ok, stop fighting type punning warnings by just using a union.
authorChris Lattner <sabre@nondot.org>
Sun, 10 Feb 2013 06:36:29 +0000 (06:36 +0000)
committerChris Lattner <sabre@nondot.org>
Sun, 10 Feb 2013 06:36:29 +0000 (06:36 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@174827 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Bitcode/BitstreamReader.h

index 48a6989..edec6e1 100644 (file)
@@ -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);