Use a union to cast int to fp
authorChris Lattner <sabre@nondot.org>
Tue, 22 Apr 2003 20:20:28 +0000 (20:20 +0000)
committerChris Lattner <sabre@nondot.org>
Tue, 22 Apr 2003 20:20:28 +0000 (20:20 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5849 91177308-0d34-0410-b5e6-96231b3b80d8

lib/AsmParser/Lexer.l

index 92d4f3424f87b938b0912f2b12e7d2463b66364e..85852e2851391d7098fb0216507bfd469304853a 100644 (file)
@@ -73,15 +73,17 @@ static uint64_t HexIntToVal(const char *Buffer) {
 // point representation of it.
 //
 static double HexToFP(const char *Buffer) {
-  uint64_t Result = HexIntToVal(Buffer);
-
-  assert(sizeof(double) == sizeof(Result) &&
-         "Data sizes incompatible on this target!");
   // Behave nicely in the face of C TBAA rules... see:
   // http://www.nullstone.com/htmls/category/aliastyp.htm
-  //
-  char *ProxyPointer = (char*)&Result;
-  return *(double*)ProxyPointer;   // Cast Hex constant to double
+  union {
+    uint64_t UI;
+    double FP;
+  } UIntToFP;
+  UIntToFP.UI = HexIntToVal(Buffer);
+
+  assert(sizeof(double) == sizeof(uint64_t) &&
+         "Data sizes incompatible on this target!");
+  return UIntToFP.FP;   // Cast Hex constant to double
 }