[llvm-commits] [dragonegg] r143434 - in /dragonegg/branches/release_30: ./ src/Convert.cpp

Bill Wendling isanbard at gmail.com
Mon Oct 31 21:18:24 PDT 2011


Author: void
Date: Mon Oct 31 23:18:24 2011
New Revision: 143434

URL: http://llvm.org/viewvc/llvm-project?rev=143434&view=rev
Log:
Merging r143357:
------------------------------------------------------------------------
r143357 | baldrick | 2011-10-31 13:07:09 -0700 (Mon, 31 Oct 2011) | 5 lines

Fix a compile failure on 483.xalancbmk, caused by a minor GCC bug:
what should be the same type in the caller and callee are two
different (but equivalent) types (and not just variants of each
other).

------------------------------------------------------------------------

Modified:
    dragonegg/branches/release_30/   (props changed)
    dragonegg/branches/release_30/src/Convert.cpp

Propchange: dragonegg/branches/release_30/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Oct 31 23:18:24 2011
@@ -1 +1 @@
-/dragonegg/trunk:142351,142575,142651
+/dragonegg/trunk:142351,142575,142651,143357

Modified: dragonegg/branches/release_30/src/Convert.cpp
URL: http://llvm.org/viewvc/llvm-project/dragonegg/branches/release_30/src/Convert.cpp?rev=143434&r1=143433&r2=143434&view=diff
==============================================================================
--- dragonegg/branches/release_30/src/Convert.cpp (original)
+++ dragonegg/branches/release_30/src/Convert.cpp Mon Oct 31 23:18:24 2011
@@ -2802,6 +2802,20 @@
     Client.clear();
   }
 
+  // If the caller and callee disagree about a parameter type but the difference
+  // is trivial, correct the type used by the caller.
+  for (unsigned i = 0, e = std::min((unsigned)CallOperands.size(),
+                                    FTy->getNumParams());
+       i != e; ++i) {
+    Type *ExpectedTy = FTy->getParamType(i);
+    Type *ActualTy = CallOperands[i]->getType();
+    if (ActualTy == ExpectedTy)
+      continue;
+    assert(isa<PointerType>(ActualTy) && isa<PointerType>(ExpectedTy) &&
+           "Type difference is not trivial!");
+    CallOperands[i] = Builder.CreateBitCast(CallOperands[i], ExpectedTy);
+  }
+
   // Unlike LLVM, GCC does not require that call statements provide a value for
   // every function argument (it passes rubbish for arguments with no value).
   // To get the same effect we pass 'undef' for any unspecified arguments.





More information about the llvm-commits mailing list