jansvoboda11 created this revision.
jansvoboda11 added reviewers: Bigcheese, dexonsmith.
jansvoboda11 requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

Patch D96280 <https://reviews.llvm.org/D96280> moved command line 
round-tripping from each parsing functions into single `CreateFromArgs` 
function.

This patch cleans up the individual parsing functions, essentially merging 
`ParseXxxImpl` with `ParseXxx`, as the distinction is not necessary anymore.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D96323

Files:
  clang/include/clang/Frontend/CompilerInvocation.h
  clang/lib/Frontend/CompilerInvocation.cpp

Index: clang/lib/Frontend/CompilerInvocation.cpp
===================================================================
--- clang/lib/Frontend/CompilerInvocation.cpp
+++ clang/lib/Frontend/CompilerInvocation.cpp
@@ -845,8 +845,8 @@
   // Nothing to generate for FullCompilerInvocation.
 }
 
-static bool ParseAnalyzerArgsImpl(AnalyzerOptions &Opts, ArgList &Args,
-                                  DiagnosticsEngine &Diags) {
+static bool ParseAnalyzerArgs(AnalyzerOptions &Opts, ArgList &Args,
+                              DiagnosticsEngine &Diags) {
   AnalyzerOptions *AnalyzerOpts = &Opts;
   bool Success = true;
 
@@ -1013,11 +1013,6 @@
   return Success;
 }
 
-static bool ParseAnalyzerArgs(CompilerInvocation &Res, AnalyzerOptions &Opts,
-                              ArgList &Args, DiagnosticsEngine &Diags) {
-  return ParseAnalyzerArgsImpl(*Res.getAnalyzerOpts(), Args, Diags);
-}
-
 static StringRef getStringOption(AnalyzerOptions::ConfigTable &Config,
                                  StringRef OptionName, StringRef DefaultVal) {
   return Config.insert({OptionName, std::string(DefaultVal)}).first->second;
@@ -1478,12 +1473,12 @@
     GenerateArg(Args, OPT_Qn, SA);
 }
 
-bool CompilerInvocation::ParseCodeGenArgsImpl(CodeGenOptions &Opts,
-                                              ArgList &Args, InputKind IK,
-                                              DiagnosticsEngine &Diags,
-                                              const llvm::Triple &T,
-                                              const std::string &OutputFile,
-                                              const LangOptions &LangOptsRef) {
+bool CompilerInvocation::ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args,
+                                          InputKind IK,
+                                          DiagnosticsEngine &Diags,
+                                          const llvm::Triple &T,
+                                          const std::string &OutputFile,
+                                          const LangOptions &LangOptsRef) {
   unsigned NumErrorsBefore = Diags.getNumErrors();
 
   bool Success = true;
@@ -1891,14 +1886,6 @@
   return Success && Diags.getNumErrors() == NumErrorsBefore;
 }
 
-bool CompilerInvocation::ParseCodeGenArgs(
-    CompilerInvocation &Res, CodeGenOptions &Opts, ArgList &Args, InputKind IK,
-    DiagnosticsEngine &Diags, const llvm::Triple &T,
-    const std::string &OutputFile, const LangOptions &LangOptsRef) {
-  return ParseCodeGenArgsImpl(Res.getCodeGenOpts(), Args, IK, Diags, T,
-                              OutputFile, LangOptsRef);
-}
-
 static void
 GenerateDependencyOutputArgs(const DependencyOutputOptions &Opts,
                              SmallVectorImpl<const char *> &Args,
@@ -1938,10 +1925,10 @@
   }
 }
 
