Aliasing through a union member is valid.
authorDavid Neto <dneto@google.com>
Mon, 23 Nov 2015 20:15:41 +0000 (15:15 -0500)
committerDavid Neto <dneto@google.com>
Mon, 23 Nov 2015 20:35:00 +0000 (15:35 -0500)
Take back my previous TODO.

source/endian.cpp
test/UnitSPIRV.h

index 39ecbcc..8c39f29 100644 (file)
@@ -33,7 +33,9 @@ enum {
   I32_ENDIAN_BIG = 0x00010203ul,
 };
 
-// TODO(dneto): This relies on undefined behaviour. Fix that.
+// This constant value allows the detection of the host machine's endianness.
+// Accessing it through the "value" member is valid due to C++11 section 3.10
+// paragraph 10.
 static const union {
   unsigned char bytes[4];
   uint32_t value;
index 1545915..808ad5e 100644 (file)
@@ -61,8 +61,6 @@ enum {
   I32_ENDIAN_BIG = 0x00010203ul,
 };
 
-// TODO(dneto): Using a union this way relies on undefined behaviour.
-// Replace this with uses of BitwiseCast from util/bitutils.h
 static const union {
   unsigned char bytes[4];
   uint32_t value;