aboutsummaryrefslogtreecommitdiffstats
path: root/lib
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
commitf24d09933c0fa2dae141426f2c38c8925693c73f (patch)
tree00dcb5a6293074cfe30e8f5e90645d3fc06e55f3 /lib
parent5c3389a084dfa2843c21cdda42b83a2dad785aec (diff)
downloadexternal_llvm-f24d09933c0fa2dae141426f2c38c8925693c73f.zip
external_llvm-f24d09933c0fa2dae141426f2c38c8925693c73f.tar.gz
external_llvm-f24d09933c0fa2dae141426f2c38c8925693c73f.tar.bz2
Don't pass too many arguments into runFunction
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15801 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r--lib/ExecutionEngine/ExecutionEngine.cpp23
1 files changed, 15 insertions, 8 deletions
diff --git a/lib/ExecutionEngine/ExecutionEngine.cpp b/lib/ExecutionEngine/ExecutionEngine.cpp
index b768930..105c0b8 100644
--- a/lib/ExecutionEngine/ExecutionEngine.cpp
+++ b/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;
}