]> granicus.if.org Git - clang/commitdiff
ArrayRef'ized CompilerInvocation::CreateFromArgs
authorDmitri Gribenko <gribozavr@gmail.com>
Tue, 27 Aug 2019 22:13:31 +0000 (22:13 +0000)
committerDmitri Gribenko <gribozavr@gmail.com>
Tue, 27 Aug 2019 22:13:31 +0000 (22:13 +0000)
Subscribers: cfe-commits

Tags: #clang

Differential Revision: https://reviews.llvm.org/D66797

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@370122 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Frontend/CompilerInvocation.h
lib/Frontend/CompilerInvocation.cpp
lib/Frontend/CreateInvocationFromCommandLine.cpp
lib/Tooling/Tooling.cpp
tools/arcmt-test/arcmt-test.cpp
tools/clang-import-test/clang-import-test.cpp
tools/driver/cc1_main.cpp
unittests/AST/ExternalASTSourceTest.cpp

index f0280232af0d0c988efce1265cc181d291f3cfdc..f3253d5b40e3cfff5095cfb91ac34591504a3606 100644 (file)
@@ -21,6 +21,7 @@
 #include "clang/Frontend/PreprocessorOutputOptions.h"
 #include "clang/StaticAnalyzer/Core/AnalyzerOptions.h"
 #include "llvm/ADT/IntrusiveRefCntPtr.h"
+#include "llvm/ADT/ArrayRef.h"
 #include <memory>
 #include <string>
 
@@ -153,12 +154,8 @@ public:
   /// one of the vaild-to-access (albeit arbitrary) states.
   ///
   /// \param [out] Res - The resulting invocation.
-  /// \param ArgBegin - The first element in the argument vector.
-  /// \param ArgEnd - The last element in the argument vector.
-  /// \param Diags - The diagnostic engine to use for errors.
   static bool CreateFromArgs(CompilerInvocation &Res,
-                             const char* const *ArgBegin,
-                             const char* const *ArgEnd,
+                             ArrayRef<const char *> CommandLineArgs,
                              DiagnosticsEngine &Diags);
 
   /// Get the directory where the compiler headers
