summaryrefslogtreecommitdiffstats
path: root/llvm/lib/ExecutionEngine
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2004-08-16 01:05:35 +0000
committerChris Lattner <sabre@nondot.org>2004-08-16 01:05:35 +0000
commitb1cad0b3bc3fe79c33cf05a0c21de8a9ebe3aec1 (patch)
treec5ca17d6ab54e2001ae7ab093ce1217fbfa10523 /llvm/lib/ExecutionEngine
parent163c3260609bc5aa52a9ebadc32fcd13386223c4 (diff)
downloadbcm5719-llvm-b1cad0b3bc3fe79c33cf05a0c21de8a9ebe3aec1.tar.gz
bcm5719-llvm-b1cad0b3bc3fe79c33cf05a0c21de8a9ebe3aec1.zip
Don't pass too many arguments into runFunction
llvm-svn: 15801
Diffstat (limited to 'llvm/lib/ExecutionEngine')
-rw-r--r--llvm/lib/ExecutionEngine/ExecutionEngine.cpp23
1 files changed, 15 insertions, 8 deletions
diff --git a/llvm/lib/ExecutionEngine/ExecutionEngine.cpp b/llvm/lib/ExecutionEngine/ExecutionEngine.cpp
index b768930099e..105c0b8a1d9 100644
--- a/llvm/lib/ExecutionEngine/ExecutionEngine.cpp
+++ b/llvm/lib/ExecutionEngine/ExecutionEngine.cpp
@@ -102,14 +102,21 @@ int ExecutionEngine::runFunctionAsMain(Function *Fn,
std::vector<GenericValue> GVArgs;
GenericValue GVArgc;
GVArgc.IntVal = argv.size();
- GVArgs.push_back(GVArgc); // Arg #0 = argc.
- GVArgs.push_back(PTOGV(CreateArgv(this, argv))); // Arg #1 = argv.
- assert(((char **)GVTOP(GVArgs[1]))[0] && "argv[0] was null after CreateArgv");
-
- std::vector<std::string> EnvVars;
- for (unsigned i = 0; envp[i]; ++i)
- EnvVars.push_back(envp[i]);
- GVArgs.push_back(PTOGV(CreateArgv(this, EnvVars))); // Arg #2 = envp.
+ unsigned NumArgs = Fn->getFunctionType()->getNumParams();
+ if (NumArgs) {
+ GVArgs.push_back(GVArgc); // Arg #0 = argc.
+ if (NumArgs > 1) {
+ GVArgs.push_back(PTOGV(CreateArgv(this, argv))); // Arg #1 = argv.
+ assert(((char **)GVTOP(GVArgs[1]))[0] &&
+ "argv[0] was null after CreateArgv");
+ if (NumArgs > 2) {
+ std::vector<std::string> EnvVars;
+ for (unsigned i = 0; envp[i]; ++i)
+ EnvVars.push_back(envp[i]);
+ GVArgs.push_back(PTOGV(CreateArgv(this, EnvVars))); // Arg #2 = envp.
+ }
+ }
+ }
return runFunction(Fn, GVArgs).IntVal;
}
OpenPOWER on IntegriCloud