[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