index 0e222b95dde6286bae368ed3b0c397f5ffd12a1f..86c66f3a07a5fed3aa5b789d3cb295cdd83299bb 100644 (file)
@@ -3370,8 +3370,7 @@ static void ParseTargetArgs(TargetOptions &Opts, ArgList &Args,
 }
 
 bool CompilerInvocation::CreateFromArgs(CompilerInvocation &Res,
-                                        const char *const *ArgBegin,
-                                        const char *const *ArgEnd,
+                                        ArrayRef<const char *> CommandLineArgs,
                                         DiagnosticsEngine &Diags) {
   bool Success = true;
 
@@ -3379,9 +3378,8 @@ bool CompilerInvocation::CreateFromArgs(CompilerInvocation &Res,
   std::unique_ptr<OptTable> Opts = createDriverOptTable();
   const unsigned IncludedFlagsBitmask = options::CC1Option;
   unsigned MissingArgIndex, MissingArgCount;
-  InputArgList Args =
-      Opts->ParseArgs(llvm::makeArrayRef(ArgBegin, ArgEnd), MissingArgIndex,
-                      MissingArgCount, IncludedFlagsBitmask);
+  InputArgList Args = Opts->ParseArgs(CommandLineArgs, MissingArgIndex,
+                                      MissingArgCount, IncludedFlagsBitmask);
   LangOptions &LangOpts = *Res.getLangOpts();
 
   // Check for missing argument error.
index ea7de7a4111281ecfa9f90ffbf094fb98d61a1eb..ab62b633cda382c4a9e746fb5b8f259f01c539f7 100644 (file)
@@ -90,9 +90,7 @@ std::unique_ptr<CompilerInvocation> clang::createInvocationFromCommandLine(
 
   const ArgStringList &CCArgs = Cmd.getArguments();
   auto CI = std::make_unique<CompilerInvocation>();
-  if (!CompilerInvocation::CreateFromArgs(
-          *CI, const_cast<const char **>(CCArgs.data()),
-          const_cast<const char **>(CCArgs.data()) + CCArgs.size(), *Diags) &&
+  if (!CompilerInvocation::CreateFromArgs(*CI, CCArgs, *Diags) &&
       !ShouldRecoverOnErorrs)
     return nullptr;
   return CI;
index 291df0ae333d35b62d089a282db1fc03045ed2a8..b21fc33ac39f35bba36af3ab5dd10242c711e401 100644 (file)
@@ -118,9 +118,7 @@ CompilerInvocation *newInvocation(
     DiagnosticsEngine *Diagnostics, const llvm::opt::ArgStringList &CC1Args) {
   assert(!CC1Args.empty() && "Must at least contain the program name!");
   CompilerInvocation *Invocation = new CompilerInvocation;
-  CompilerInvocation::CreateFromArgs(
-      *Invocation, CC1Args.data() + 1, CC1Args.data() + CC1Args.size(),
-      *Diagnostics);
+  CompilerInvocation::CreateFromArgs(*Invocation, CC1Args, *Diagnostics);
   Invocation->getFrontendOpts().DisableFree = false;
   Invocation->getCodeGenOpts().DisableFree = false;
   return Invocation;
index 5f075f860f542f1642bd848f4f22c9860d4f1d27..c4ba12d4f7cffd7450c8a5b8120025219457c40f 100644 (file)
@@ -121,7 +121,7 @@ static bool checkForMigration(StringRef resourcesPath,
   }
 
   CompilerInvocation CI;
-  if (!CompilerInvocation::CreateFromArgs(CI, Args.begin(), Args.end(), *Diags))
+  if (!CompilerInvocation::CreateFromArgs(CI, Args, *Diags))
     return true;
 
   if (CI.getFrontendOpts().Inputs.empty()) {
@@ -160,8 +160,7 @@ static bool performTransformations(StringRef resourcesPath,
       new DiagnosticsEngine(DiagID, &*DiagOpts, &*DiagClient));
 
   CompilerInvocation origCI;
-  if (!CompilerInvocation::CreateFromArgs(origCI, Args.begin(), Args.end(),
-                                     *TopDiags))
+  if (!CompilerInvocation::CreateFromArgs(origCI, Args, *TopDiags))
     return true;
 
   if (origCI.getFrontendOpts().Inputs.empty()) {
index a4d3e11c98e735d8dd75b0405e5cfff572e71b98..e8124d624267cedee6002c464e32f577af8f996b 100644 (file)
@@ -168,9 +168,7 @@ std::unique_ptr<CompilerInstance> BuildCompilerInstance() {
   std::vector<const char *> ClangArgv(ClangArgs.size());
   std::transform(ClangArgs.begin(), ClangArgs.end(), ClangArgv.begin(),
                  [](const std::string &s) -> const char * { return s.data(); });
-  CompilerInvocation::CreateFromArgs(*Inv, ClangArgv.data(),
-                                     &ClangArgv.data()[ClangArgv.size()],
-                                     Ins->getDiagnostics());
+  CompilerInvocation::CreateFromArgs(*Inv, ClangArgv, Ins->getDiagnostics());
 
   {
     using namespace driver::types;
index d160b64f9787a95ba832c65ce55cb2573245563b..29767b880b62d26b6952625c7590121194522342 100644 (file)
@@ -213,8 +213,8 @@ int cc1_main(ArrayRef<const char *> Argv, const char *Argv0, void *MainAddr) {
   IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts = new DiagnosticOptions();
   TextDiagnosticBuffer *DiagsBuffer = new TextDiagnosticBuffer;
   DiagnosticsEngine Diags(DiagID, &*DiagOpts, DiagsBuffer);
-  bool Success = CompilerInvocation::CreateFromArgs(
-      Clang->getInvocation(), Argv.begin(), Argv.end(), Diags);
+  bool Success =
+      CompilerInvocation::CreateFromArgs(Clang->getInvocation(), Argv, Diags);
 
   if (Clang->getFrontendOpts().TimeTrace) {
     llvm::timeTraceProfilerInitialize(
index ba8a8cd376677c50e1101d8e45d0c554c8265147..8b70be664e043c05a9dfd8440a9b2b5083ea2cc8 100644 (file)
@@ -53,7 +53,6 @@ bool testExternalASTSource(ExternalASTSource *Source,
       "test.cc", MemoryBuffer::getMemBuffer(FileContents).release());
   const char *Args[] = { "test.cc" };
   CompilerInvocation::CreateFromArgs(*Invocation, Args,
-                                     Args + array_lengthof(Args),
                                      Compiler.getDiagnostics());
   Compiler.setInvocation(std::move(Invocation));