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 | b1cad0b3bc3fe79c33cf05a0c21de8a9ebe3aec1 (patch) | |
tree | c5ca17d6ab54e2001ae7ab093ce1217fbfa10523 | |
parent | 163c3260609bc5aa52a9ebadc32fcd13386223c4 (diff) | |
download | bcm5719-llvm-b1cad0b3bc3fe79c33cf05a0c21de8a9ebe3aec1.tar.gz bcm5719-llvm-b1cad0b3bc3fe79c33cf05a0c21de8a9ebe3aec1.zip |
Don't pass too many arguments into runFunction
llvm-svn: 15801
-rw-r--r-- | llvm/lib/ExecutionEngine/ExecutionEngine.cpp | 23 |
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; } |