summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--llvm/include/llvm/LTO/LTOCodeGenerator.h2
-rw-r--r--llvm/lib/LTO/LTOCodeGenerator.cpp24
2 files changed, 10 insertions, 16 deletions
diff --git a/llvm/include/llvm/LTO/LTOCodeGenerator.h b/llvm/include/llvm/LTO/LTOCodeGenerator.h
index 0c46fc048a4..695de5aa994 100644
--- a/llvm/include/llvm/LTO/LTOCodeGenerator.h
+++ b/llvm/include/llvm/LTO/LTOCodeGenerator.h
@@ -165,7 +165,7 @@ private:
lto_codegen_model CodeModel = LTO_CODEGEN_PIC_MODEL_DEFAULT;
StringSet MustPreserveSymbols;
StringSet AsmUndefinedRefs;
- std::vector<char *> CodegenOptions;
+ std::vector<std::string> CodegenOptions;
std::string MCpu;
std::string MAttr;
std::string NativeObjectPath;
diff --git a/llvm/lib/LTO/LTOCodeGenerator.cpp b/llvm/lib/LTO/LTOCodeGenerator.cpp
index daaf2232922..fdf3f3a2b89 100644
--- a/llvm/lib/LTO/LTOCodeGenerator.cpp
+++ b/llvm/lib/LTO/LTOCodeGenerator.cpp
@@ -89,11 +89,6 @@ LTOCodeGenerator::~LTOCodeGenerator() {
delete TargetMach;
TargetMach = nullptr;
-
- for (std::vector<char *>::iterator I = CodegenOptions.begin(),
- E = CodegenOptions.end();
- I != E; ++I)
- free(*I);
}
// Initialize LTO passes. Please keep this funciton in sync with
@@ -575,20 +570,19 @@ bool LTOCodeGenerator::compileOptimized(raw_pwrite_stream &out,
/// LTO problems.
void LTOCodeGenerator::setCodeGenDebugOptions(const char *options) {
for (std::pair<StringRef, StringRef> o = getToken(options);
- !o.first.empty(); o = getToken(o.second)) {
- // ParseCommandLineOptions() expects argv[0] to be program name. Lazily add
- // that.
- if (CodegenOptions.empty())
- CodegenOptions.push_back(strdup("libLLVMLTO"));
- CodegenOptions.push_back(strdup(o.first.str().c_str()));
- }
+ !o.first.empty(); o = getToken(o.second))
+ CodegenOptions.push_back(o.first);
}
void LTOCodeGenerator::parseCodeGenDebugOptions() {
// if options were requested, set them
- if (!CodegenOptions.empty())
- cl::ParseCommandLineOptions(CodegenOptions.size(),
- const_cast<char **>(&CodegenOptions[0]));
+ if (!CodegenOptions.empty()) {
+ // ParseCommandLineOptions() expects argv[0] to be program name.
+ std::vector<const char *> CodegenArgv(1, "libLLVMLTO");
+ for (std::string &Arg : CodegenOptions)
+ CodegenArgv.push_back(Arg.c_str());
+ cl::ParseCommandLineOptions(CodegenArgv.size(), CodegenArgv.data());
+ }
}
void LTOCodeGenerator::DiagnosticHandler(const DiagnosticInfo &DI,
OpenPOWER on IntegriCloud