Parse LLVM command line arguments after plugins have been loaded
This fixes a crash due to command line options, that are not available before the loading of plugins finished. llvm-svn: 141525
This commit is contained in:
@@ -133,19 +133,6 @@ bool clang::ExecuteCompilerInvocation(CompilerInstance *Clang) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Honor -mllvm.
|
||||
//
|
||||
// FIXME: Remove this, one day.
|
||||
if (!Clang->getFrontendOpts().LLVMArgs.empty()) {
|
||||
unsigned NumArgs = Clang->getFrontendOpts().LLVMArgs.size();
|
||||
const char **Args = new const char*[NumArgs + 2];
|
||||
Args[0] = "clang (LLVM option parsing)";
|
||||
for (unsigned i = 0; i != NumArgs; ++i)
|
||||
Args[i + 1] = Clang->getFrontendOpts().LLVMArgs[i].c_str();
|
||||
Args[NumArgs + 1] = 0;
|
||||
llvm::cl::ParseCommandLineOptions(NumArgs + 1, const_cast<char **>(Args));
|
||||
}
|
||||
|
||||
// Load any requested plugins.
|
||||
for (unsigned i = 0,
|
||||
e = Clang->getFrontendOpts().Plugins.size(); i != e; ++i) {
|
||||
@@ -156,6 +143,20 @@ bool clang::ExecuteCompilerInvocation(CompilerInstance *Clang) {
|
||||
<< Path << Error;
|
||||
}
|
||||
|
||||
// Honor -mllvm.
|
||||
//
|
||||
// FIXME: Remove this, one day.
|
||||
// This should happen AFTER plugins have been loaded!
|
||||
if (!Clang->getFrontendOpts().LLVMArgs.empty()) {
|
||||
unsigned NumArgs = Clang->getFrontendOpts().LLVMArgs.size();
|
||||
const char **Args = new const char*[NumArgs + 2];
|
||||
Args[0] = "clang (LLVM option parsing)";
|
||||
for (unsigned i = 0; i != NumArgs; ++i)
|
||||
Args[i + 1] = Clang->getFrontendOpts().LLVMArgs[i].c_str();
|
||||
Args[NumArgs + 1] = 0;
|
||||
llvm::cl::ParseCommandLineOptions(NumArgs + 1, const_cast<char **>(Args));
|
||||
}
|
||||
|
||||
// Honor -analyzer-checker-help.
|
||||
// This should happen AFTER plugins have been loaded!
|
||||
if (Clang->getAnalyzerOpts().ShowCheckerHelp) {
|
||||
|
||||
Reference in New Issue
Block a user