Fix cl brokeness.
authorMichael J. Spencer <bigcheesegs@gmail.com>
Wed, 31 Oct 2012 20:47:30 +0000 (20:47 +0000)
committerMichael J. Spencer <bigcheesegs@gmail.com>
Wed, 31 Oct 2012 20:47:30 +0000 (20:47 +0000)
cl is not attempting to complete a templated class when used in this
context. The conversion forces this to happen.

Thanks to Richard Smith for figuring this out.

llvm-svn: 167166

lld/lib/ReaderWriter/ELF/HexagonReference.cpp
lld/lib/ReaderWriter/ELF/PPCReference.cpp
lld/lib/ReaderWriter/ELF/X86Reference.cpp

index 0024c19..9883203 100644 (file)
@@ -46,7 +46,7 @@ int relocB22PCREL(uint8_t *location, uint64_t P, uint64_t S, uint64_t A) {
   if ((result < 0x200000) && (result > -0x200000)) {
     result = ((result<<1) & 0x3ffe) | ((result<<3) & 0x01ff0000);
     *reinterpret_cast<llvm::support::ulittle32_t *>(location) = result |
-                     *reinterpret_cast<llvm::support::ulittle32_t *>(location);
+            (uint32_t)*reinterpret_cast<llvm::support::ulittle32_t *>(location);
     return HexagonKindHandler::NoError;
   }
   return HexagonKindHandler::Overflow;
@@ -58,7 +58,7 @@ int relocB15PCREL(uint8_t *location, uint64_t P, uint64_t S, uint64_t A) {
   if ((result < 0x8000) && (result > -0x8000)) {
     result = ((result<<1) & 0x20fe) | ((result<<7) & 0x00df0000);
     *reinterpret_cast<llvm::support::ulittle32_t *>(location) = result |
-                      *reinterpret_cast<llvm::support::ulittle32_t *>(location);
+            (uint32_t)*reinterpret_cast<llvm::support::ulittle32_t *>(location);
     return HexagonKindHandler::NoError;
   }
   return HexagonKindHandler::Overflow;
@@ -69,7 +69,7 @@ int relocLO16(uint8_t *location, uint64_t P, uint64_t S, uint64_t A) {
   uint32_t result = (uint32_t)(S + A);
   result = ((result & 0x3fff) | ((result << 2) & 0x00c00000));
   *reinterpret_cast<llvm::support::ulittle32_t *>(location) = result |
-                    *reinterpret_cast<llvm::support::ulittle32_t *>(location);
+            (uint32_t)*reinterpret_cast<llvm::support::ulittle32_t *>(location);
   return HexagonKindHandler::NoError;
 }
 
@@ -78,7 +78,7 @@ int relocHI16(uint8_t *location, uint64_t P, uint64_t S, uint64_t A) {
   uint32_t result = (uint32_t)((S + A)>>16);
   result = ((result & 0x3fff) | ((result << 2) & 0x00c00000));
   *reinterpret_cast<llvm::support::ulittle32_t *>(location) = result |
-                    *reinterpret_cast<llvm::support::ulittle32_t *>(location);
+            (uint32_t)*reinterpret_cast<llvm::support::ulittle32_t *>(location);
   return HexagonKindHandler::NoError;
 }
 
@@ -86,7 +86,7 @@ int relocHI16(uint8_t *location, uint64_t P, uint64_t S, uint64_t A) {
 int reloc32(uint8_t *location, uint64_t P, uint64_t S, uint64_t A) {
   uint32_t result = (uint32_t)(S + A);
   *reinterpret_cast<llvm::support::ulittle32_t *>(location) = result |
-                    *reinterpret_cast<llvm::support::ulittle32_t *>(location);
+            (uint32_t)*reinterpret_cast<llvm::support::ulittle32_t *>(location);
   return HexagonKindHandler::NoError;
 }
 } // namespace hexagon
index 01291e9..ec7df8f 100644 (file)
@@ -46,7 +46,7 @@ int relocB24PCREL(uint8_t *location, uint64_t P, uint64_t S, uint64_t A) {
   if ((result < 0x1000000) && (result > -0x1000000)) {
     result &= ~-(0x1000000);
     *reinterpret_cast<llvm::support::ubig32_t *>(location) = result |
-                      *reinterpret_cast<llvm::support::ubig32_t *>(location);
+               (uint32_t)*reinterpret_cast<llvm::support::ubig32_t *>(location);
     return PPCKindHandler::NoError;
   }
   return PPCKindHandler::Overflow;
index aae132c..7a9006a 100644 (file)
@@ -45,14 +45,14 @@ int relocNone(uint8_t *location, uint64_t P, uint64_t S, uint64_t A) {
 int reloc32(uint8_t *location, uint64_t P, uint64_t S, uint64_t A) {
   int32_t result = (uint32_t)(S + A);
   *reinterpret_cast<llvm::support::ulittle32_t *>(location) = result |
-                    *reinterpret_cast<llvm::support::ulittle32_t *>(location);
+            (uint32_t)*reinterpret_cast<llvm::support::ulittle32_t *>(location);
   return X86KindHandler::NoError;
 }
 /// \brief R_386_PC32 - word32: S + A - P
 int relocPC32(uint8_t *location, uint64_t P, uint64_t S, uint64_t A) {
   uint32_t result = (uint32_t)((S + A) - P);
   *reinterpret_cast<llvm::support::ulittle32_t *>(location) = result +
-                    *reinterpret_cast<llvm::support::ulittle32_t *>(location);
+            (uint32_t)*reinterpret_cast<llvm::support::ulittle32_t *>(location);
   return X86KindHandler::NoError;
 }