diff --git a/llvm/tools/llvm-ld/llvm-ld.cpp b/llvm/tools/llvm-ld/llvm-ld.cpp index f8287f8e8d421ef84b33dfe5186ded0230de9407..f19c0790298f89a4cf23e3f952dfd7e9082d563b 100644 --- a/llvm/tools/llvm-ld/llvm-ld.cpp +++ b/llvm/tools/llvm-ld/llvm-ld.cpp @@ -225,6 +225,7 @@ static int GenerateAssembly(const std::string &OutputFilename, args.push_back( "-o"); args.push_back( OutputFilename.c_str() ); args.push_back( InputFilename.c_str() ); + args.push_back(0); return sys::Program::ExecuteAndWait(llc,&args[0]); } @@ -241,6 +242,7 @@ static int GenerateCFile(const std::string &OutputFile, args.push_back( "-o"); args.push_back( OutputFile.c_str() ); args.push_back( InputFile.c_str() ); + args.push_back(0); return sys::Program::ExecuteAndWait(llc, &args[0]); } @@ -300,6 +302,7 @@ static int GenerateNative(const std::string &OutputFilename, args.push_back("-l"); args.push_back(Libraries[index].c_str()); } + args.push_back(0); // Run the compiler to assembly and link together the program. return sys::Program::ExecuteAndWait(gcc, &args[0], (const char**)clean_env); diff --git a/llvm/tools/llvmc/CompilerDriver.cpp b/llvm/tools/llvmc/CompilerDriver.cpp index 6846fbc62e83445c0a7650d4fa34a6100d52f9de..6d609c52aa6d855f71103dd2576fc798e11ee215 100644 --- a/llvm/tools/llvmc/CompilerDriver.cpp +++ b/llvm/tools/llvmc/CompilerDriver.cpp @@ -394,22 +394,20 @@ private: // Invoke the program const char** Args = (const char**) - alloca(sizeof(const char*)*action->args.size()); - for (unsigned i = 0; i != action->args.size(); ++i) { + alloca(sizeof(const char*)*(action->args.size()+1)); + for (unsigned i = 0; i != action->args.size(); ++i) Args[i] = action->args[i].c_str(); - } + Args[action->args.size()] = 0; // null terminate list. if (isSet(TIME_ACTIONS_FLAG)) { Timer timer(action->program.toString()); timer.startTimer(); - int resultCode = - sys::Program::ExecuteAndWait(action->program,Args); + int resultCode = sys::Program::ExecuteAndWait(action->program, Args); timer.stopTimer(); timer.print(timer,std::cerr); return resultCode == 0; } else - return 0 == - sys::Program::ExecuteAndWait(action->program, Args); + return 0 == sys::Program::ExecuteAndWait(action->program, Args); } return true; }