From b47130c580385a5a2c922c480a85438b2bb80293 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Sun, 15 Aug 2004 23:29:50 +0000 Subject: [PATCH] Simplify code a bit, print error message always instead of asserting. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15793 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/ExecutionEngine/JIT/JIT.cpp | 35 ++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/lib/ExecutionEngine/JIT/JIT.cpp b/lib/ExecutionEngine/JIT/JIT.cpp index e9efd67f7c9..87331fb3015 100644 --- a/lib/ExecutionEngine/JIT/JIT.cpp +++ b/lib/ExecutionEngine/JIT/JIT.cpp @@ -58,29 +58,32 @@ JIT::~JIT() { /// GenericValue JIT::runFunction(Function *F, const std::vector &ArgValues) { - assert (F && "Function *F was null at entry to run()"); - GenericValue rv; + assert(F && "Function *F was null at entry to run()"); + GenericValue rv; + + void *FPtr = getPointerToFunction(F); + assert(PFtr && "Pointer to fn's code was null after getPointerToFunction"); if (ArgValues.size() == 3) { int (*PF)(int, char **, const char **) = - (int(*)(int, char **, const char **))getPointerToFunction(F); - assert(PF && "Pointer to fn's code was null after getPointerToFunction"); + (int(*)(int, char **, const char **))FPtr; // Call the function. - int ExitCode = PF(ArgValues[0].IntVal, (char **) GVTOP (ArgValues[1]), - (const char **) GVTOP (ArgValues[2])); - - rv.IntVal = ExitCode; - } else { - // FIXME: This code should handle a couple of common cases efficiently, but - // it should also implement the general case by code-gening a new anonymous - // nullary function to call. - assert(ArgValues.size() == 1); - void (*PF)(int) = (void(*)(int))getPointerToFunction(F); - assert(PF && "Pointer to fn's code was null after getPointerToFunction"); - PF(ArgValues[0].IntVal); + 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; } + // FIXME: This code should handle a couple of common cases efficiently, but + // it should also implement the general case by code-gening a new anonymous + // nullary function to call. + std::cerr << "Sorry, unimplemented feature in the LLVM JIT. See LLVM" + << " PR#419\n for details.\n"; + abort(); return rv; } -- 2.34.1