diff options
Diffstat (limited to 'lib/Tooling/Tooling.cpp')
| -rw-r--r-- | lib/Tooling/Tooling.cpp | 30 | 
1 files changed, 18 insertions, 12 deletions
| diff --git a/lib/Tooling/Tooling.cpp b/lib/Tooling/Tooling.cpp index e93e0c97f710..af20254811aa 100644 --- a/lib/Tooling/Tooling.cpp +++ b/lib/Tooling/Tooling.cpp @@ -97,17 +97,22 @@ static clang::CompilerInvocation *newInvocation(  bool runToolOnCode(clang::FrontendAction *ToolAction, const Twine &Code,                     const Twine &FileName) { +  return runToolOnCodeWithArgs( +      ToolAction, Code, std::vector<std::string>(), FileName); +} + +bool runToolOnCodeWithArgs(clang::FrontendAction *ToolAction, const Twine &Code, +                           const std::vector<std::string> &Args, +                           const Twine &FileName) {    SmallString<16> FileNameStorage;    StringRef FileNameRef = FileName.toNullTerminatedStringRef(FileNameStorage); -  const char *const CommandLine[] = { -      "clang-tool", "-fsyntax-only", FileNameRef.data() -  }; +  std::vector<std::string> Commands; +  Commands.push_back("clang-tool"); +  Commands.push_back("-fsyntax-only"); +  Commands.insert(Commands.end(), Args.begin(), Args.end()); +  Commands.push_back(FileNameRef.data());    FileManager Files((FileSystemOptions())); -  ToolInvocation Invocation( -      std::vector<std::string>( -          CommandLine, -          CommandLine + llvm::array_lengthof(CommandLine)), -      ToolAction, &Files); +  ToolInvocation Invocation(Commands, ToolAction, &Files);    SmallString<1024> CodeStorage;    Invocation.mapVirtualFile(FileNameRef, @@ -154,11 +159,12 @@ bool ToolInvocation::run() {    for (int I = 0, E = CommandLine.size(); I != E; ++I)      Argv.push_back(CommandLine[I].c_str());    const char *const BinaryName = Argv[0]; -  DiagnosticOptions DefaultDiagnosticOptions; +  IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts = new DiagnosticOptions();    TextDiagnosticPrinter DiagnosticPrinter( -      llvm::errs(), DefaultDiagnosticOptions); -  DiagnosticsEngine Diagnostics(llvm::IntrusiveRefCntPtr<clang::DiagnosticIDs>( -      new DiagnosticIDs()), &DiagnosticPrinter, false); +      llvm::errs(), &*DiagOpts); +  DiagnosticsEngine Diagnostics( +    llvm::IntrusiveRefCntPtr<clang::DiagnosticIDs>(new DiagnosticIDs()), +    &*DiagOpts, &DiagnosticPrinter, false);    const llvm::OwningPtr<clang::driver::Driver> Driver(        newDriver(&Diagnostics, BinaryName)); | 
