diff options
author | Chris Lattner <sabre@nondot.org> | 2004-08-16 01:05:35 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2004-08-16 01:05:35 +0000 |
commit | f24d09933c0fa2dae141426f2c38c8925693c73f (patch) | |
tree | 00dcb5a6293074cfe30e8f5e90645d3fc06e55f3 /lib | |
parent | 5c3389a084dfa2843c21cdda42b83a2dad785aec (diff) | |
download | external_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.cpp | 23 |
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; } |