[llvm-commits] [llvm-gcc-4.2] r68970 - /llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp

Chris Lattner sabre at nondot.org
Mon Apr 13 11:03:09 PDT 2009


Author: lattner
Date: Mon Apr 13 13:03:08 2009
New Revision: 68970

URL: http://llvm.org/viewvc/llvm-project?rev=68970&view=rev
Log:
Fix a bug in my r68968 patch: INTEGER_CST's can have pointer and
floating point type in GCC trees (!).

Modified:
    llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp

Modified: llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp?rev=68970&r1=68969&r2=68970&view=diff

==============================================================================
--- llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp (original)
+++ llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp Mon Apr 13 13:03:08 2009
@@ -6423,15 +6423,17 @@
 }
 
 Constant *TreeConstantToLLVM::ConvertINTEGER_CST(tree exp) {
-  const IntegerType *Ty = cast<IntegerType>(ConvertType(TREE_TYPE(exp)));
+  const Type *Ty = ConvertType(TREE_TYPE(exp));
   
   // Handle i128 specially.
-  if (Ty->getPrimitiveSizeInBits() == 128) {
-    // GCC only supports i128 on 64-bit systems.
-    assert(HOST_BITS_PER_WIDE_INT == 64 &&
-           "i128 only supported on 64-bit system");
-    uint64_t Bits[] = { TREE_INT_CST_LOW(exp), TREE_INT_CST_HIGH(exp) };
-    return ConstantInt::get(APInt(128, 2, Bits));
+  if (const IntegerType *IT = dyn_cast<IntegerType>(Ty)) {
+    if (IT->getBitWidth() == 128) {
+      // GCC only supports i128 on 64-bit systems.
+      assert(HOST_BITS_PER_WIDE_INT == 64 &&
+             "i128 only supported on 64-bit system");
+      uint64_t Bits[] = { TREE_INT_CST_LOW(exp), TREE_INT_CST_HIGH(exp) };
+      return ConstantInt::get(APInt(128, 2, Bits));
+    }
   }
   
   // Build the value as a ulong constant, then constant fold it to the right





More information about the llvm-commits mailing list