summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorReid Kleckner <reid@kleckner.net>2009-08-19 23:39:59 +0000
committerReid Kleckner <reid@kleckner.net>2009-08-19 23:39:59 +0000
commit5c51639e3e59f70684a0b044bad697985ad906eb (patch)
treeb9a9a24095aec75f34308c13e8d1da317389da1f /llvm/lib
parent7167f427694b55c98f4e6cd1173ab136af3bc705 (diff)
downloadbcm5719-llvm-5c51639e3e59f70684a0b044bad697985ad906eb.tar.gz
bcm5719-llvm-5c51639e3e59f70684a0b044bad697985ad906eb.zip
Modify an assert to avoid what looks like a GCC 4.2.4 signed-ness bug.
llvm-svn: 79494
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/Target/X86/X86JITInfo.cpp8
1 files changed, 5 insertions, 3 deletions
diff --git a/llvm/lib/Target/X86/X86JITInfo.cpp b/llvm/lib/Target/X86/X86JITInfo.cpp
index 9536fe672c4..dea34a5123f 100644
--- a/llvm/lib/Target/X86/X86JITInfo.cpp
+++ b/llvm/lib/Target/X86/X86JITInfo.cpp
@@ -495,9 +495,11 @@ void X86JITInfo::emitFunctionStubAtAddr(const Function* F, void *Fn, void *Stub,
// complains about casting a function pointer to a normal pointer.
JCE.startGVStub(F, Stub, 5);
JCE.emitByte(0xE9);
-#if defined (X86_64_JIT)
- assert(((((intptr_t)Fn-JCE.getCurrentPCValue()-5) << 32) >> 32) ==
- ((intptr_t)Fn-JCE.getCurrentPCValue()-5)
+#if defined (X86_64_JIT) && !defined (NDEBUG)
+ // Yes, we need both of these casts, or some broken versions of GCC (4.2.4)
+ // get the signed-ness of the expression wrong. Go figure.
+ intptr_t Displacement = (intptr_t)Fn - (intptr_t)JCE.getCurrentPCValue() - 5;
+ assert(((Displacement << 32) >> 32) == Displacement
&& "PIC displacement does not fit in displacement field!");
#endif
JCE.emitWordLE((intptr_t)Fn-JCE.getCurrentPCValue()-4);
OpenPOWER on IntegriCloud