-static bool ParseDependencyOutputArgsImpl(
-    DependencyOutputOptions &Opts, ArgList &Args,
-    DiagnosticsEngine &Diags,
-    frontend::ActionKind Action, bool ShowLineMarkers) {
+static bool ParseDependencyOutputArgs(DependencyOutputOptions &Opts,
+                                      ArgList &Args, DiagnosticsEngine &Diags,
+                                      frontend::ActionKind Action,
+                                      bool ShowLineMarkers) {
   unsigned NumErrorsBefore = Diags.getNumErrors();
   bool Success = true;
 
@@ -2006,15 +1993,6 @@
   return Success && Diags.getNumErrors() == NumErrorsBefore;
 }
 
-static bool ParseDependencyOutputArgs(CompilerInvocation &Res,
-                                      DependencyOutputOptions &Opts,
-                                      ArgList &Args, DiagnosticsEngine &Diags,
-                                      frontend::ActionKind Action,
-                                      bool ShowLineMarkers) {
-  return ParseDependencyOutputArgsImpl(Res.getDependencyOutputOpts(), Args,
-                                       Diags, Action, ShowLineMarkers);
-}
-
 static bool parseShowColorsArgs(const ArgList &Args, bool DefaultColor) {
   // Color diagnostics default to auto ("on" if terminal supports) in the driver
   // but default to off in cc1, needing an explicit OPT_fdiagnostics_color.
@@ -2267,15 +2245,6 @@
   return Success;
 }
 
-bool CompilerInvocation::ParseDiagnosticArgsRoundTrip(CompilerInvocation &Res,
-                                                      DiagnosticOptions &Opts,
-                                                      ArgList &Args,
-                                                      DiagnosticsEngine *Diags,
-                                                      bool DefaultDiagColor) {
-  return clang::ParseDiagnosticArgs(Res.getDiagnosticOpts(), Args, Diags,
-                                    DefaultDiagColor);
-}
-
 /// Parse the argument to the -ftest-module-file-extension
 /// command-line argument.
 ///
@@ -2531,9 +2500,8 @@
     Args.push_back(SA(Input.getFile()));
 }
 
