[llvm-commits] CVS: llvm/lib/ExecutionEngine/JIT/JIT.cpp

Chris Lattner lattner at cs.uiuc.edu
Sun Aug 15 16:40:11 PDT 2004



Changes in directory llvm/lib/ExecutionEngine/JIT:

JIT.cpp updated: 1.39 -> 1.40
---
Log message:

Fine, go all of the way and check that the argument types are correct as well.


---
Diffs of the changes:  (+27 -13)

Index: llvm/lib/ExecutionEngine/JIT/JIT.cpp
diff -u llvm/lib/ExecutionEngine/JIT/JIT.cpp:1.39 llvm/lib/ExecutionEngine/JIT/JIT.cpp:1.40
--- llvm/lib/ExecutionEngine/JIT/JIT.cpp:1.39	Sun Aug 15 18:34:48 2004
+++ llvm/lib/ExecutionEngine/JIT/JIT.cpp	Sun Aug 15 18:39:59 2004
@@ -64,22 +64,36 @@
   void *FPtr = getPointerToFunction(F);
   assert(FPtr && "Pointer to fn's code was null after getPointerToFunction");
   const Type *RetTy = F->getReturnType();
+  const FunctionType *FTy = F->getFunctionType();
 
   // Handle some common cases first.
   if (RetTy == Type::IntTy || RetTy == Type::UIntTy || RetTy == Type::VoidTy) {
-    if (ArgValues.size() == 3) {
-      int (*PF)(int, char **, const char **) =
-        (int(*)(int, char **, const char **))FPtr;
-      
-      // Call the function.
-      rv.IntVal = PF(ArgValues[0].IntVal, (char **)GVTOP(ArgValues[1]),
-                     (const char **)GVTOP(ArgValues[2]));
-      return rv;
-    } else if (ArgValues.size() == 1) {
-      int (*PF)(int) = (int(*)(int))FPtr;
-      rv.IntVal = PF(ArgValues[0].IntVal);
-      return rv;
-    } else if (ArgValues.size() == 0) {
+    switch (ArgValues.size()) {
+    case 3:
+      if (FTy->getNumParams() == 3 && 
+          (FTy->getParamType(0) == Type::IntTy || 
+           FTy->getParamType(0) == Type::UIntTy) &&
+          isa<PointerType>(FTy->getParamType(1)) &&
+          isa<PointerType>(FTy->getParamType(2))) {
+        int (*PF)(int, char **, const char **) =
+          (int(*)(int, char **, const char **))FPtr;
+        
+        // Call the function.
+        rv.IntVal = PF(ArgValues[0].IntVal, (char **)GVTOP(ArgValues[1]),
+                       (const char **)GVTOP(ArgValues[2]));
+        return rv;
+      }
+      break;
+    case 1:
+      if (FTy->getNumParams() == 1 &&
+          (FTy->getParamType(0) == Type::IntTy || 
+           FTy->getParamType(0) == Type::UIntTy)) {
+        int (*PF)(int) = (int(*)(int))FPtr;
+        rv.IntVal = PF(ArgValues[0].IntVal);
+        return rv;
+      }
+      break;
+    case 0:
       int (*PF)() = (int(*)())FPtr;
       rv.IntVal = PF();
       return rv;






More information about the llvm-commits mailing list