Author: baldrick
Date: Wed Nov 28 04:36:19 2007
New Revision: 44400

URL: http://llvm.org/viewvc/llvm-project?rev=44400&view=rev
Log:
My compiler complains that "x always evaluates to true"
in this call:

        Result.IntVal = APInt(80, 2, x);

What is x?

        uint16_t x[8];

I deduce that the APInt constructor being used is this one:

  APInt(uint32_t numBits, uint64_t val, bool isSigned = false);

rather than this one:

  APInt(uint32_t numBits, uint32_t numWords, const uint64_t bigVal[]);

That doesn't seem right!  This fix compiles but is otherwise completely
untested.

Modified:
    llvm/trunk/lib/ExecutionEngine/ExecutionEngine.cpp

Modified: llvm/trunk/lib/ExecutionEngine/ExecutionEngine.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/ExecutionEngine.cpp?rev=44400&r1=44399&r2=44400&view=diff

==============================================================================
--- llvm/trunk/lib/ExecutionEngine/ExecutionEngine.cpp (original)
+++ llvm/trunk/lib/ExecutionEngine/ExecutionEngine.cpp Wed Nov 28 04:36:19 2007
@@ -712,13 +712,17 @@
     break;
   case Type::X86_FP80TyID: {
     // This is endian dependent, but it will only work on x86 anyway.
-    uint16_t x[8], *p = (uint16_t*)Ptr;
+    uint16_t *p = (uint16_t*)Ptr;
+    union {
+      uint16_t x[8];
+      uint64_t y[2];
+    };
     x[0] = p[1];
     x[1] = p[2];
     x[2] = p[3];
     x[3] = p[4];
     x[4] = p[0];
-    Result.IntVal = APInt(80, 2, x);
+    Result.IntVal = APInt(80, 2, y);
     break;
   }
   default:


_______________________________________________
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits

Reply via email to