-static bool ParseFrontendArgsImpl(FrontendOptions &Opts, ArgList &Args,
-                                  DiagnosticsEngine &Diags,
-                                  bool &IsHeaderFile) {
+static bool ParseFrontendArgs(FrontendOptions &Opts, ArgList &Args,
+                              DiagnosticsEngine &Diags, bool &IsHeaderFile) {
   FrontendOptions &FrontendOpts = Opts;
   bool Success = true;
   unsigned NumErrorsBefore = Diags.getNumErrors();
@@ -2752,13 +2720,6 @@
   return Diags.getNumErrors() == NumErrorsBefore;
 }
 
-static bool ParseFrontendArgs(CompilerInvocation &Res, FrontendOptions &Opts,
-                              ArgList &Args, DiagnosticsEngine &Diags,
-                              bool &IsHeaderFile) {
-  return ParseFrontendArgsImpl(Res.getFrontendOpts(), Args, Diags,
-                               IsHeaderFile);
-}
-
 std::string CompilerInvocation::GetResourcesPath(const char *Argv0,
                                                  void *MainAddr) {
   std::string ClangExecutable =
@@ -2766,9 +2727,9 @@
   return Driver::GetResourcesPath(ClangExecutable, CLANG_RESOURCE_DIR);
 }
 
-void CompilerInvocation::GenerateHeaderSearchArgs(
-    HeaderSearchOptions &Opts, SmallVectorImpl<const char *> &Args,
-    CompilerInvocation::StringAllocator SA) {
+static void GenerateHeaderSearchArgs(HeaderSearchOptions &Opts,
+                                     SmallVectorImpl<const char *> &Args,
+                                     CompilerInvocation::StringAllocator SA) {
   const HeaderSearchOptions *HeaderSearchOpts = &Opts;
 #define HEADER_SEARCH_OPTION_WITH_MARSHALLING(                                 \
     PREFIX_TYPE, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM,        \
@@ -3027,14 +2988,6 @@
   return Success;
 }
 
-void CompilerInvocation::ParseHeaderSearchArgs(CompilerInvocation &Res,
-                                               HeaderSearchOptions &Opts,
-                                               ArgList &Args,
-                                               DiagnosticsEngine &Diags,
-                                               const std::string &WorkingDir) {
-  ::ParseHeaderSearchArgs(Res.getHeaderSearchOpts(), Args, Diags, WorkingDir);
-}
-
 void CompilerInvocation::setLangDefaults(LangOptions &Opts, InputKind IK,
                                          const llvm::Triple &T,
                                          std::vector<std::string> &Includes,
@@ -3467,10 +3420,10 @@
     GenerateArg(Args, OPT_msign_return_address_key_EQ, "b_key", SA);
 }
 
-bool CompilerInvocation::ParseLangArgsImpl(LangOptions &Opts, ArgList &Args,
-                                           InputKind IK, const llvm::Triple &T,
-                                           std::vector<std::string> &Includes,
-                                           DiagnosticsEngine &Diags) {
+bool CompilerInvocation::ParseLangArgs(LangOptions &Opts, ArgList &Args,
+                                       InputKind IK, const llvm::Triple &T,
+                                       std::vector<std::string> &Includes,
+                                       DiagnosticsEngine &Diags) {
   unsigned NumErrorsBefore = Diags.getNumErrors();
 
   // FIXME: Cleanup per-file based stuff.
@@ -3908,15 +3861,6 @@
   return Success && Diags.getNumErrors() == NumErrorsBefore;
 }
 
-bool CompilerInvocation::ParseLangArgs(CompilerInvocation &Res,
-                                       LangOptions &Opts,
-                                       llvm::opt::ArgList &Args, InputKind IK,
-                                       const llvm::Triple &T,
-                                       std::vector<std::string> &Includes,
-                                       DiagnosticsEngine &Diags) {
-  return ParseLangArgsImpl(*Res.getLangOpts(), Args, IK, T, Includes, Diags);
-}
-
 static bool isStrictlyPreprocessorAction(frontend::ActionKind Action) {
   switch (Action) {
   case frontend::ASTDeclList:
@@ -4032,10 +3976,10 @@
   // generated elsewhere.
 }
 
-static bool ParsePreprocessorArgsImpl(PreprocessorOptions &Opts, ArgList &Args,
-                                      DiagnosticsEngine &Diags,
-                                      frontend::ActionKind Action,
-                                      const FrontendOptions &FrontendOpts) {
+static bool ParsePreprocessorArgs(PreprocessorOptions &Opts, ArgList &Args,
+                                  DiagnosticsEngine &Diags,
+                                  frontend::ActionKind Action,
+                                  const FrontendOptions &FrontendOpts) {
   PreprocessorOptions *PreprocessorOpts = &Opts;
   bool Success = true;
 
@@ -4125,15 +4069,6 @@
   return Success;
 }
 
-static bool ParsePreprocessorArgs(CompilerInvocation &Res,
-                                  PreprocessorOptions &Opts, ArgList &Args,
-                                  DiagnosticsEngine &Diags,
-                                  frontend::ActionKind Action,
-                                  FrontendOptions &FrontendOpts) {
-  return ParsePreprocessorArgsImpl(Res.getPreprocessorOpts(), Args, Diags,
-                                   Action, Res.getFrontendOpts());
-}
-
 static void GeneratePreprocessorOutputArgs(
     const PreprocessorOutputOptions &Opts, SmallVectorImpl<const char *> &Args,
     CompilerInvocation::StringAllocator SA, frontend::ActionKind Action) {
@@ -4157,10 +4092,9 @@
     GenerateArg(Args, OPT_dD, SA);
 }
 
-static bool ParsePreprocessorOutputArgsImpl(PreprocessorOutputOptions &Opts,
-                                            ArgList &Args,
-                                            DiagnosticsEngine &Diags,
-                                            frontend::ActionKind Action) {
+static bool ParsePreprocessorOutputArgs(PreprocessorOutputOptions &Opts,
+                                        ArgList &Args, DiagnosticsEngine &Diags,
+                                        frontend::ActionKind Action) {
   PreprocessorOutputOptions &PreprocessorOutputOpts = Opts;
   unsigned NumErrorsBefore = Diags.getNumErrors();
   bool Success = true;
@@ -4183,14 +4117,6 @@
   return Success && Diags.getNumErrors() == NumErrorsBefore;
 }
 
-static bool ParsePreprocessorOutputArgs(CompilerInvocation &Res,
-                                        PreprocessorOutputOptions &Opts,
-                                        ArgList &Args, DiagnosticsEngine &Diags,
-                                        frontend::ActionKind Action) {
-  return ParsePreprocessorOutputArgsImpl(Res.getPreprocessorOutputOpts(), Args,
-                                         Diags, Action);
-}
-
 static void GenerateTargetArgs(const TargetOptions &Opts,
                                SmallVectorImpl<const char *> &Args,
                                CompilerInvocation::StringAllocator SA) {
@@ -4211,8 +4137,8 @@
                 SA);
 }
 
-static bool ParseTargetArgsImpl(TargetOptions &Opts, ArgList &Args,
-                                DiagnosticsEngine &Diags) {
+static bool ParseTargetArgs(TargetOptions &Opts, ArgList &Args,
+                            DiagnosticsEngine &Diags) {
   TargetOptions *TargetOpts = &Opts;
   unsigned NumErrorsBefore = Diags.getNumErrors();
   bool Success = true;
@@ -4241,11 +4167,6 @@
   return Success && Diags.getNumErrors() == NumErrorsBefore;
 }
 
-static bool ParseTargetArgs(CompilerInvocation &Res, TargetOptions &Opts,
-                            ArgList &Args, DiagnosticsEngine &Diags) {
-  return ParseTargetArgsImpl(Res.getTargetOpts(), Args, Diags);
-}
-
 bool CompilerInvocation::CreateFromArgsImpl(
     CompilerInvocation &Res, ArrayRef<const char *> CommandLineArgs,
     DiagnosticsEngine &Diags, const char *Argv0) {
@@ -4280,17 +4201,16 @@
 
   Success &= ParseFileSystemArgs(Res.getFileSystemOpts(), Args, Diags);
   Success &= ParseMigratorArgs(Res.getMigratorOpts(), Args, Diags);
-  Success &= ParseAnalyzerArgs(Res, *Res.getAnalyzerOpts(), Args, Diags);
-  Success &=
-      ParseDiagnosticArgsRoundTrip(Res, Res.getDiagnosticOpts(), Args, &Diags,
-                                   /*DefaultDiagColor=*/false);
-  Success &= ParseFrontendArgs(Res, Res.getFrontendOpts(), Args, Diags,
+  Success &= ParseAnalyzerArgs(*Res.getAnalyzerOpts(), Args, Diags);
+  Success &= ParseDiagnosticArgs(Res.getDiagnosticOpts(), Args, &Diags,
+                                 /*DefaultDiagColor=*/false);
+  Success &= ParseFrontendArgs(Res.getFrontendOpts(), Args, Diags,
                                LangOpts.IsHeaderFile);
   // FIXME: We shouldn't have to pass the DashX option around here
   InputKind DashX = Res.getFrontendOpts().DashX;
-  Success &= ParseTargetArgs(Res, Res.getTargetOpts(), Args, Diags);
+  Success &= ParseTargetArgs(Res.getTargetOpts(), Args, Diags);
   llvm::Triple T(Res.getTargetOpts().Triple);
-  ParseHeaderSearchArgs(Res, Res.getHeaderSearchOpts(), Args, Diags,
+  ParseHeaderSearchArgs(Res.getHeaderSearchOpts(), Args, Diags,
                         Res.getFileSystemOpts().WorkingDir);
   if (DashX.getFormat() == InputKind::Precompiled ||
       DashX.getLanguage() == Language::LLVM_IR) {
@@ -4308,7 +4228,7 @@
   } else {
     // Other LangOpts are only initialized when the input is not AST or LLVM IR.
     // FIXME: Should we really be calling this for an Language::Asm input?
-    Success &= ParseLangArgs(Res, LangOpts, Args, DashX, T,
+    Success &= ParseLangArgs(LangOpts, Args, DashX, T,
                              Res.getPreprocessorOpts().Includes, Diags);
     if (Res.getFrontendOpts().ProgramAction == frontend::RewriteObjC)
       LangOpts.ObjCExceptions = 1;
@@ -4331,7 +4251,7 @@
   if (LangOpts.OpenMPIsDevice)
     Res.getTargetOpts().HostTriple = Res.getFrontendOpts().AuxTriple;
 
-  Success &= ParseCodeGenArgs(Res, Res.getCodeGenOpts(), Args, DashX, Diags, T,
+  Success &= ParseCodeGenArgs(Res.getCodeGenOpts(), Args, DashX, Diags, T,
                               Res.getFrontendOpts().OutputFile, LangOpts);
 
   // FIXME: Override value name discarding when asan or msan is used because the
@@ -4343,13 +4263,13 @@
       !LangOpts.Sanitize.has(SanitizerKind::Memory) &&
       !LangOpts.Sanitize.has(SanitizerKind::KernelMemory);
 
-  ParsePreprocessorArgs(Res, Res.getPreprocessorOpts(), Args, Diags,
+  ParsePreprocessorArgs(Res.getPreprocessorOpts(), Args, Diags,
                         Res.getFrontendOpts().ProgramAction,
                         Res.getFrontendOpts());
-  ParsePreprocessorOutputArgs(Res, Res.getPreprocessorOutputOpts(), Args, Diags,
+  ParsePreprocessorOutputArgs(Res.getPreprocessorOutputOpts(), Args, Diags,
                               Res.getFrontendOpts().ProgramAction);
 
-  ParseDependencyOutputArgs(Res, Res.getDependencyOutputOpts(), Args, Diags,
+  ParseDependencyOutputArgs(Res.getDependencyOutputOpts(), Args, Diags,
                             Res.getFrontendOpts().ProgramAction,
                             Res.getPreprocessorOutputOpts().ShowLineMarkers);
   if (!Res.getDependencyOutputOpts().OutputFile.empty() &&
Index: clang/include/clang/Frontend/CompilerInvocation.h
===================================================================
--- clang/include/clang/Frontend/CompilerInvocation.h
+++ clang/include/clang/Frontend/CompilerInvocation.h
@@ -243,27 +243,14 @@
                                  ArrayRef<const char *> CommandLineArgs,
                                  DiagnosticsEngine &Diags, const char *Argv0);
 
-  /// Parse command line options from DiagnosticOptions.
-  static bool ParseDiagnosticArgsRoundTrip(CompilerInvocation &Res,
-                                           DiagnosticOptions &Opts,
-                                           llvm::opt::ArgList &Args,
-                                           DiagnosticsEngine *Diags = nullptr,
-                                           bool DefaultDiagColor = true);
-
   /// Generate command line options from DiagnosticOptions.
   static void GenerateDiagnosticArgs(const DiagnosticOptions &Opts,
                                      SmallVectorImpl<const char *> &Args,
                                      StringAllocator SA, bool DefaultDiagColor);
 
   /// Parse command line options that map to LangOptions.
-  static bool ParseLangArgsImpl(LangOptions &Opts, llvm::opt::ArgList &Args,
-                                InputKind IK, const llvm::Triple &T,
-                                std::vector<std::string> &Includes,
-                                DiagnosticsEngine &Diags);
-
-  static bool ParseLangArgs(CompilerInvocation &Res, LangOptions &Opts,
-                            llvm::opt::ArgList &Args, InputKind IK,
-                            const llvm::Triple &T,
+  static bool ParseLangArgs(LangOptions &Opts, llvm::opt::ArgList &Args,
+                            InputKind IK, const llvm::Triple &T,
                             std::vector<std::string> &Includes,
                             DiagnosticsEngine &Diags);
 
@@ -273,16 +260,9 @@
                                StringAllocator SA, const llvm::Triple &T);
 
   /// Parse command line options that map to CodeGenOptions.
-  static bool ParseCodeGenArgsImpl(CodeGenOptions &Opts,
-                                   llvm::opt::ArgList &Args, InputKind IK,
-                                   DiagnosticsEngine &Diags,
-                                   const llvm::Triple &T,
-                                   const std::string &OutputFile,
-                                   const LangOptions &LangOptsRef);
-
-  static bool ParseCodeGenArgs(CompilerInvocation &Res, CodeGenOptions &Opts,
-                               llvm::opt::ArgList &Args, InputKind IK,
-                               DiagnosticsEngine &Diags, const llvm::Triple &T,
+  static bool ParseCodeGenArgs(CodeGenOptions &Opts, llvm::opt::ArgList &Args,
+                               InputKind IK, DiagnosticsEngine &Diags,
+                               const llvm::Triple &T,
                                const std::string &OutputFile,
                                const LangOptions &LangOptsRef);
 
@@ -292,18 +272,6 @@
                                   StringAllocator SA, const llvm::Triple &T,
                                   const std::string &OutputFile,
                                   const LangOptions *LangOpts);
-
-  /// Parse command line options that map to HeaderSearchOptions.
-  static void ParseHeaderSearchArgs(CompilerInvocation &Res,
-                                    HeaderSearchOptions &Opts,
-                                    llvm::opt::ArgList &Args,
-                                    DiagnosticsEngine &Diags,
-                                    const std::string &WorkingDir);
-
-  /// Generate command line options from HeaderSearchOptions.
-  static void GenerateHeaderSearchArgs(HeaderSearchOptions &Opts,
-                                       SmallVectorImpl<const char *> &Args,
-                                       CompilerInvocation::StringAllocator SA);
 };
 
 IntrusiveRefCntPtr<llvm::vfs::FileSystem>
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
  • [PATCH] D96323: [c... Jan Svoboda via Phabricator via cfe-commits

Reply via email to