[clang] 8d2d0e8 - Revert "Move all fields of '-cc1' option related classes into def file databases"

Douglas Yung via cfe-commits cfe-commits at lists.llvm.org
Wed Sep 2 10:38:49 PDT 2020


Author: Douglas Yung
Date: 2020-09-02T10:38:34-07:00
New Revision: 8d2d0e84857cb1f2d01456eb433b5172d3a0772b

URL: https://github.com/llvm/llvm-project/commit/8d2d0e84857cb1f2d01456eb433b5172d3a0772b
DIFF: https://github.com/llvm/llvm-project/commit/8d2d0e84857cb1f2d01456eb433b5172d3a0772b.diff

LOG: Revert "Move all fields of '-cc1' option related classes into def file databases"

This reverts commit c4a2a1307484cffe94a291c42572775411bac8d8.

This commit was causing a test failure: http://lab.llvm.org:8011/builders/llvm-clang-win-x-armv7l/builds/1068

Added: 
    

Modified: 
    clang/include/clang/Basic/CodeGenOptions.def
    clang/include/clang/Basic/CodeGenOptions.h
    clang/include/clang/Basic/CommentOptions.h
    clang/include/clang/Basic/DiagnosticOptions.def
    clang/include/clang/Basic/DiagnosticOptions.h
    clang/include/clang/Basic/FileSystemOptions.h
    clang/include/clang/Basic/LangOptions.def
    clang/include/clang/Basic/LangOptions.h
    clang/include/clang/Basic/TargetOptions.h
    clang/include/clang/Frontend/CompilerInvocation.h
    clang/include/clang/Frontend/DependencyOutputOptions.h
    clang/include/clang/Frontend/FrontendOptions.h
    clang/include/clang/Frontend/MigratorOptions.h
    clang/include/clang/Frontend/PreprocessorOutputOptions.h
    clang/include/clang/Lex/HeaderSearchOptions.h
    clang/include/clang/Lex/PreprocessorOptions.h
    clang/include/clang/Sema/CodeCompleteOptions.h
    clang/include/clang/StaticAnalyzer/Core/AnalyzerOptions.def
    clang/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h
    clang/lib/Basic/CodeGenOptions.cpp
    clang/lib/Basic/LangOptions.cpp

Removed: 
    clang/include/clang/Basic/CommentOptions.def
    clang/include/clang/Basic/FileSystemOptions.def
    clang/include/clang/Basic/TargetOptions.def
    clang/include/clang/Frontend/DependencyOutputOptions.def
    clang/include/clang/Frontend/FrontendOptions.def
    clang/include/clang/Frontend/MigratorOptions.def
    clang/include/clang/Frontend/PreprocessorOutputOptions.def
    clang/include/clang/Lex/HeaderSearchOptions.def
    clang/include/clang/Lex/PreprocessorOptions.def
    clang/include/clang/Sema/CodeCompleteOptions.def


################################################################################
diff  --git a/clang/include/clang/Basic/CodeGenOptions.def b/clang/include/clang/Basic/CodeGenOptions.def
index 758dfbc1d283..8b89aac8d6d5 100644
--- a/clang/include/clang/Basic/CodeGenOptions.def
+++ b/clang/include/clang/Basic/CodeGenOptions.def
@@ -14,20 +14,17 @@
 //
 //===----------------------------------------------------------------------===//
 #ifndef CODEGENOPT
-#error Define the CODEGENOPT macro to handle language options
+#  error Define the CODEGENOPT macro to handle language options
 #endif
 
 #ifndef VALUE_CODEGENOPT
-#define VALUE_CODEGENOPT(Name, Bits, Default) CODEGENOPT(Name, Bits, Default)
+#  define VALUE_CODEGENOPT(Name, Bits, Default) \
+CODEGENOPT(Name, Bits, Default)
 #endif
 
 #ifndef ENUM_CODEGENOPT
-#define ENUM_CODEGENOPT(Name, Type, Bits, Default)                             \
-  CODEGENOPT(Name, Bits, Default)
-#endif
-
-#ifndef TYPED_CODEGENOPT
-#define TYPED_CODEGENOPT(Type, Name, Description)
+#  define ENUM_CODEGENOPT(Name, Type, Bits, Default) \
+CODEGENOPT(Name, Bits, Default)
 #endif
 
 CODEGENOPT(DisableIntegratedAS, 1, 0) ///< -no-integrated-as
@@ -398,226 +395,6 @@ CODEGENOPT(KeepStaticConsts, 1, 0)
 /// Whether to not follow the AAPCS that enforce at least one read before storing to a volatile bitfield
 CODEGENOPT(ForceAAPCSBitfieldLoad, 1, 0)
 
-TYPED_CODEGENOPT(
-    std::string, BBSections,
-    "This field stores one of the allowed values for the option "
-    "-fbasic-block-sections=.  The allowed values with this option are: "
-    "{\"labels\", \"all\", \"list=<file>\", \"none\"}. \"labels\":      Only "
-    "generate basic block symbols (labels) for all basic blocks, do not "
-    "generate unique sections for basic blocks. Use the machine basic block id "
-    "in the symbol name to associate profile info from virtual address to "
-    "machine basic block. \"all\" :        Generate basic block sections for "
-    "all basic blocks. \"list=<file>\": Generate basic block sections for a "
-    "subset of basic blocks. The functions and the machine basic block ids are "
-    "specified in the file. \"none\":        Disable sections/labels for basic "
-    "blocks.")
-
-TYPED_CODEGENOPT(std::string, CodeModel, "The code model to use (-mcmodel).")
-
-TYPED_CODEGENOPT(std::string, CoverageDataFile,
-                 "The filename with path we use for coverage data files. The "
-                 "runtime allows further manipulation with the GCOV_PREFIX and "
-                 "GCOV_PREFIX_STRIP environment variables. The filename with "
-                 "path we use for coverage notes files.")
-TYPED_CODEGENOPT(std::string, CoverageNotesFile, "")
-
-TYPED_CODEGENOPT(
-    std::string, ProfileFilterFiles,
-    "Regexes separated by a semi-colon to filter the files to instrument.")
-
-TYPED_CODEGENOPT(
-    std::string, ProfileExcludeFiles,
-    "Regexes separated by a semi-colon to filter the files to not instrument.")
-
-TYPED_CODEGENOPT(CoverageVersionTy, CoverageVersion,
-                 "The version string to put into coverage files.")
-
-TYPED_CODEGENOPT(std::string, DebugPass,
-                 "Enable additional debugging information.")
-
-TYPED_CODEGENOPT(std::string, DebugCompilationDir,
-                 "The string to embed in debug information as the current "
-                 "working directory.")
-
-TYPED_CODEGENOPT(std::string, DwarfDebugFlags,
-                 "The string to embed in the debug information for the compile "
-                 "unit, if non-empty.")
-
-TYPED_CODEGENOPT(std::string, RecordCommandLine,
-                 "The string containing the commandline for the "
-                 "llvm.commandline metadata, if non-empty.")
-
-TYPED_CODEGENOPT(DebugPrefixMapTy, DebugPrefixMap, "")
-
-TYPED_CODEGENOPT(std::string, FloatABI,
-                 "The ABI to use for passing floating point arguments.")
-
-TYPED_CODEGENOPT(llvm::DenormalMode, FPDenormalMode,
-                 "The floating-point denormal mode to use.")
-
-TYPED_CODEGENOPT(llvm::DenormalMode, FP32DenormalMode,
-                 "The floating-point denormal mode to use, for float.")
-
-TYPED_CODEGENOPT(std::string, LimitFloatPrecision,
-                 "The float precision limit to use, if non-empty.")
-
-TYPED_CODEGENOPT(std::vector<BitcodeFileToLink>, LinkBitcodeFiles,
-                 "The files specified here are linked in to the module before "
-                 "optimizations.")
-
-TYPED_CODEGENOPT(
-    std::string, MainFileName,
-    "The user provided name for the \"main file\", if non-empty. This is "
-    "useful in situations where the input file name does not match the "
-    "original input file, for example with -save-temps.")
-
-TYPED_CODEGENOPT(std::string, SplitDwarfFile,
-                 "The name for the split debug info file used for the "
-                 "DW_AT_[GNU_]dwo_name attribute in the skeleton CU.")
-
-TYPED_CODEGENOPT(
-    std::string, SplitDwarfOutput,
-    "Output filename for the split debug info, not used in the skeleton CU.")
-
-TYPED_CODEGENOPT(llvm::Reloc::Model, RelocationModel,
-                 "The name of the relocation model to use.")
-
-TYPED_CODEGENOPT(std::string, ThreadModel, "The thread model to use")
-
-TYPED_CODEGENOPT(std::string, TrapFuncName,
-                 "If not an empty string, trap intrinsics are lowered to calls "
-                 "to this function instead of to trap instructions.")
-
-TYPED_CODEGENOPT(std::vector<std::string>, DependentLibraries,
-                 "A list of dependent libraries.")
-
-TYPED_CODEGENOPT(std::vector<std::string>, LinkerOptions,
-                 "A list of linker options to embed in the object file.")
-
-TYPED_CODEGENOPT(
-    std::string, InstrProfileOutput,
-    "Name of the profile file to use as output for -fprofile-instr-generate, "
-    "-fprofile-generate, and -fcs-profile-generate.")
-
-TYPED_CODEGENOPT(std::string, SampleProfileFile,
-                 "Name of the profile file to use with -fprofile-sample-use.")
-
-TYPED_CODEGENOPT(
-    std::string, ProfileInstrumentUsePath,
-    "Name of the profile file to use as input for -fprofile-instr-use")
-
-TYPED_CODEGENOPT(
-    std::string, ProfileRemappingFile,
-    "Name of the profile remapping file to apply to the profile data supplied "
-    "by -fprofile-sample-use or -fprofile-instr-use.")
-
-TYPED_CODEGENOPT(std::string, ThinLTOIndexFile,
-                 "Name of the function summary index file to use for ThinLTO "
-                 "function importing.")
-
-TYPED_CODEGENOPT(
-    std::string, ThinLinkBitcodeFile,
-    "Name of a file that can optionally be written with minimized bitcode to "
-    "be used as input for the ThinLTO thin link step, which only needs the "
-    "summary and module symbol table (and not, e.g. any debug metadata).")
-
-TYPED_CODEGENOPT(std::string, SaveTempsFilePrefix,
-                 "Prefix to use for -save-temps output.")
-
-TYPED_CODEGENOPT(
-    std::string, CudaGpuBinaryFileName,
-    "Name of file passed with -fcuda-include-gpubinary option to forward to "
-    "CUDA runtime back-end for incorporating them into host-side object file.")
-
-TYPED_CODEGENOPT(std::string, OptRecordFile,
-                 "The name of the file to which the backend should save YAML "
-                 "optimization records.")
-
-TYPED_CODEGENOPT(std::string, OptRecordPasses,
-                 "The regex that filters the passes that should be saved to "
-                 "the optimization records.")
-
-TYPED_CODEGENOPT(std::string, OptRecordFormat,
-                 "The format used for serializing remarks (default: YAML)")
-
-TYPED_CODEGENOPT(
-    std::string, SymbolPartition,
-    "The name of the partition that symbols are assigned to, specified with "
-    "-fsymbol-partition (see https://lld.llvm.org/Partitions.html).")
-
-TYPED_CODEGENOPT(
-    std::shared_ptr<llvm::Regex>, OptimizationRemarkPattern,
-    "Regular expression to select optimizations for which we should enable "
-    "optimization remarks. Transformation passes whose name matches this "
-    "expression (and support this feature), will emit a diagnostic whenever "
-    "they perform a transformation. This is enabled by the -Rpass=regexp flag.")
-
-TYPED_CODEGENOPT(
-    std::shared_ptr<llvm::Regex>, OptimizationRemarkMissedPattern,
-    "Regular expression to select optimizations for which we should enable "
-    "missed optimization remarks. Transformation passes whose name matches "
-    "this expression (and support this feature), will emit a diagnostic "
-    "whenever they tried but failed to perform a transformation. This is "
-    "enabled by the -Rpass-missed=regexp flag.")
-
-TYPED_CODEGENOPT(
-    std::shared_ptr<llvm::Regex>, OptimizationRemarkAnalysisPattern,
-    "Regular expression to select optimizations for which we should enable "
-    "optimization analyses. Transformation passes whose name matches this "
-    "expression (and support this feature), will emit a diagnostic whenever "
-    "they want to explain why they decided to apply or not apply a given "
-    "transformation. This is enabled by the -Rpass-analysis=regexp flag.")
-
-TYPED_CODEGENOPT(std::vector<std::string>, RewriteMapFiles,
-                 "Set of files defining the rules for the symbol rewriting.")
-
-TYPED_CODEGENOPT(SanitizerSet, SanitizeRecover,
-                 "Set of sanitizer checks that are non-fatal (i.e. execution "
-                 "should be continued when possible).")
-
-TYPED_CODEGENOPT(SanitizerSet, SanitizeTrap,
-                 "Set of sanitizer checks that trap rather than diagnose.")
-
-TYPED_CODEGENOPT(std::vector<uint8_t>, CmdArgs,
-                 "List of backend command-line options for -fembed-bitcode.")
-
-TYPED_CODEGENOPT(std::vector<std::string>, NoBuiltinFuncs,
-                 "A list of all -fno-builtin-* function names (e.g., memset).")
-
-TYPED_CODEGENOPT(std::vector<std::string>, Reciprocals, "")
-
-TYPED_CODEGENOPT(std::string, PreferVectorWidth,
-                 "The preferred width for auto-vectorization transforms. This "
-                 "is intended to override default transforms based on the "
-                 "width of the architected vector registers.")
-
-TYPED_CODEGENOPT(XRayInstrSet, XRayInstrumentationBundle,
-                 "Set of XRay instrumentation kinds to emit.")
-
-TYPED_CODEGENOPT(std::vector<std::string>, DefaultFunctionAttrs, "")
-
-TYPED_CODEGENOPT(
-    std::vector<std::string>, PassPlugins,
-    "List of dynamic shared object files to be loaded as pass plugins.")
-
-TYPED_CODEGENOPT(
-    std::vector<std::string>, SanitizeCoverageAllowlistFiles,
-    "Path to allowlist file specifying which objects (files, functions) should "
-    "exclusively be instrumented by sanitizer coverage pass.")
-
-TYPED_CODEGENOPT(std::vector<std::string>, SanitizeCoverageBlocklistFiles,
-                 "Path to blocklist file specifying which objects (files, "
-                 "functions) listed for instrumentation by sanitizer coverage "
-                 "pass should actually not be instrumented.")
-
-TYPED_CODEGENOPT(
-    const char *, Argv0,
-    "Executable and command-line used to create a given CompilerInvocation. "
-    "Most of the time this will be the full -cc1 command.")
-
-TYPED_CODEGENOPT(ArrayRef<const char *>, CommandLineArgs, "")
-
 #undef CODEGENOPT
 #undef ENUM_CODEGENOPT
 #undef VALUE_CODEGENOPT
-#undef TYPED_CODEGENOPT

diff  --git a/clang/include/clang/Basic/CodeGenOptions.h b/clang/include/clang/Basic/CodeGenOptions.h
index 093f4014ae8c..ca391bf8f186 100644
--- a/clang/include/clang/Basic/CodeGenOptions.h
+++ b/clang/include/clang/Basic/CodeGenOptions.h
@@ -110,15 +110,75 @@ class CodeGenOptions : public CodeGenOptionsBase {
     Embed_Marker    // Embed a marker as a placeholder for bitcode.
   };
 
+  // This field stores one of the allowed values for the option
+  // -fbasic-block-sections=.  The allowed values with this option are:
+  // {"labels", "all", "list=<file>", "none"}.
+  //
+  // "labels":      Only generate basic block symbols (labels) for all basic
+  //                blocks, do not generate unique sections for basic blocks.
+  //                Use the machine basic block id in the symbol name to
+  //                associate profile info from virtual address to machine
+  //                basic block.
+  // "all" :        Generate basic block sections for all basic blocks.
+  // "list=<file>": Generate basic block sections for a subset of basic blocks.
+  //                The functions and the machine basic block ids are specified
+  //                in the file.
+  // "none":        Disable sections/labels for basic blocks.
+  std::string BBSections;
+
   enum class FramePointerKind {
     None,        // Omit all frame pointers.
     NonLeaf,     // Keep non-leaf frame pointers.
     All,         // Keep all frame pointers.
   };
 
-  using DebugPrefixMapTy = std::map<std::string, std::string>;
+  /// The code model to use (-mcmodel).
+  std::string CodeModel;
+
+  /// The filename with path we use for coverage data files. The runtime
+  /// allows further manipulation with the GCOV_PREFIX and GCOV_PREFIX_STRIP
+  /// environment variables.
+  std::string CoverageDataFile;
+
+  /// The filename with path we use for coverage notes files.
+  std::string CoverageNotesFile;
+
+  /// Regexes separated by a semi-colon to filter the files to instrument.
+  std::string ProfileFilterFiles;
+
+  /// Regexes separated by a semi-colon to filter the files to not instrument.
+  std::string ProfileExcludeFiles;
+
+  /// The version string to put into coverage files.
+  char CoverageVersion[4];
+
+  /// Enable additional debugging information.
+  std::string DebugPass;
+
+  /// The string to embed in debug information as the current working directory.
+  std::string DebugCompilationDir;
+
+  /// The string to embed in the debug information for the compile unit, if
+  /// non-empty.
+  std::string DwarfDebugFlags;
+
+  /// The string containing the commandline for the llvm.commandline metadata,
+  /// if non-empty.
+  std::string RecordCommandLine;
+
+  std::map<std::string, std::string> DebugPrefixMap;
+
+  /// The ABI to use for passing floating point arguments.
+  std::string FloatABI;
+
+  /// The floating-point denormal mode to use.
+  llvm::DenormalMode FPDenormalMode = llvm::DenormalMode::getIEEE();
 
-  using CoverageVersionTy = char[4];
+  /// The floating-point denormal mode to use, for float.
+  llvm::DenormalMode FP32DenormalMode = llvm::DenormalMode::getIEEE();
+
+  /// The float precision limit to use, if non-empty.
+  std::string LimitFloatPrecision;
 
   struct BitcodeFileToLink {
     /// The filename of the bitcode file to link in.
@@ -133,14 +193,156 @@ class CodeGenOptions : public CodeGenOptionsBase {
     unsigned LinkFlags = 0;
   };
 
+  /// The files specified here are linked in to the module before optimizations.
+  std::vector<BitcodeFileToLink> LinkBitcodeFiles;
+
+  /// The user provided name for the "main file", if non-empty. This is useful
+  /// in situations where the input file name does not match the original input
+  /// file, for example with -save-temps.
+  std::string MainFileName;
+
+  /// The name for the split debug info file used for the DW_AT_[GNU_]dwo_name
+  /// attribute in the skeleton CU.
+  std::string SplitDwarfFile;
+
+  /// Output filename for the split debug info, not used in the skeleton CU.
+  std::string SplitDwarfOutput;
+
+  /// The name of the relocation model to use.
+  llvm::Reloc::Model RelocationModel;
+
+  /// The thread model to use
+  std::string ThreadModel;
+
+  /// If not an empty string, trap intrinsics are lowered to calls to this
+  /// function instead of to trap instructions.
+  std::string TrapFuncName;
+
+  /// A list of dependent libraries.
+  std::vector<std::string> DependentLibraries;
+
+  /// A list of linker options to embed in the object file.
+  std::vector<std::string> LinkerOptions;
+
+  /// Name of the profile file to use as output for -fprofile-instr-generate,
+  /// -fprofile-generate, and -fcs-profile-generate.
+  std::string InstrProfileOutput;
+
+  /// Name of the profile file to use with -fprofile-sample-use.
+  std::string SampleProfileFile;
+
+  /// Name of the profile file to use as input for -fprofile-instr-use
+  std::string ProfileInstrumentUsePath;
+
+  /// Name of the profile remapping file to apply to the profile data supplied
+  /// by -fprofile-sample-use or -fprofile-instr-use.
+  std::string ProfileRemappingFile;
+
+  /// Name of the function summary index file to use for ThinLTO function
+  /// importing.
+  std::string ThinLTOIndexFile;
+
+  /// Name of a file that can optionally be written with minimized bitcode
+  /// to be used as input for the ThinLTO thin link step, which only needs
+  /// the summary and module symbol table (and not, e.g. any debug metadata).
+  std::string ThinLinkBitcodeFile;
+
+  /// Prefix to use for -save-temps output.
+  std::string SaveTempsFilePrefix;
+
+  /// Name of file passed with -fcuda-include-gpubinary option to forward to
+  /// CUDA runtime back-end for incorporating them into host-side object file.
+  std::string CudaGpuBinaryFileName;
+
+  /// The name of the file to which the backend should save YAML optimization
+  /// records.
+  std::string OptRecordFile;
+
+  /// The regex that filters the passes that should be saved to the optimization
+  /// records.
+  std::string OptRecordPasses;
+
+  /// The format used for serializing remarks (default: YAML)
+  std::string OptRecordFormat;
+
+  /// The name of the partition that symbols are assigned to, specified with
+  /// -fsymbol-partition (see https://lld.llvm.org/Partitions.html).
+  std::string SymbolPartition;
+
+  /// Regular expression to select optimizations for which we should enable
+  /// optimization remarks. Transformation passes whose name matches this
+  /// expression (and support this feature), will emit a diagnostic
+  /// whenever they perform a transformation. This is enabled by the
+  /// -Rpass=regexp flag.
+  std::shared_ptr<llvm::Regex> OptimizationRemarkPattern;
+
+  /// Regular expression to select optimizations for which we should enable
+  /// missed optimization remarks. Transformation passes whose name matches this
+  /// expression (and support this feature), will emit a diagnostic
+  /// whenever they tried but failed to perform a transformation. This is
+  /// enabled by the -Rpass-missed=regexp flag.
+  std::shared_ptr<llvm::Regex> OptimizationRemarkMissedPattern;
+
+  /// Regular expression to select optimizations for which we should enable
+  /// optimization analyses. Transformation passes whose name matches this
+  /// expression (and support this feature), will emit a diagnostic
+  /// whenever they want to explain why they decided to apply or not apply
+  /// a given transformation. This is enabled by the -Rpass-analysis=regexp
+  /// flag.
+  std::shared_ptr<llvm::Regex> OptimizationRemarkAnalysisPattern;
+
+  /// Set of files defining the rules for the symbol rewriting.
+  std::vector<std::string> RewriteMapFiles;
+
+  /// Set of sanitizer checks that are non-fatal (i.e. execution should be
+  /// continued when possible).
+  SanitizerSet SanitizeRecover;
+
+  /// Set of sanitizer checks that trap rather than diagnose.
+  SanitizerSet SanitizeTrap;
+
+  /// List of backend command-line options for -fembed-bitcode.
+  std::vector<uint8_t> CmdArgs;
+
+  /// A list of all -fno-builtin-* function names (e.g., memset).
+  std::vector<std::string> NoBuiltinFuncs;
+
+  std::vector<std::string> Reciprocals;
+
+  /// The preferred width for auto-vectorization transforms. This is intended to
+  /// override default transforms based on the width of the architected vector
+  /// registers.
+  std::string PreferVectorWidth;
+
+  /// Set of XRay instrumentation kinds to emit.
+  XRayInstrSet XRayInstrumentationBundle;
+
+  std::vector<std::string> DefaultFunctionAttrs;
+
+  /// List of dynamic shared object files to be loaded as pass plugins.
+  std::vector<std::string> PassPlugins;
+
+  /// Path to allowlist file specifying which objects
+  /// (files, functions) should exclusively be instrumented
+  /// by sanitizer coverage pass.
+  std::vector<std::string> SanitizeCoverageAllowlistFiles;
+
+  /// Path to blocklist file specifying which objects
+  /// (files, functions) listed for instrumentation by sanitizer
+  /// coverage pass should actually not be instrumented.
+  std::vector<std::string> SanitizeCoverageBlocklistFiles;
+
+  /// Executable and command-line used to create a given CompilerInvocation.
+  /// Most of the time this will be the full -cc1 command.
+  const char *Argv0 = nullptr;
+  ArrayRef<const char *> CommandLineArgs;
 
 public:
   // Define accessors/mutators for code generation options of enumeration type.
 #define CODEGENOPT(Name, Bits, Default)
-#define ENUM_CODEGENOPT(Name, Type, Bits, Default)                             \
-  Type get##Name() const { return static_cast<Type>(Name); }                   \
+#define ENUM_CODEGENOPT(Name, Type, Bits, Default) \
+  Type get##Name() const { return static_cast<Type>(Name); } \
   void set##Name(Type Value) { Name = static_cast<unsigned>(Value); }
-#define TYPED_CODEGENOPT(Type, Name, Description) Type Name;
 #include "clang/Basic/CodeGenOptions.def"
 
   CodeGenOptions();

diff  --git a/clang/include/clang/Basic/CommentOptions.def b/clang/include/clang/Basic/CommentOptions.def
deleted file mode 100644
index 537f9eb34bd4..000000000000
--- a/clang/include/clang/Basic/CommentOptions.def
+++ /dev/null
@@ -1,26 +0,0 @@
-//===--- CommentOptions.def - Comment option database -------------*- C++
-//-*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-// This file defines the comment options. Users of this file must
-// define the TYPED_COMMENTOPT macro to make use of this information.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef TYPED_COMMENTOPT
-#define TYPED_COMMENTOPT(Type, Name, Description)
-#endif
-
-TYPED_COMMENTOPT(BlockCommandNamesTy, BlockCommandNames,
-                 "Command names to treat as vlock commands in comments. Should "
-                 "not include the leading backslash.")
-
-TYPED_COMMENTOPT(bool, ParseAllComments,
-                 "Treat ordinary comments as documentation comments")
-
-#undef TYPED_COMMENTOPT

diff  --git a/clang/include/clang/Basic/CommentOptions.h b/clang/include/clang/Basic/CommentOptions.h
index 149650e6192a..7d142fc32f51 100644
--- a/clang/include/clang/Basic/CommentOptions.h
+++ b/clang/include/clang/Basic/CommentOptions.h
@@ -23,10 +23,14 @@ namespace clang {
 struct CommentOptions {
   using BlockCommandNamesTy = std::vector<std::string>;
 
-#define TYPED_COMMENTOPT(Type, Name, Description) Type Name;
-#include "clang/Basic/CommentOptions.def"
+  /// Command names to treat as block commands in comments.
+  /// Should not include the leading backslash.
+  BlockCommandNamesTy BlockCommandNames;
 
-  CommentOptions() : ParseAllComments(false) {}
+  /// Treat ordinary comments as documentation comments.
+  bool ParseAllComments = false;
+
+  CommentOptions() = default;
 };
 
 } // namespace clang

diff  --git a/clang/include/clang/Basic/DiagnosticOptions.def b/clang/include/clang/Basic/DiagnosticOptions.def
index 35b01b8c5ce0..a946b5c6be8e 100644
--- a/clang/include/clang/Basic/DiagnosticOptions.def
+++ b/clang/include/clang/Basic/DiagnosticOptions.def
@@ -43,10 +43,6 @@ DIAGOPT(Name, Bits, Default)
      ENUM_DIAGOPT(Name, Type, Bits, Default)
 #endif
 
-#ifndef TYPED_DIAGOPT
-#define TYPED_DIAGOPT(Type, Name, Description)
-#endif
-
 SEMANTIC_DIAGOPT(IgnoreWarnings, 1, 0)   /// -w
 DIAGOPT(NoRewriteMacros, 1, 0)  /// -Wno-rewrite-macros
 DIAGOPT(Pedantic, 1, 0)         /// -pedantic
@@ -99,32 +95,9 @@ VALUE_DIAGOPT(TabStop, 32, DefaultTabStop) /// The distance between tab stops.
 /// Column limit for formatting message diagnostics, or 0 if unused.
 VALUE_DIAGOPT(MessageLength, 32, 0)
 
-TYPED_DIAGOPT(std::string, DiagnosticLogFile,
-              "The file to log diagnostic output to.")
-
-TYPED_DIAGOPT(std::string, DiagnosticSerializationFile,
-              "The file to serialize diagnostics to (non-appending).")
-
-TYPED_DIAGOPT(std::vector<std::string>, Warnings,
-              "The list of -W... options used to alter the diagnostic "
-              "mappings, with the prefixes removed.")
-
-TYPED_DIAGOPT(std::vector<std::string>, UndefPrefixes,
-              "The list of prefixes from -Wundef-prefix=... used to generate "
-              "warnings for undefined macros.")
-
-TYPED_DIAGOPT(std::vector<std::string>, Remarks,
-              "The list of -R... options used to alter the diagnostic "
-              "mappings, with the prefixes removed.")
-
-TYPED_DIAGOPT(std::vector<std::string>, VerifyPrefixes,
-              "The prefixes for comment directives sought by -verify "
-              "(\"expected\" by /// default).")
-
 #undef DIAGOPT
 #undef ENUM_DIAGOPT
 #undef VALUE_DIAGOPT
 #undef SEMANTIC_DIAGOPT
 #undef SEMANTIC_ENUM_DIAGOPT
 #undef SEMANTIC_VALUE_DIAGOPT
-#undef TYPED_DIAGOPT

diff  --git a/clang/include/clang/Basic/DiagnosticOptions.h b/clang/include/clang/Basic/DiagnosticOptions.h
index 2b6bd1fd2be5..7fbe534c5994 100644
--- a/clang/include/clang/Basic/DiagnosticOptions.h
+++ b/clang/include/clang/Basic/DiagnosticOptions.h
@@ -88,9 +88,31 @@ class DiagnosticOptions : public RefCountedBase<DiagnosticOptions>{
 #include "clang/Basic/DiagnosticOptions.def"
 
 public:
-#define TYPED_DIAGOPT(Type, Name, Description) Type Name;
+  /// The file to log diagnostic output to.
+  std::string DiagnosticLogFile;
+
+  /// The file to serialize diagnostics to (non-appending).
+  std::string DiagnosticSerializationFile;
+
+  /// The list of -W... options used to alter the diagnostic mappings, with the
+  /// prefixes removed.
+  std::vector<std::string> Warnings;
+
+  /// The list of prefixes from -Wundef-prefix=... used to generate warnings
+  /// for undefined macros.
+  std::vector<std::string> UndefPrefixes;
+
+  /// The list of -R... options used to alter the diagnostic mappings, with the
+  /// prefixes removed.
+  std::vector<std::string> Remarks;
+
+  /// The prefixes for comment directives sought by -verify ("expected" by
+  /// default).
+  std::vector<std::string> VerifyPrefixes;
+
+public:
+  // Define accessors/mutators for diagnostic options of enumeration type.
 #define DIAGOPT(Name, Bits, Default)
-// Define accessors/mutators for diagnostic options of enumeration type.
 #define ENUM_DIAGOPT(Name, Type, Bits, Default) \
   Type get##Name() const { return static_cast<Type>(Name); } \
   void set##Name(Type Value) { Name = static_cast<unsigned>(Value); }

diff  --git a/clang/include/clang/Basic/FileSystemOptions.def b/clang/include/clang/Basic/FileSystemOptions.def
deleted file mode 100644
index 794e9871998e..000000000000
--- a/clang/include/clang/Basic/FileSystemOptions.def
+++ /dev/null
@@ -1,21 +0,0 @@
-//===--- FileSystemOptions.def - FileSystem option database -----*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-// This file defines the FileSystem options.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef TYPED_FILESYSTEMOPT
-#error define TYPED_FILESYSTEMOPT macro to hand filesystem options
-#endif
-
-TYPED_FILESYSTEMOPT(std::string, WorkingDir,
-              "If set, paths are resolved as if the working directory was set "
-              "to the value of WorkingDir.")
-
-#undef TYPED_FILESYSTEMOPT

diff  --git a/clang/include/clang/Basic/FileSystemOptions.h b/clang/include/clang/Basic/FileSystemOptions.h
index 4fd0851145a2..458af0c7b659 100644
--- a/clang/include/clang/Basic/FileSystemOptions.h
+++ b/clang/include/clang/Basic/FileSystemOptions.h
@@ -21,8 +21,9 @@ namespace clang {
 /// Keeps track of options that affect how file operations are performed.
 class FileSystemOptions {
 public:
-#define TYPED_FILESYSTEMOPT(Type, Name, Description) Type Name;
-#include "clang/Basic/FileSystemOptions.def"
+  /// If set, paths are resolved as if the working directory was
+  /// set to the value of WorkingDir.
+  std::string WorkingDir;
 };
 
 } // end namespace clang

diff  --git a/clang/include/clang/Basic/LangOptions.def b/clang/include/clang/Basic/LangOptions.def
index 55a784196bb9..3132e7635418 100644
--- a/clang/include/clang/Basic/LangOptions.def
+++ b/clang/include/clang/Basic/LangOptions.def
@@ -78,10 +78,6 @@
      COMPATIBLE_VALUE_LANGOPT(Name, Bits, Default, Description)
 #endif
 
-#ifndef TYPED_LANGOPT
-#define TYPED_LANGOPT(Type, Name, Descritpion)
-#endif
-
 // FIXME: A lot of the BENIGN_ options should be COMPATIBLE_ instead.
 LANGOPT(C99               , 1, 0, "C99")
 LANGOPT(C11               , 1, 0, "C11")
@@ -391,73 +387,6 @@ LANGOPT(RelativeCXXABIVTables, 1, 0,
 
 LANGOPT(ArmSveVectorBits, 32, 0, "SVE vector size in bits")
 
-TYPED_LANGOPT(SanitizerSet, Sanitize, "Set of enabled sanitizers.")
-
-TYPED_LANGOPT(std::vector<std::string>, SanitizerBlacklistFiles,
-              "Paths to blacklist files specifying which objects (files, "
-              "functions, variables) should not be instrumented.")
-
-TYPED_LANGOPT(std::vector<std::string>, XRayAlwaysInstrumentFiles,
-              "Paths to the XRay \"always instrument\" files specifying which "
-              "objects (files, functions, variables) should be imbued with the "
-              "XRay \"always instrument\" attribute. WARNING: This is a "
-              "deprecated field and will go away in the future.")
-
-TYPED_LANGOPT(std::vector<std::string>, XRayNeverInstrumentFiles,
-              "Paths to the XRay \"never instrument\" files specifying which "
-              "objects (files, functions, variables) should be imbued with the "
-              "XRay \"never instrument\" attribute. WARNING: This is a "
-              "deprecated field and will go away in the future.")
-
-TYPED_LANGOPT(std::vector<std::string>, XRayAttrListFiles,
-              "Paths to the XRay attribute list files, specifying which "
-              "objects (files, functions, variables) should be imbued with the "
-              "appropriate XRay attribute(s).")
-
-TYPED_LANGOPT(clang::ObjCRuntime, ObjCRuntime, "")
-
-TYPED_LANGOPT(CoreFoundationABI, CFRuntime, "")
-
-TYPED_LANGOPT(std::string, ObjCConstantStringClass, "")
-
-TYPED_LANGOPT(
-    std::string, OverflowHandler,
-    "The name of the handler function to be called when -ftrapv is specified. "
-    "If none is specified, abort (GCC-compatible behaviour).")
-
-TYPED_LANGOPT(
-    std::string, ModuleName,
-    "The module currently being compiled as specified by -fmodule-name.")
-
-TYPED_LANGOPT(
-    std::string, CurrentModule,
-    "The name of the current module, of which the main source file is a part. "
-    "If CompilingModule is set, we are compiling the interface of this module, "
-    "otherwise we are compiling an implementation file of it. This starts as "
-    "ModuleName in case -fmodule-name is provided and changes during "
-    "compilation to reflect the current module.")
-
-TYPED_LANGOPT(std::vector<std::string>, ModuleFeatures,
-              "The names of any features to enable in module 'requires' decls "
-              "in addition to the hard-coded list in Module.cpp and the target "
-              "features. This list is sorted.")
-
-TYPED_LANGOPT(std::vector<std::string>, NoBuiltinFuncs,
-              "A list of all -fno-builtin-* function names (e.g., memset).")
-
-TYPED_LANGOPT(
-    std::vector<llvm::Triple>, OMPTargetTriples,
-    "Triples of the OpenMP targets that the host code codegen should take into "
-    "account in order to generate accurate offloading descriptors.")
-
-TYPED_LANGOPT(std::string, OMPHostIRFile,
-              "Name of the IR file that contains the result of the OpenMP "
-              "target host code generation.")
-
-TYPED_LANGOPT(bool, IsHeaderFile,
-              "Indicates whether the front-end is explicitly told that the "
-              "input is a header file (i.e. -x c-header).")
-
 #undef LANGOPT
 #undef COMPATIBLE_LANGOPT
 #undef BENIGN_LANGOPT
@@ -467,4 +396,3 @@ TYPED_LANGOPT(bool, IsHeaderFile,
 #undef VALUE_LANGOPT
 #undef COMPATIBLE_VALUE_LANGOPT
 #undef BENIGN_VALUE_LANGOPT
-#undef TYPED_LANGOPT

diff  --git a/clang/include/clang/Basic/LangOptions.h b/clang/include/clang/Basic/LangOptions.h
index 6af97fd5b2a7..4e277435bf8f 100644
--- a/clang/include/clang/Basic/LangOptions.h
+++ b/clang/include/clang/Basic/LangOptions.h
@@ -227,12 +227,75 @@ class LangOptions : public LangOptionsBase {
   };
 
 public:
+  /// Set of enabled sanitizers.
+  SanitizerSet Sanitize;
+
+  /// Paths to blacklist files specifying which objects
+  /// (files, functions, variables) should not be instrumented.
+  std::vector<std::string> SanitizerBlacklistFiles;
+
+  /// Paths to the XRay "always instrument" files specifying which
+  /// objects (files, functions, variables) should be imbued with the XRay
+  /// "always instrument" attribute.
+  /// WARNING: This is a deprecated field and will go away in the future.
+  std::vector<std::string> XRayAlwaysInstrumentFiles;
+
+  /// Paths to the XRay "never instrument" files specifying which
+  /// objects (files, functions, variables) should be imbued with the XRay
+  /// "never instrument" attribute.
+  /// WARNING: This is a deprecated field and will go away in the future.
+  std::vector<std::string> XRayNeverInstrumentFiles;
+
+  /// Paths to the XRay attribute list files, specifying which objects
+  /// (files, functions, variables) should be imbued with the appropriate XRay
+  /// attribute(s).
+  std::vector<std::string> XRayAttrListFiles;
+
+  clang::ObjCRuntime ObjCRuntime;
+
+  CoreFoundationABI CFRuntime = CoreFoundationABI::Unspecified;
+
+  std::string ObjCConstantStringClass;
+
+  /// The name of the handler function to be called when -ftrapv is
+  /// specified.
+  ///
+  /// If none is specified, abort (GCC-compatible behaviour).
+  std::string OverflowHandler;
+
+  /// The module currently being compiled as specified by -fmodule-name.
+  std::string ModuleName;
+
+  /// The name of the current module, of which the main source file
+  /// is a part. If CompilingModule is set, we are compiling the interface
+  /// of this module, otherwise we are compiling an implementation file of
+  /// it. This starts as ModuleName in case -fmodule-name is provided and
+  /// changes during compilation to reflect the current module.
+  std::string CurrentModule;
+
+  /// The names of any features to enable in module 'requires' decls
+  /// in addition to the hard-coded list in Module.cpp and the target features.
+  ///
+  /// This list is sorted.
+  std::vector<std::string> ModuleFeatures;
+
   /// Options for parsing comments.
   CommentOptions CommentOpts;
 
-#define LANGOPT(Name, Bits, Default, Description)
-#define TYPED_LANGOPT(Type, Name, Description) Type Name;
-#include "clang/Basic/LangOptions.def"
+  /// A list of all -fno-builtin-* function names (e.g., memset).
+  std::vector<std::string> NoBuiltinFuncs;
+
+  /// Triples of the OpenMP targets that the host code codegen should
+  /// take into account in order to generate accurate offloading descriptors.
+  std::vector<llvm::Triple> OMPTargetTriples;
+
+  /// Name of the IR file that contains the result of the OpenMP target
+  /// host code generation.
+  std::string OMPHostIRFile;
+
+  /// Indicates whether the front-end is explicitly told that the
+  /// input is a header file (i.e. -x c-header).
+  bool IsHeaderFile = false;
 
   LangOptions();
 

diff  --git a/clang/include/clang/Basic/TargetOptions.def b/clang/include/clang/Basic/TargetOptions.def
deleted file mode 100644
index 33e746f012ce..000000000000
--- a/clang/include/clang/Basic/TargetOptions.def
+++ /dev/null
@@ -1,88 +0,0 @@
-//===--- TargetOptions.def - Target option database -------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-// This file defines the target options. Users of this file must
-// define the TYPED_TARGETOPT macro to make use of this information.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef TYPED_TARGETOPT
-#error Define the TYPED_TARGETOPT macro to handle target options
-#endif
-
-TYPED_TARGETOPT(std::string, Triple,
-                "The name of the target triple to compile for.")
-
-TYPED_TARGETOPT(
-    std::string, HostTriple,
-    "When compiling for the device side, contains the triple used to "
-    "compile for the host.")
-
-TYPED_TARGETOPT(std::string, CPU,
-                "If given, the name of the target CPU to generate code for.")
-
-TYPED_TARGETOPT(std::string, TuneCPU,
-                "If given, the name of the target CPU to tune code for.")
-
-TYPED_TARGETOPT(std::string, FPMath,
-                "If given, the unit to use for floating point math.")
-
-TYPED_TARGETOPT(std::string, ABI,
-                "If given, the name of the target ABI to use.")
-
-TYPED_TARGETOPT(llvm::EABI, EABIVersion, "The EABI version to use.")
-
-TYPED_TARGETOPT(std::string, LinkerVersion,
-                "If given, the version string of the linker in use.")
-
-TYPED_TARGETOPT(std::vector<std::string>, FeaturesAsWritten,
-                "The list of target specific features to enable or disable, as "
-                "written on the command line.")
-
-TYPED_TARGETOPT(
-    std::vector<std::string>, Features,
-    "The list of target specific features to enable or disable -- this "
-    "should be a list of strings starting with by '+' or '-'.")
-
-TYPED_TARGETOPT(llvm::StringMap<bool>, FeatureMap,
-                "The map of which features have been enabled disabled based on "
-                "the command line.")
-
-TYPED_TARGETOPT(OpenCLOptions, SupportedOpenCLOptions,
-                "Supported OpenCL extensions and optional core features.")
-
-TYPED_TARGETOPT(
-    std::vector<std::string>, OpenCLExtensionsAsWritten,
-    "The list of OpenCL extensions to enable or disable, as written on "
-    "the command line.")
-
-TYPED_TARGETOPT(
-    bool, ForceEnableInt128,
-    "If given, enables support for __int128_t and __uint128_t types.")
-
-TYPED_TARGETOPT(
-    bool, NVPTXUseShortPointers,
-    "If enabled, use 32-bit pointers for accessing const/local/shared "
-    "address space.")
-
-TYPED_TARGETOPT(
-    std::string, CodeModel,
-    "The code model to be used as specified by the user. Corresponds to "
-    "CodeModel::Model enum defined in include/llvm/Support/CodeGen.h, "
-    "plus \"default\" for the case when the user has not explicitly "
-    "specified a code model.")
-
-TYPED_TARGETOPT(
-    llvm::VersionTuple, SDKVersion,
-    "The version of the SDK which was used during the compilation. The option "
-    "is used for two 
diff erent purposes. On Darwin the version is propagated "
-    "to LLVM where it's used to support SDK Version metadata (See D55673). "
-    "CUDA compilation uses it to control parts of CUDA compilation in clang "
-    "that depend on specific version of the CUDA SDK.")
-
-#undef TYPED_TARGETOPT

diff  --git a/clang/include/clang/Basic/TargetOptions.h b/clang/include/clang/Basic/TargetOptions.h
index 1771c3bdbb61..d1cc024957da 100644
--- a/clang/include/clang/Basic/TargetOptions.h
+++ b/clang/include/clang/Basic/TargetOptions.h
@@ -25,9 +25,69 @@ namespace clang {
 /// Options for controlling the target.
 class TargetOptions {
 public:
-#define TYPED_TARGETOPT(Type, Name, Description) Type Name;
-#include "clang/Basic/TargetOptions.def"
-  TargetOptions() : ForceEnableInt128(false), NVPTXUseShortPointers(false) {}
+  /// The name of the target triple to compile for.
+  std::string Triple;
+
+  /// When compiling for the device side, contains the triple used to compile
+  /// for the host.
+  std::string HostTriple;
+
+  /// If given, the name of the target CPU to generate code for.
+  std::string CPU;
+
+  /// If given, the name of the target CPU to tune code for.
+  std::string TuneCPU;
+
+  /// If given, the unit to use for floating point math.
+  std::string FPMath;
+
+  /// If given, the name of the target ABI to use.
+  std::string ABI;
+
+  /// The EABI version to use
+  llvm::EABI EABIVersion;
+
+  /// If given, the version string of the linker in use.
+  std::string LinkerVersion;
+
+  /// The list of target specific features to enable or disable, as written on the command line.
+  std::vector<std::string> FeaturesAsWritten;
+
+  /// The list of target specific features to enable or disable -- this should
+  /// be a list of strings starting with by '+' or '-'.
+  std::vector<std::string> Features;
+
+  /// The map of which features have been enabled disabled based on the command
+  /// line.
+  llvm::StringMap<bool> FeatureMap;
+
+  /// Supported OpenCL extensions and optional core features.
+  OpenCLOptions SupportedOpenCLOptions;
+
+  /// The list of OpenCL extensions to enable or disable, as written on
+  /// the command line.
+  std::vector<std::string> OpenCLExtensionsAsWritten;
+
+  /// If given, enables support for __int128_t and __uint128_t types.
+  bool ForceEnableInt128 = false;
+
+  /// \brief If enabled, use 32-bit pointers for accessing const/local/shared
+  /// address space.
+  bool NVPTXUseShortPointers = false;
+
+  // The code model to be used as specified by the user. Corresponds to
+  // CodeModel::Model enum defined in include/llvm/Support/CodeGen.h, plus
+  // "default" for the case when the user has not explicitly specified a
+  // code model.
+  std::string CodeModel;
+
+  /// The version of the SDK which was used during the compilation.
+  /// The option is used for two 
diff erent purposes:
+  /// * on darwin the version is propagated to LLVM where it's used
+  ///   to support SDK Version metadata (See D55673).
+  /// * CUDA compilation uses it to control parts of CUDA compilation
+  ///   in clang that depend on specific version of the CUDA SDK.
+  llvm::VersionTuple SDKVersion;
 };
 
 }  // end namespace clang

diff  --git a/clang/include/clang/Frontend/CompilerInvocation.h b/clang/include/clang/Frontend/CompilerInvocation.h
index c8a95ae69d72..c723fc084c85 100644
--- a/clang/include/clang/Frontend/CompilerInvocation.h
+++ b/clang/include/clang/Frontend/CompilerInvocation.h
@@ -19,10 +19,9 @@
 #include "clang/Frontend/FrontendOptions.h"
 #include "clang/Frontend/MigratorOptions.h"
 #include "clang/Frontend/PreprocessorOutputOptions.h"
-#include "clang/Sema/CodeCompleteOptions.h"
 #include "clang/StaticAnalyzer/Core/AnalyzerOptions.h"
-#include "llvm/ADT/ArrayRef.h"
 #include "llvm/ADT/IntrusiveRefCntPtr.h"
+#include "llvm/ADT/ArrayRef.h"
 #include <memory>
 #include <string>
 
@@ -87,9 +86,6 @@ class CompilerInvocationBase {
   LangOptions *getLangOpts() { return LangOpts.get(); }
   const LangOptions *getLangOpts() const { return LangOpts.get(); }
 
-  CommentOptions &getCommentOpts() { return LangOpts->CommentOpts; }
-  const CommentOptions &getCommentOpts() const { return LangOpts->CommentOpts; }
-
   TargetOptions &getTargetOpts() { return *TargetOpts.get(); }
   const TargetOptions &getTargetOpts() const { return *TargetOpts.get(); }
 
@@ -231,14 +227,6 @@ class CompilerInvocation : public CompilerInvocationBase {
   FrontendOptions &getFrontendOpts() { return FrontendOpts; }
   const FrontendOptions &getFrontendOpts() const { return FrontendOpts; }
 
-  CodeCompleteOptions &getCodeCompleteOpts() {
-    return FrontendOpts.CodeCompleteOpts;
-  }
-
-  const CodeCompleteOptions &getCodeCompleteOpts() const {
-    return FrontendOpts.CodeCompleteOpts;
-  }
-
   PreprocessorOutputOptions &getPreprocessorOutputOpts() {
     return PreprocessorOutputOpts;
   }

diff  --git a/clang/include/clang/Frontend/DependencyOutputOptions.def b/clang/include/clang/Frontend/DependencyOutputOptions.def
deleted file mode 100644
index 0fbd90226f11..000000000000
--- a/clang/include/clang/Frontend/DependencyOutputOptions.def
+++ /dev/null
@@ -1,50 +0,0 @@
-//===--- DependencyOutputOptions.def -------------------------------C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-// This file contains the DependencyOutput options, to use this file one needs
-// to define the TYPED_DEPENDENCY_OUTPUTOPT and/or the DEPENDECY_OUTPUTOPT macro
-// to get more information about bitfields.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef TYPED_DEPENDENCY_OUTPUTOPT
-#define TYPED_DEPENDENCY_OUTPUTOPT(Type, Name, Description)
-#endif
-
-#ifndef DEPENDENCY_OUTPUTOPT
-#define DEPENDENCY_OUTPUTOPT(Name, Bits, Description)                          \
-  TYPED_DEPENDENCY_OUTPUTOPT(unsigned, Name, Description)
-#endif
-
-DEPENDENCY_OUTPUTOPT(IncludeSystemHeaders, 1, "Include system header dependencies.")
-DEPENDENCY_OUTPUTOPT(ShowHeaderIncludes, 1, "Show header inclusions (-H).")
-DEPENDENCY_OUTPUTOPT(UsePhonyTargets, 1, "Include phony targets for each dependency, which can "
-                     "avoid some 'make' problems.")
-DEPENDENCY_OUTPUTOPT(AddMissingHeaderDeps, 1, "Add missing headers to dependency list.")
-DEPENDENCY_OUTPUTOPT(IncludeModuleFiles, 1, "Include module file dependencies.")
-
-TYPED_DEPENDENCY_OUTPUTOPT(ShowIncludesDestination, ShowIncludesDest, "Destination of cl.exe style /showIncludes info.")
-
-TYPED_DEPENDENCY_OUTPUTOPT(DependencyOutputFormat, OutputFormat, "The format for the dependency file")
-
-TYPED_DEPENDENCY_OUTPUTOPT(std::string, OutputFile, "The file to write dependency output to.")
-
-TYPED_DEPENDENCY_OUTPUTOPT(std::string, HeaderIncludeOutputFile, "The file to write header include output to. This is orthogonal to ShowHeaderIncludes (-H) and will include headers mentioned in the predefines buffer. If the output file is \"-\", output will be sent to stderr.")
-
-TYPED_DEPENDENCY_OUTPUTOPT(std::vector<std::string>, Targets, "A list of names to use as the targets in the dependency file; this list must contain at least one entry.")
-
-TYPED_DEPENDENCY_OUTPUTOPT(std::vector<std::string>, ExtraDeps, "A list of filenames to be used as extra dependencies for every target.")
-
-TYPED_DEPENDENCY_OUTPUTOPT(std::string, ShowIncludesPretendHeader, "In /showIncludes mode, pretend the main TU is a header with this name.")
-
-TYPED_DEPENDENCY_OUTPUTOPT(std::string, DOTOutputFile, "The file to write GraphViz-formatted header dependencies to.")
-
-TYPED_DEPENDENCY_OUTPUTOPT(std::string, ModuleDependencyOutputDir, "The directory to copy module dependencies to when collecting them.")
-
-#undef TYPED_DEPENDENCY_OUTPUTOPT
-#undef DEPENDENCY_OUTPUTOPT
\ No newline at end of file

diff  --git a/clang/include/clang/Frontend/DependencyOutputOptions.h b/clang/include/clang/Frontend/DependencyOutputOptions.h
index 581e9b5a544b..7a4f3337936f 100644
--- a/clang/include/clang/Frontend/DependencyOutputOptions.h
+++ b/clang/include/clang/Frontend/DependencyOutputOptions.h
@@ -24,15 +24,49 @@ enum class DependencyOutputFormat { Make, NMake };
 /// file generation.
 class DependencyOutputOptions {
 public:
-#define TYPED_DEPENDENCY_OUTPUTOPT(Type, Name, Description) Type Name;
-#define DEPENDENCY_OUTPUTOPT(Name, Bits, Description) unsigned Name : Bits;
-#include "clang/Frontend/DependencyOutputOptions.def"
+  unsigned IncludeSystemHeaders : 1; ///< Include system header dependencies.
+  unsigned ShowHeaderIncludes : 1;   ///< Show header inclusions (-H).
+  unsigned UsePhonyTargets : 1;      ///< Include phony targets for each
+                                     /// dependency, which can avoid some 'make'
+                                     /// problems.
+  unsigned AddMissingHeaderDeps : 1; ///< Add missing headers to dependency list
+  unsigned IncludeModuleFiles : 1; ///< Include module file dependencies.
+
+  /// Destination of cl.exe style /showIncludes info.
+  ShowIncludesDestination ShowIncludesDest = ShowIncludesDestination::None;
+
+  /// The format for the dependency file.
+  DependencyOutputFormat OutputFormat = DependencyOutputFormat::Make;
+
+  /// The file to write dependency output to.
+  std::string OutputFile;
+
+  /// The file to write header include output to. This is orthogonal to
+  /// ShowHeaderIncludes (-H) and will include headers mentioned in the
+  /// predefines buffer. If the output file is "-", output will be sent to
+  /// stderr.
+  std::string HeaderIncludeOutputFile;
+
+  /// A list of names to use as the targets in the dependency file; this list
+  /// must contain at least one entry.
+  std::vector<std::string> Targets;
+
+  /// A list of filenames to be used as extra dependencies for every target.
+  std::vector<std::string> ExtraDeps;
+
+  /// In /showIncludes mode, pretend the main TU is a header with this name.
+  std::string ShowIncludesPretendHeader;
+
+  /// The file to write GraphViz-formatted header dependencies to.
+  std::string DOTOutputFile;
+
+  /// The directory to copy module dependencies to when collecting them.
+  std::string ModuleDependencyOutputDir;
+
 public:
   DependencyOutputOptions()
       : IncludeSystemHeaders(0), ShowHeaderIncludes(0), UsePhonyTargets(0),
-        AddMissingHeaderDeps(0), IncludeModuleFiles(0),
-        ShowIncludesDest(ShowIncludesDestination::None),
-        OutputFormat(DependencyOutputFormat::Make) {}
+        AddMissingHeaderDeps(0), IncludeModuleFiles(0) {}
 };
 
 }  // end namespace clang

diff  --git a/clang/include/clang/Frontend/FrontendOptions.def b/clang/include/clang/Frontend/FrontendOptions.def
deleted file mode 100644
index c6188d9cf025..000000000000
--- a/clang/include/clang/Frontend/FrontendOptions.def
+++ /dev/null
@@ -1,179 +0,0 @@
-//===--- FrontendOptions.def - FileSystem option database -----*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-// This file defines the Frontend options.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef TYPED_FRONTENDOPT
-#define TYPED_FRONTENDOPT(Type, Name, Description)
-#endif
-
-#ifndef FRONTENDOPT
-#define FRONTENDOPT(Name, Bits, Description)                                   \
-  TYPED_FRONTENDOPT(unsigned, Name, Description)
-#endif
-
-FRONTENDOPT(DisableFree, 1, "Disable memory freeing on exit.")
-
-FRONTENDOPT(RelocatablePCH, 1,
-            "When generating PCH files, instruct the AST writer to create "
-            "relocatable PCH files.")
-
-FRONTENDOPT(ShowHelp, 1, "Show the -help text.")
-
-FRONTENDOPT(ShowStats, 1, "Show frontend performance metrics and statistics.")
-
-FRONTENDOPT(ShowTimers, 1, "Show timers for individual actions.")
-
-FRONTENDOPT(PrintSupportedCPUs, 1,
-            "print the supported cpus for the current target")
-
-FRONTENDOPT(TimeTrace, 1, "Output time trace profile.")
-
-FRONTENDOPT(ShowVersion, 1, "Show the -version text.")
-
-FRONTENDOPT(FixWhatYouCan, 1, "Apply fixes even if there are unfixable errors.")
-
-FRONTENDOPT(FixOnlyWarnings, 1, "Apply fixes only for warnings.")
-
-FRONTENDOPT(FixAndRecompile, 1, "Apply fixes and recompile.")
-
-FRONTENDOPT(FixToTemporaries, 1, "Apply fixes to temporary files.")
-
-FRONTENDOPT(ARCMTAction, 3, "")
-
-FRONTENDOPT(ARCMTMigrateEmitARCErrors, 1,
-            "Emit ARC errors even if the migrator can fix them.")
-
-FRONTENDOPT(SkipFunctionBodies, 1,
-            "Skip over function bodies to speed up parsing in cases you do not "
-            "need them (e.g. with code completion).")
-
-FRONTENDOPT(UseGlobalModuleIndex, 1,
-            "Whether we can use the global module index if available.")
-
-FRONTENDOPT(GenerateGlobalModuleIndex, 1,
-            "Whether we can generate the global module index if needed.")
-
-FRONTENDOPT(ASTDumpDecls, 1,
-            "Whether we include declaration dumps in AST dumps.")
-
-FRONTENDOPT(ASTDumpAll, 1,
-            "Whether we deserialize all decls when forming AST dumps.")
-
-FRONTENDOPT(ASTDumpLookups, 1,
-            "Whether we include lookup table dumps in AST dumps.")
-
-FRONTENDOPT(ASTDumpDeclTypes, 1,
-            "Whether we include declaration type dumps in AST dumps.")
-
-FRONTENDOPT(BuildingImplicitModule, 1,
-            "Whether we are performing an implicit module build.")
-
-FRONTENDOPT(ModulesEmbedAllFiles, 1,
-            "Whether we should embed all used files into the PCM file.")
-
-FRONTENDOPT(IncludeTimestamps, 1,
-            "Whether timestamps should be written to the produced PCH file.")
-
-FRONTENDOPT(UseTemporary, 1,
-            "Should a temporary file be used during compilation.")
-
-FRONTENDOPT(IsSystemModule, 1,
-            "When using -emit-module, treat the modulemap as a system module.")
-
-TYPED_FRONTENDOPT(ASTDumpOutputFormat, ASTDumpFormat,
-                  "Specifies the output format of the AST.")
-
-TYPED_FRONTENDOPT(unsigned, ObjCMTAction, "")
-
-TYPED_FRONTENDOPT(std::string, ObjCMTWhiteListPath, "")
-
-TYPED_FRONTENDOPT(std::string, MTMigrateDir, "")
-
-TYPED_FRONTENDOPT(std::string, ARCMTMigrateReportOut, "")
-
-TYPED_FRONTENDOPT(InputsTy, Inputs, "The input files and their types.")
-
-TYPED_FRONTENDOPT(
-    std::string, OriginalModuleMap,
-    "When the input is a module map, the original module map file from which "
-    "that map was inferred, if any (for umbrella modules).")
-
-TYPED_FRONTENDOPT(std::string, OutputFile, "The output file, if any.")
-
-TYPED_FRONTENDOPT(std::string, FixItSuffix,
-                  "If given, the new suffix for fix-it rewritten files.")
-
-TYPED_FRONTENDOPT(std::string, ASTDumpFilter,
-                  "If given, filter dumped AST Decl nodes by this substring.")
-
-TYPED_FRONTENDOPT(ParsedSourceLocation, CodeCompletionAt,
-                  "If given, enable code completion at the provided location.")
-
-TYPED_FRONTENDOPT(frontend::ActionKind, ProgramAction,
-                  "The frontend action to perform.")
-
-TYPED_FRONTENDOPT(std::string, ActionName,
-                  "The name of the action to run when using a plugin action.")
-
-TYPED_FRONTENDOPT(PluginArgsTy, PluginArgs, "Args to pass to the plugins")
-
-TYPED_FRONTENDOPT(
-    std::vector<std::string>, AddPluginActions,
-    "The list of plugin actions to run in addition to the normal action.")
-
-TYPED_FRONTENDOPT(std::vector<std::string>, Plugins,
-                  "The list of plugins to load.")
-
-TYPED_FRONTENDOPT(std::vector<std::shared_ptr<ModuleFileExtension>>,
-                  ModuleFileExtensions, "The list of module file extensions.")
-
-TYPED_FRONTENDOPT(
-    std::vector<std::string>, ModuleMapFiles,
-    "The list of module map files to load before processing the input.")
-
-TYPED_FRONTENDOPT(std::vector<std::string>, ModuleFiles,
-                  "The list of additional prebuilt module files to load before "
-                  "processing the input.")
-
-TYPED_FRONTENDOPT(std::vector<std::string>, ModulesEmbedFiles,
-                  "The list of files to embed into the compiled module file.")
-
-TYPED_FRONTENDOPT(std::vector<std::string>, ASTMergeFiles,
-                  "The list of AST files to merge.")
-
-TYPED_FRONTENDOPT(
-    std::vector<std::string>, LLVMArgs,
-    "A list of arguments to forward to LLVM's option processing; this should "
-    "only be used for debugging and experimental features.")
-
-TYPED_FRONTENDOPT(std::string, OverrideRecordLayoutsFile,
-                  "File name of the file that will provide record layouts (in "
-                  "the format produced by -fdump-record-layouts).")
-
-TYPED_FRONTENDOPT(std::string, AuxTriple,
-                  "Auxiliary triple for CUDA/HIP compilation.")
-
-TYPED_FRONTENDOPT(Optional<std::string>, AuxTargetCPU,
-                  "Auxiliary target CPU for CUDA/HIP compilation.")
-
-TYPED_FRONTENDOPT(Optional<std::vector<std::string>>, AuxTargetFeatures,
-                  "Auxiliary target features for CUDA/HIP compilation.")
-
-TYPED_FRONTENDOPT(std::string, StatsFile, "Filename to write statistics to.")
-
-TYPED_FRONTENDOPT(
-    unsigned, TimeTraceGranularity,
-    "Minimum time granularity (in microseconds) traced by time profiler.")
-
-TYPED_FRONTENDOPT(InputKind, DashX, "Input Kind")
-
-#undef TYPED_FRONTENDOPT
-#undef FRONTENDOPT
\ No newline at end of file

diff  --git a/clang/include/clang/Frontend/FrontendOptions.h b/clang/include/clang/Frontend/FrontendOptions.h
index 5dccdf50ca46..b2be33032c08 100644
--- a/clang/include/clang/Frontend/FrontendOptions.h
+++ b/clang/include/clang/Frontend/FrontendOptions.h
@@ -226,14 +226,94 @@ class FrontendInputFile {
 /// FrontendOptions - Options for controlling the behavior of the frontend.
 class FrontendOptions {
 public:
-  using PluginArgsTy =
-      std::unordered_map<std::string, std::vector<std::string>>;
+  /// Disable memory freeing on exit.
+  unsigned DisableFree : 1;
 
-  using InputsTy = llvm::SmallVector<FrontendInputFile, 0>;
+  /// When generating PCH files, instruct the AST writer to create relocatable
+  /// PCH files.
+  unsigned RelocatablePCH : 1;
+
+  /// Show the -help text.
+  unsigned ShowHelp : 1;
+
+  /// Show frontend performance metrics and statistics.
+  unsigned ShowStats : 1;
+
+  /// Show timers for individual actions.
+  unsigned ShowTimers : 1;
+
+  /// print the supported cpus for the current target
+  unsigned PrintSupportedCPUs : 1;
+
+  /// Output time trace profile.
+  unsigned TimeTrace : 1;
+
+  /// Show the -version text.
+  unsigned ShowVersion : 1;
+
+  /// Apply fixes even if there are unfixable errors.
+  unsigned FixWhatYouCan : 1;
+
+  /// Apply fixes only for warnings.
+  unsigned FixOnlyWarnings : 1;
+
+  /// Apply fixes and recompile.
+  unsigned FixAndRecompile : 1;
+
+  /// Apply fixes to temporary files.
+  unsigned FixToTemporaries : 1;
+
+  /// Emit ARC errors even if the migrator can fix them.
+  unsigned ARCMTMigrateEmitARCErrors : 1;
+
+  /// Skip over function bodies to speed up parsing in cases you do not need
+  /// them (e.g. with code completion).
+  unsigned SkipFunctionBodies : 1;
+
+  /// Whether we can use the global module index if available.
+  unsigned UseGlobalModuleIndex : 1;
+
+  /// Whether we can generate the global module index if needed.
+  unsigned GenerateGlobalModuleIndex : 1;
+
+  /// Whether we include declaration dumps in AST dumps.
+  unsigned ASTDumpDecls : 1;
+
+  /// Whether we deserialize all decls when forming AST dumps.
+  unsigned ASTDumpAll : 1;
+
+  /// Whether we include lookup table dumps in AST dumps.
+  unsigned ASTDumpLookups : 1;
+
+  /// Whether we include declaration type dumps in AST dumps.
+  unsigned ASTDumpDeclTypes : 1;
+
+  /// Whether we are performing an implicit module build.
+  unsigned BuildingImplicitModule : 1;
+
+  /// Whether we should embed all used files into the PCM file.
+  unsigned ModulesEmbedAllFiles : 1;
+
+  /// Whether timestamps should be written to the produced PCH file.
+  unsigned IncludeTimestamps : 1;
+
+  /// Should a temporary file be used during compilation.
+  unsigned UseTemporary : 1;
+
+  /// When using -emit-module, treat the modulemap as a system module.
+  unsigned IsSystemModule : 1;
 
   CodeCompleteOptions CodeCompleteOpts;
 
-  enum { ARCMT_None, ARCMT_Check, ARCMT_Modify, ARCMT_Migrate };
+  /// Specifies the output format of the AST.
+  ASTDumpOutputFormat ASTDumpFormat = ADOF_Default;
+
+  enum {
+    ARCMT_None,
+    ARCMT_Check,
+    ARCMT_Modify,
+    ARCMT_Migrate
+  } ARCMTAction = ARCMT_None;
 
   enum {
     ObjCMT_None = 0,
@@ -280,18 +360,92 @@ class FrontendOptions {
     /// Enable converting setter/getter expressions to property-dot syntx.
     ObjCMT_PropertyDotSyntax = 0x1000,
 
-    ObjCMT_MigrateDecls =
-        (ObjCMT_ReadonlyProperty | ObjCMT_ReadwriteProperty |
-         ObjCMT_Annotation | ObjCMT_Instancetype | ObjCMT_NsMacros |
-         ObjCMT_ProtocolConformance | ObjCMT_NsAtomicIOSOnlyProperty |
-         ObjCMT_DesignatedInitializer),
+    ObjCMT_MigrateDecls = (ObjCMT_ReadonlyProperty | ObjCMT_ReadwriteProperty |
+                           ObjCMT_Annotation | ObjCMT_Instancetype |
+                           ObjCMT_NsMacros | ObjCMT_ProtocolConformance |
+                           ObjCMT_NsAtomicIOSOnlyProperty |
+                           ObjCMT_DesignatedInitializer),
     ObjCMT_MigrateAll = (ObjCMT_Literals | ObjCMT_Subscripting |
                          ObjCMT_MigrateDecls | ObjCMT_PropertyDotSyntax)
   };
+  unsigned ObjCMTAction = ObjCMT_None;
+  std::string ObjCMTWhiteListPath;
+
+  std::string MTMigrateDir;
+  std::string ARCMTMigrateReportOut;
+
+  /// The input files and their types.
+  SmallVector<FrontendInputFile, 0> Inputs;
+
+  /// When the input is a module map, the original module map file from which
+  /// that map was inferred, if any (for umbrella modules).
+  std::string OriginalModuleMap;
+
+  /// The output file, if any.
+  std::string OutputFile;
+
+  /// If given, the new suffix for fix-it rewritten files.
+  std::string FixItSuffix;
+
+  /// If given, filter dumped AST Decl nodes by this substring.
+  std::string ASTDumpFilter;
+
+  /// If given, enable code completion at the provided location.
+  ParsedSourceLocation CodeCompletionAt;
+
+  /// The frontend action to perform.
+  frontend::ActionKind ProgramAction = frontend::ParseSyntaxOnly;
+
+  /// The name of the action to run when using a plugin action.
+  std::string ActionName;
+
+  /// Args to pass to the plugins
+  std::unordered_map<std::string,std::vector<std::string>> PluginArgs;
+
+  /// The list of plugin actions to run in addition to the normal action.
+  std::vector<std::string> AddPluginActions;
+
+  /// The list of plugins to load.
+  std::vector<std::string> Plugins;
+
+  /// The list of module file extensions.
+  std::vector<std::shared_ptr<ModuleFileExtension>> ModuleFileExtensions;
+
+  /// The list of module map files to load before processing the input.
+  std::vector<std::string> ModuleMapFiles;
+
+  /// The list of additional prebuilt module files to load before
+  /// processing the input.
+  std::vector<std::string> ModuleFiles;
+
+  /// The list of files to embed into the compiled module file.
+  std::vector<std::string> ModulesEmbedFiles;
+
+  /// The list of AST files to merge.
+  std::vector<std::string> ASTMergeFiles;
+
+  /// A list of arguments to forward to LLVM's option processing; this
+  /// should only be used for debugging and experimental features.
+  std::vector<std::string> LLVMArgs;
+
+  /// File name of the file that will provide record layouts
+  /// (in the format produced by -fdump-record-layouts).
+  std::string OverrideRecordLayoutsFile;
+
+  /// Auxiliary triple for CUDA/HIP compilation.
+  std::string AuxTriple;
+
+  /// Auxiliary target CPU for CUDA/HIP compilation.
+  Optional<std::string> AuxTargetCPU;
+
+  /// Auxiliary target features for CUDA/HIP compilation.
+  Optional<std::vector<std::string>> AuxTargetFeatures;
+
+  /// Filename to write statistics to.
+  std::string StatsFile;
 
-#define FRONTENDOPT(Name, Bits, Description) unsigned Name : Bits;
-#define TYPED_FRONTENDOPT(Type, Name, Description) Type Name;
-#include "clang/Frontend/FrontendOptions.def"
+  /// Minimum time granularity (in microseconds) traced by time profiler.
+  unsigned TimeTraceGranularity;
 
 public:
   FrontendOptions()
@@ -299,14 +453,11 @@ class FrontendOptions {
         ShowStats(false), ShowTimers(false), TimeTrace(false),
         ShowVersion(false), FixWhatYouCan(false), FixOnlyWarnings(false),
         FixAndRecompile(false), FixToTemporaries(false),
-        ARCMTAction(ARCMT_None), ARCMTMigrateEmitARCErrors(false),
-        SkipFunctionBodies(false), UseGlobalModuleIndex(true),
-        GenerateGlobalModuleIndex(true), ASTDumpDecls(false),
-        ASTDumpLookups(false), BuildingImplicitModule(false),
-        ModulesEmbedAllFiles(false), IncludeTimestamps(true),
-        UseTemporary(true), ASTDumpFormat(ADOF_Default),
-        ObjCMTAction(ObjCMT_None), ProgramAction(frontend::ParseSyntaxOnly),
-        TimeTraceGranularity(500), DashX() {}
+        ARCMTMigrateEmitARCErrors(false), SkipFunctionBodies(false),
+        UseGlobalModuleIndex(true), GenerateGlobalModuleIndex(true),
+        ASTDumpDecls(false), ASTDumpLookups(false),
+        BuildingImplicitModule(false), ModulesEmbedAllFiles(false),
+        IncludeTimestamps(true), UseTemporary(true), TimeTraceGranularity(500) {}
 
   /// getInputKindForExtension - Return the appropriate input kind for a file
   /// extension. For example, "c" would return Language::C.

diff  --git a/clang/include/clang/Frontend/MigratorOptions.def b/clang/include/clang/Frontend/MigratorOptions.def
deleted file mode 100644
index fbbcc6b686fd..000000000000
--- a/clang/include/clang/Frontend/MigratorOptions.def
+++ /dev/null
@@ -1,27 +0,0 @@
-//===--- MigratorOptions.def - Migrator option database ---------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-// This file defines the migrator options. Users of this file must
-// define the TYPED_MIGRATOROPT macro to make use of this information.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef TYPED_MIGRATOROPT
-#define TYPED_MIGRATOROPT(Type, Name, Description)
-#endif
-
-#ifndef MIGRATOROPT
-#define MIGRATOROPT(Name, Bits, Description)                                   \
-  TYPED_MIGRATOROPT(unsigned, Name, Description)
-#endif
-
-MIGRATOROPT(NoNSAllocReallocError, 1, "")
-MIGRATOROPT(NoFinalizeRemoval, 1, "")
-
-#undef TYPED_MIGRATOROPT
-#undef MIGRATOROPT

diff  --git a/clang/include/clang/Frontend/MigratorOptions.h b/clang/include/clang/Frontend/MigratorOptions.h
index f5ee9bba9dec..cf50ffcf0c4f 100644
--- a/clang/include/clang/Frontend/MigratorOptions.h
+++ b/clang/include/clang/Frontend/MigratorOptions.h
@@ -18,10 +18,13 @@ namespace clang {
 
 class MigratorOptions {
 public:
-#define MIGRATOROPT(Name, Bits, Description) unsigned Name : Bits;
-#include "clang/Frontend/MigratorOptions.def"
-
-  MigratorOptions() : NoNSAllocReallocError(0), NoFinalizeRemoval(0) {}
+  unsigned NoNSAllocReallocError : 1;
+  unsigned NoFinalizeRemoval : 1;
+  MigratorOptions() {
+    NoNSAllocReallocError = 0;
+    NoFinalizeRemoval = 0;
+  }
 };
+
 }
 #endif

diff  --git a/clang/include/clang/Frontend/PreprocessorOutputOptions.def b/clang/include/clang/Frontend/PreprocessorOutputOptions.def
deleted file mode 100644
index aad2f5eb7294..000000000000
--- a/clang/include/clang/Frontend/PreprocessorOutputOptions.def
+++ /dev/null
@@ -1,46 +0,0 @@
-//=== PreprocessorOutputOptions.def - FileSystem option database -*- C++-*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-// This file defines the PreprocessorOutput options.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef TYPED_PREPROCESSOR_OUTPUTOPT
-#define TYPED_PREPROCESSOR_OUTPUTOPT(Type, Name, Description)
-#endif
-
-#ifndef PREPROCESSOR_OUTPUTOPT
-#define PREPROCESSOR_OUTPUTOPT(Name, Bits, Description)                        \
-  TYPED_PREPROCESSOR_OUTPUTOPT(unsigned, Name, Description)
-#endif
-
-PREPROCESSOR_OUTPUTOPT(ShowCPP, 1, "Print normal preprocessed output.")
-
-PREPROCESSOR_OUTPUTOPT(ShowComments, 1, "Show comments.")
-
-PREPROCESSOR_OUTPUTOPT(ShowLineMarkers, 1, "Show \#line markers.")
-
-PREPROCESSOR_OUTPUTOPT(UseLineDirectives, 1,
-                       "Use \#line instead of GCC-style \# N.")
-
-PREPROCESSOR_OUTPUTOPT(ShowMacroComments, 1, "Show comments, even in macros.")
-
-PREPROCESSOR_OUTPUTOPT(ShowMacros, 1, "Print macro definitions.")
-
-PREPROCESSOR_OUTPUTOPT(
-    ShowIncludeDirectives, 1,
-    "Print includes, imports etc. within preprocessed output.")
-
-PREPROCESSOR_OUTPUTOPT(RewriteIncludes, 1,
-                       "Preprocess include directives only.")
-
-PREPROCESSOR_OUTPUTOPT(RewriteImports, 1,
-                       "Include contents of transitively-imported modules.")
-
-#undef TYPED_PREPROCESSOR_OUTPUTOPT
-#undef PREPROCESSOR_OUTPUTOPT
\ No newline at end of file

diff  --git a/clang/include/clang/Frontend/PreprocessorOutputOptions.h b/clang/include/clang/Frontend/PreprocessorOutputOptions.h
index ab4f25e394a2..72e5ad1137fb 100644
--- a/clang/include/clang/Frontend/PreprocessorOutputOptions.h
+++ b/clang/include/clang/Frontend/PreprocessorOutputOptions.h
@@ -15,9 +15,15 @@ namespace clang {
 /// output (e.g., -E).
 class PreprocessorOutputOptions {
 public:
-#define PREPROCESSOR_OUTPUTOPT(Name, Bits, Description) unsigned Name : Bits;
-#define TYPED_PREPROCESSOR_OUTPUTOPT(Type, Name, Description) Type Name;
-#include "clang/Frontend/PreprocessorOutputOptions.def"
+  unsigned ShowCPP : 1;            ///< Print normal preprocessed output.
+  unsigned ShowComments : 1;       ///< Show comments.
+  unsigned ShowLineMarkers : 1;    ///< Show \#line markers.
+  unsigned UseLineDirectives : 1;   ///< Use \#line instead of GCC-style \# N.
+  unsigned ShowMacroComments : 1;  ///< Show comments, even in macros.
+  unsigned ShowMacros : 1;         ///< Print macro definitions.
+  unsigned ShowIncludeDirectives : 1;  ///< Print includes, imports etc. within preprocessed output.
+  unsigned RewriteIncludes : 1;    ///< Preprocess include directives only.
+  unsigned RewriteImports  : 1;    ///< Include contents of transitively-imported modules.
 
 public:
   PreprocessorOutputOptions() {

diff  --git a/clang/include/clang/Lex/HeaderSearchOptions.def b/clang/include/clang/Lex/HeaderSearchOptions.def
deleted file mode 100644
index 79fd196c8f90..000000000000
--- a/clang/include/clang/Lex/HeaderSearchOptions.def
+++ /dev/null
@@ -1,136 +0,0 @@
-//===--- HeaderSearchOptions.def - HeaderSearch option database -*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-// This file defines the header search options. Users of this file must
-// define the HEADERSEARCHOPT macro to make use of this information.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef HEADERSEARCHOPT
-#define HEADERSEARCHOPT(Name, Bits, Description)                               \
-  TYPED_HEADERSEARCHOPT(unsigned, Name, Description)
-#endif
-
-#ifndef TYPED_HEADERSEARCHOPT
-#define TYPED_HEADERSEARCHOPT(Type, Name, Description)
-#endif
-
-TYPED_HEADERSEARCHOPT(std::string, Sysroot,
-                      "If non-empty, the directory to use as a \"virtual "
-                      "system root\" for include paths.")
-
-TYPED_HEADERSEARCHOPT(std::string, ModuleFormat,
-                      "The module/pch container format.")
-
-HEADERSEARCHOPT(DisableModuleHash, 1,
-                "Whether we should disable the use of the hash string within "
-                "the module cache. Note: Only used for testing!")
-
-HEADERSEARCHOPT(ImplicitModuleMaps, 1,
-                "Implicit module maps.  This option is enabld by default when "
-                "modules is enabled.")
-
-HEADERSEARCHOPT(
-    ModuleMapFileHomeIsCwd, 1,
-    "Set the 'home directory' of a module map file to the current working "
-    "directory (or the home directory of the module map file that contained "
-    "the 'extern module' directive importing this module map file if any) "
-    "rather than the directory containing the module map file. The home "
-    "directory is where we look for files named in the module map file.")
-
-HEADERSEARCHOPT(UseBuiltinIncludes, 1, "Include the compiler builtin includes.")
-
-HEADERSEARCHOPT(UseStandardSystemIncludes, 1,
-                "Include the system standard include search directories.")
-
-HEADERSEARCHOPT(
-    UseStandardCXXIncludes, 1,
-    "Include the system standard C++ library include search directories.")
-
-HEADERSEARCHOPT(UseLibcxx, 1, "Use libc++ instead of the default libstdc++.")
-
-HEADERSEARCHOPT(Verbose, 1,
-                "Whether header search information should be output as for -v.")
-
-HEADERSEARCHOPT(
-    ModulesValidateOncePerBuildSession, 1,
-    "If true, skip verifying input files used by modules if the module was "
-    "already verified during this build session (see BuildSessionTimestamp).")
-
-HEADERSEARCHOPT(
-    ModulesValidateSystemHeaders, 1,
-    "Whether to validate system input files when a module is loaded.")
-
-HEADERSEARCHOPT(ValidateASTInputFilesContent, 1,
-                "Whether the content of input files should be hashed and used "
-                "to validate consistency.")
-
-HEADERSEARCHOPT(UseDebugInfo, 1,
-                "Whether the module includes debug information (-gmodules).")
-
-HEADERSEARCHOPT(ModulesValidateDiagnosticOptions, 1, "")
-
-HEADERSEARCHOPT(ModulesHashContent, 1, "")
-
-HEADERSEARCHOPT(ModulesStrictContextHash, 1,
-                "Whether we should include all things that could impact the "
-                "module in the hash. This includes things like the full header "
-                "search path, and enabled diagnostics.")
-
-TYPED_HEADERSEARCHOPT(std::vector<Entry>, UserEntries,
-                      "User specified include entries.")
-
-TYPED_HEADERSEARCHOPT(std::vector<SystemHeaderPrefix>, SystemHeaderPrefixes,
-                      "User-specified system header prefixes.")
-
-TYPED_HEADERSEARCHOPT(std::string, ResourceDir,
-                      "The directory which holds the compiler resource files "
-                      "(builtin includes, etc.).")
-
-TYPED_HEADERSEARCHOPT(std::string, ModuleCachePath,
-                      "The directory used for the module cache.")
-
-TYPED_HEADERSEARCHOPT(std::string, ModuleUserBuildPath,
-                      "The directory used for a user build.")
-
-TYPED_HEADERSEARCHOPT(PrebuiltModuleFilesTy, PrebuiltModuleFiles,
-                      "The mapping of module names to prebuilt module files.")
-
-TYPED_HEADERSEARCHOPT(std::vector<std::string>, PrebuiltModulePaths,
-                      "The directories used to load prebuilt module files.")
-
-TYPED_HEADERSEARCHOPT(
-    unsigned, ModuleCachePruneInterval,
-    "The interval (in seconds) between pruning operations. This operation is "
-    "expensive, because it requires Clang to walk through the directory "
-    "structure of the module cache, stat()'ing and removing files. The "
-    "default value is large, e.g., the operation runs once a week.")
-
-TYPED_HEADERSEARCHOPT(
-    unsigned, ModuleCachePruneAfter,
-    "The time (in seconds) after which an unused module file will be "
-    "considered unused and will, therefore, be pruned. When the module cache "
-    "is pruned, any module file that has not been accessed in this many "
-    "seconds will be removed. The default value is large, e.g., a month, to "
-    "avoid forcing infrequently-used modules to be regenerated often.")
-
-TYPED_HEADERSEARCHOPT(
-    uint64_t, BuildSessionTimestamp,
-    "The time in seconds when the build session started. This time is used "
-    "by other optimizations in header search and module loading.")
-
-TYPED_HEADERSEARCHOPT(ModulesIgnoreMacrosTy, ModulesIgnoreMacros,
-                      "The set of macro names that should be ignored for the "
-                      "purposes of computing the module hash.")
-
-TYPED_HEADERSEARCHOPT(
-    std::vector<std::string>, VFSOverlayFiles,
-    "The set of user-provided virtual filesystem overlay files.")
-
-#undef HEADERSEARCHOPT
-#undef TYPED_HEADERSEARCHOPT

diff  --git a/clang/include/clang/Lex/HeaderSearchOptions.h b/clang/include/clang/Lex/HeaderSearchOptions.h
index 41a7ca915d79..3af49e175395 100644
--- a/clang/include/clang/Lex/HeaderSearchOptions.h
+++ b/clang/include/clang/Lex/HeaderSearchOptions.h
@@ -94,14 +94,125 @@ class HeaderSearchOptions {
         : Prefix(Prefix), IsSystemHeader(IsSystemHeader) {}
   };
 
-  using PrebuiltModuleFilesTy = std::map<std::string, std::string, std::less<>>;
+  /// If non-empty, the directory to use as a "virtual system root" for include
+  /// paths.
+  std::string Sysroot;
+
+  /// User specified include entries.
+  std::vector<Entry> UserEntries;
+
+  /// User-specified system header prefixes.
+  std::vector<SystemHeaderPrefix> SystemHeaderPrefixes;
+
+  /// The directory which holds the compiler resource files (builtin includes,
+  /// etc.).
+  std::string ResourceDir;
 
-  using ModulesIgnoreMacrosTy =
-      llvm::SmallSetVector<llvm::CachedHashString, 16>;
+  /// The directory used for the module cache.
+  std::string ModuleCachePath;
+
+  /// The directory used for a user build.
+  std::string ModuleUserBuildPath;
+
+  /// The mapping of module names to prebuilt module files.
+  std::map<std::string, std::string, std::less<>> PrebuiltModuleFiles;
+
+  /// The directories used to load prebuilt module files.
+  std::vector<std::string> PrebuiltModulePaths;
+
+  /// The module/pch container format.
+  std::string ModuleFormat;
+
+  /// Whether we should disable the use of the hash string within the
+  /// module cache.
+  ///
+  /// Note: Only used for testing!
+  unsigned DisableModuleHash : 1;
+
+  /// Implicit module maps.  This option is enabld by default when
+  /// modules is enabled.
+  unsigned ImplicitModuleMaps : 1;
+
+  /// Set the 'home directory' of a module map file to the current
+  /// working directory (or the home directory of the module map file that
+  /// contained the 'extern module' directive importing this module map file
+  /// if any) rather than the directory containing the module map file.
+  //
+  /// The home directory is where we look for files named in the module map
+  /// file.
+  unsigned ModuleMapFileHomeIsCwd : 1;
+
+  /// The interval (in seconds) between pruning operations.
+  ///
+  /// This operation is expensive, because it requires Clang to walk through
+  /// the directory structure of the module cache, stat()'ing and removing
+  /// files.
+  ///
+  /// The default value is large, e.g., the operation runs once a week.
+  unsigned ModuleCachePruneInterval = 7 * 24 * 60 * 60;
+
+  /// The time (in seconds) after which an unused module file will be
+  /// considered unused and will, therefore, be pruned.
+  ///
+  /// When the module cache is pruned, any module file that has not been
+  /// accessed in this many seconds will be removed. The default value is
+  /// large, e.g., a month, to avoid forcing infrequently-used modules to be
+  /// regenerated often.
+  unsigned ModuleCachePruneAfter = 31 * 24 * 60 * 60;
+
+  /// The time in seconds when the build session started.
+  ///
+  /// This time is used by other optimizations in header search and module
+  /// loading.
+  uint64_t BuildSessionTimestamp = 0;
+
+  /// The set of macro names that should be ignored for the purposes
+  /// of computing the module hash.
+  llvm::SmallSetVector<llvm::CachedHashString, 16> ModulesIgnoreMacros;
+
+  /// The set of user-provided virtual filesystem overlay files.
+  std::vector<std::string> VFSOverlayFiles;
+
+  /// Include the compiler builtin includes.
+  unsigned UseBuiltinIncludes : 1;
+
+  /// Include the system standard include search directories.
+  unsigned UseStandardSystemIncludes : 1;
+
+  /// Include the system standard C++ library include search directories.
+  unsigned UseStandardCXXIncludes : 1;
+
+  /// Use libc++ instead of the default libstdc++.
+  unsigned UseLibcxx : 1;
+
+  /// Whether header search information should be output as for -v.
+  unsigned Verbose : 1;
+
+  /// If true, skip verifying input files used by modules if the
+  /// module was already verified during this build session (see
+  /// \c BuildSessionTimestamp).
+  unsigned ModulesValidateOncePerBuildSession : 1;
+
+  /// Whether to validate system input files when a module is loaded.
+  unsigned ModulesValidateSystemHeaders : 1;
 
-#define HEADERSEARCHOPT(Name, Bits, Description) unsigned Name : Bits;
-#define TYPED_HEADERSEARCHOPT(Type, Name, Description) Type Name;
-#include "clang/Lex/HeaderSearchOptions.def"
+  // Whether the content of input files should be hashed and used to
+  // validate consistency.
+  unsigned ValidateASTInputFilesContent : 1;
+
+  /// Whether the module includes debug information (-gmodules).
+  unsigned UseDebugInfo : 1;
+
+  unsigned ModulesValidateDiagnosticOptions : 1;
+
+  unsigned ModulesHashContent : 1;
+
+  /// Whether we should include all things that could impact the module in the
+  /// hash.
+  ///
+  /// This includes things like the full header search path, and enabled
+  /// diagnostics.
+  unsigned ModulesStrictContextHash : 1;
 
   HeaderSearchOptions(StringRef _Sysroot = "/")
       : Sysroot(_Sysroot), ModuleFormat("raw"), DisableModuleHash(false),
@@ -112,9 +223,7 @@ class HeaderSearchOptions {
         ModulesValidateSystemHeaders(false),
         ValidateASTInputFilesContent(false), UseDebugInfo(false),
         ModulesValidateDiagnosticOptions(true), ModulesHashContent(false),
-        ModulesStrictContextHash(false),
-        ModuleCachePruneInterval(7 * 24 * 60 * 60),
-        ModuleCachePruneAfter(31 * 24 * 60 * 60), BuildSessionTimestamp(0) {}
+        ModulesStrictContextHash(false) {}
 
   /// AddPath - Add the \p Path path to the specified \p Group list.
   void AddPath(StringRef Path, frontend::IncludeDirGroup Group,

diff  --git a/clang/include/clang/Lex/PreprocessorOptions.def b/clang/include/clang/Lex/PreprocessorOptions.def
deleted file mode 100644
index 5b9e982351a0..000000000000
--- a/clang/include/clang/Lex/PreprocessorOptions.def
+++ /dev/null
@@ -1,166 +0,0 @@
-//===--- PreprocessorOptions.def - Preprocessor option database -*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-// This file defines the preprocessor options. Users of this file must
-// define the TYPED_PREPROCESSOROPT macro to make use of this information.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef TYPED_PREPROCESSOROPT
-#error Define the TYPED_PREPROCESSOROPT macro to handle target options
-#endif
-
-TYPED_PREPROCESSOROPT(MacrosTy, Macros, "")
-
-TYPED_PREPROCESSOROPT(std::vector<std::string>, Includes, "")
-
-TYPED_PREPROCESSOROPT(std::vector<std::string>, MacroIncludes, "")
-
-TYPED_PREPROCESSOROPT(
-    bool, UsePredefines,
-    "Initialize the preprocessor with the compiler and target "
-    "specific predefines.")
-
-TYPED_PREPROCESSOROPT(
-    bool, DetailedRecord,
-    "Whether we should maintain a detailed record of all macro "
-    "definitions and expansions.")
-
-TYPED_PREPROCESSOROPT(
-    bool, PCHWithHdrStop,
-    "When true, we are creating or using a PCH where a #pragma hdrstop is "
-    "expected to indicate the beginning or end of the PCH.")
-
-TYPED_PREPROCESSOROPT(
-    bool, PCHWithHdrStopCreate,
-    "When true, we are creating a PCH or creating the PCH object "
-    "while expecting a #pragma hdrstop to separate the two.  Allow "
-    "for a missing #pragma hdrstop, which generates a PCH for the "
-    "whole file, and creates an empty PCH object.")
-
-TYPED_PREPROCESSOROPT(
-    std::string, PCHThroughHeader,
-    "If non-empty, the filename used in an #include directive in the primary "
-    "source file (or command-line preinclude) that is used to implement "
-    "MSVC-style precompiled headers. When creating a PCH, after the #include "
-    "of this header, the PCH generation stops. When using a PCH, tokens are "
-    "skipped until after an #include of this header is seen.")
-
-TYPED_PREPROCESSOROPT(
-    std::string, ImplicitPCHInclude,
-    "The implicit PCH included at the start of the translation unit, or empty.")
-
-TYPED_PREPROCESSOROPT(
-    std::vector<std::string>, ChainedIncludes,
-    "Headers that will be converted to chained PCHs in memory.")
-
-TYPED_PREPROCESSOROPT(
-    bool, DisablePCHValidation,
-    "When true, disables most of the normal validation performed "
-    "on precompiled headers.")
-
-TYPED_PREPROCESSOROPT(
-    bool, AllowPCHWithCompilerErrors,
-    "When true, a PCH with compiler errors will not be rejected.")
-
-TYPED_PREPROCESSOROPT(
-    bool, DumpDeserializedPCHDecls,
-    "Dump declarations that are deserialized from PCH, for testing.")
-
-TYPED_PREPROCESSOROPT(
-    std::set<std::string>, DeserializedPCHDeclsToErrorOn,
-    "This is a set of names for decls that we do not want to be deserialized, "
-    "and we emit an error if they are; for testing purposes.")
-
-TYPED_PREPROCESSOROPT(
-    PrecompiledPreambleBytesTy, PrecompiledPreambleBytes,
-    "If non-zero, the implicit PCH include is actually a precompiled preamble "
-    "that covers this number of bytes in the main source file. The boolean "
-    "indicates whether the preamble ends at the start of a new line.")
-
-TYPED_PREPROCESSOROPT(
-    bool, GeneratePreamble,
-    "True indicates that a preamble is being generated. When the "
-    "lexer is done, one of the things that need to be preserved is "
-    "the conditional #if stack, so the ASTWriter/ASTReader can "
-    "save/restore it when processing the rest of the file.")
-
-TYPED_PREPROCESSOROPT(
-    bool, WriteCommentListToPCH,
-    "Whether to write comment locations into the PCH when building "
-    "it. Reading the comments from the PCH can be a performance "
-    "hit even if the clients don't use them.")
-
-TYPED_PREPROCESSOROPT(
-    bool, SingleFileParseMode,
-    "When enabled, preprocessor is in a mode for parsing a single "
-    "file only. Disables #includes of other files and if there are "
-    "unresolved identifiers in preprocessor directive conditions "
-    "it causes all blocks to be parsed so that the client can get "
-    "the maximum amount of information from the parser.")
-
-TYPED_PREPROCESSOROPT(
-    bool, LexEditorPlaceholders,
-    "When enabled, the preprocessor will construct editor placeholder tokens.")
-
-TYPED_PREPROCESSOROPT(
-    bool, RemappedFilesKeepOriginalName,
-    "True if the SourceManager should report the original file name for "
-    "contents of files that were remapped to other files. Defaults to true.")
-
-TYPED_PREPROCESSOROPT(
-    RemappedFilesTy, RemappedFiles,
-    "The set of file remappings, which take existing files on the system (the "
-    "first part of each pair) and gives them the contents of other files on "
-    "the system (the second part of each pair).")
-
-TYPED_PREPROCESSOROPT(
-    RemappedFileBuffersTy, RemappedFileBuffers,
-    "The set of file-to-buffer remappings, which take existing files on the "
-    "system (the first part of each pair) and gives them the contents of the "
-    "specified memory buffer (the second part of each pair).")
-
-TYPED_PREPROCESSOROPT(
-    bool, RetainRemappedFileBuffers,
-    "Whether the compiler instance should retain (i.e., not free) "
-    "the buffers associated with remapped files. This flag "
-    "defaults to false; it can be set true only through direct "
-    "manipulation of the compiler invocation object, in cases "
-    "where the compiler invocation and its buffers will be reused.")
-
-TYPED_PREPROCESSOROPT(
-    bool, RetainExcludedConditionalBlocks,
-    "When enabled, excluded conditional blocks retain in the main file.")
-
-TYPED_PREPROCESSOROPT(
-    ObjCXXARCStandardLibraryKind, ObjCXXARCStandardLibrary,
-    "The Objective-C++ ARC standard library that we should support, by "
-    "providing appropriate definitions to retrofit the standard library with "
-    "support for lifetime-qualified pointers.")
-
-TYPED_PREPROCESSOROPT(std::shared_ptr<FailedModulesSet>, FailedModules, "")
-
-TYPED_PREPROCESSOROPT(MacroPrefixMapTy, MacroPrefixMap,
-                      "A prefix map for __FILE__ and __BASE_FILE__.")
-
-TYPED_PREPROCESSOROPT(
-    ExcludedPreprocessorDirectiveSkipMapping *,
-    ExcludedConditionalDirectiveSkipMappings,
-    "Contains the currently active skipped range mappings for "
-    "skipping excluded conditional directives. The pointer is "
-    "passed to the Preprocessor when it's constructed. The pointer "
-    "is unowned, the client is responsible for its lifetime.")
-
-TYPED_PREPROCESSOROPT(bool, SetUpStaticAnalyzer,
-                      "Set up preprocessor for RunAnalysis action.")
-
-TYPED_PREPROCESSOROPT(
-    bool, DisablePragmaDebugCrash,
-    "Prevents intended crashes when using #pragma clang __debug. For testing.")
-
-#undef TYPED_PREPROCESSOROPT

diff  --git a/clang/include/clang/Lex/PreprocessorOptions.h b/clang/include/clang/Lex/PreprocessorOptions.h
index f379d5053228..c551f87e0d7b 100644
--- a/clang/include/clang/Lex/PreprocessorOptions.h
+++ b/clang/include/clang/Lex/PreprocessorOptions.h
@@ -44,13 +44,114 @@ enum ObjCXXARCStandardLibraryKind {
 /// used in preprocessor initialization to InitializePreprocessor().
 class PreprocessorOptions {
 public:
-  using MacrosTy = std::vector<std::pair<std::string, bool>>;
-  using PrecompiledPreambleBytesTy = std::pair<unsigned, bool>;
-  using RemappedFilesTy = std::vector<std::pair<std::string, std::string>>;
-  using RemappedFileBuffersTy =
-      std::vector<std::pair<std::string, llvm::MemoryBuffer *>>;
-  using MacroPrefixMapTy =
-      std::map<std::string, std::string, std::greater<std::string>>;
+  std::vector<std::pair<std::string, bool/*isUndef*/>> Macros;
+  std::vector<std::string> Includes;
+  std::vector<std::string> MacroIncludes;
+
+  /// Initialize the preprocessor with the compiler and target specific
+  /// predefines.
+  bool UsePredefines = true;
+
+  /// Whether we should maintain a detailed record of all macro
+  /// definitions and expansions.
+  bool DetailedRecord = false;
+
+  /// When true, we are creating or using a PCH where a #pragma hdrstop is
+  /// expected to indicate the beginning or end of the PCH.
+  bool PCHWithHdrStop = false;
+
+  /// When true, we are creating a PCH or creating the PCH object while
+  /// expecting a #pragma hdrstop to separate the two.  Allow for a
+  /// missing #pragma hdrstop, which generates a PCH for the whole file,
+  /// and creates an empty PCH object.
+  bool PCHWithHdrStopCreate = false;
+
+  /// If non-empty, the filename used in an #include directive in the primary
+  /// source file (or command-line preinclude) that is used to implement
+  /// MSVC-style precompiled headers. When creating a PCH, after the #include
+  /// of this header, the PCH generation stops. When using a PCH, tokens are
+  /// skipped until after an #include of this header is seen.
+  std::string PCHThroughHeader;
+
+  /// The implicit PCH included at the start of the translation unit, or empty.
+  std::string ImplicitPCHInclude;
+
+  /// Headers that will be converted to chained PCHs in memory.
+  std::vector<std::string> ChainedIncludes;
+
+  /// When true, disables most of the normal validation performed on
+  /// precompiled headers.
+  bool DisablePCHValidation = false;
+
+  /// When true, a PCH with compiler errors will not be rejected.
+  bool AllowPCHWithCompilerErrors = false;
+
+  /// Dump declarations that are deserialized from PCH, for testing.
+  bool DumpDeserializedPCHDecls = false;
+
+  /// This is a set of names for decls that we do not want to be
+  /// deserialized, and we emit an error if they are; for testing purposes.
+  std::set<std::string> DeserializedPCHDeclsToErrorOn;
+
+  /// If non-zero, the implicit PCH include is actually a precompiled
+  /// preamble that covers this number of bytes in the main source file.
+  ///
+  /// The boolean indicates whether the preamble ends at the start of a new
+  /// line.
+  std::pair<unsigned, bool> PrecompiledPreambleBytes;
+
+  /// True indicates that a preamble is being generated.
+  ///
+  /// When the lexer is done, one of the things that need to be preserved is the
+  /// conditional #if stack, so the ASTWriter/ASTReader can save/restore it when
+  /// processing the rest of the file.
+  bool GeneratePreamble = false;
+
+  /// Whether to write comment locations into the PCH when building it.
+  /// Reading the comments from the PCH can be a performance hit even if the
+  /// clients don't use them.
+  bool WriteCommentListToPCH = true;
+
+  /// When enabled, preprocessor is in a mode for parsing a single file only.
+  ///
+  /// Disables #includes of other files and if there are unresolved identifiers
+  /// in preprocessor directive conditions it causes all blocks to be parsed so
+  /// that the client can get the maximum amount of information from the parser.
+  bool SingleFileParseMode = false;
+
+  /// When enabled, the preprocessor will construct editor placeholder tokens.
+  bool LexEditorPlaceholders = true;
+
+  /// True if the SourceManager should report the original file name for
+  /// contents of files that were remapped to other files. Defaults to true.
+  bool RemappedFilesKeepOriginalName = true;
+
+  /// The set of file remappings, which take existing files on
+  /// the system (the first part of each pair) and gives them the
+  /// contents of other files on the system (the second part of each
+  /// pair).
+  std::vector<std::pair<std::string, std::string>> RemappedFiles;
+
+  /// The set of file-to-buffer remappings, which take existing files
+  /// on the system (the first part of each pair) and gives them the contents
+  /// of the specified memory buffer (the second part of each pair).
+  std::vector<std::pair<std::string, llvm::MemoryBuffer *>> RemappedFileBuffers;
+
+  /// Whether the compiler instance should retain (i.e., not free)
+  /// the buffers associated with remapped files.
+  ///
+  /// This flag defaults to false; it can be set true only through direct
+  /// manipulation of the compiler invocation object, in cases where the
+  /// compiler invocation and its buffers will be reused.
+  bool RetainRemappedFileBuffers = false;
+
+  /// When enabled, excluded conditional blocks retain in the main file.
+  bool RetainExcludedConditionalBlocks = false;
+
+  /// The Objective-C++ ARC standard library that we should support,
+  /// by providing appropriate definitions to retrofit the standard library
+  /// with support for lifetime-qualified pointers.
+  ObjCXXARCStandardLibraryKind ObjCXXARCStandardLibrary = ARCXX_nolib;
 
   /// Records the set of modules
   class FailedModulesSet {
@@ -66,21 +167,33 @@ class PreprocessorOptions {
     }
   };
 
-#define TYPED_PREPROCESSOROPT(Type, Name, Description) Type Name;
-#include "clang/Lex/PreprocessorOptions.def"
-
-  PreprocessorOptions()
-      : UsePredefines(true), DetailedRecord(false), PCHWithHdrStop(false),
-        PCHWithHdrStopCreate(false), DisablePCHValidation(false),
-        AllowPCHWithCompilerErrors(false), DumpDeserializedPCHDecls(false),
-        PrecompiledPreambleBytes(0, false), GeneratePreamble(false),
-        WriteCommentListToPCH(true), SingleFileParseMode(false),
-        LexEditorPlaceholders(true), RemappedFilesKeepOriginalName(true),
-        RetainRemappedFileBuffers(false),
-        RetainExcludedConditionalBlocks(false),
-        ObjCXXARCStandardLibrary(ARCXX_nolib),
-        ExcludedConditionalDirectiveSkipMappings(nullptr),
-        SetUpStaticAnalyzer(false), DisablePragmaDebugCrash(false) {}
+  /// The set of modules that failed to build.
+  ///
+  /// This pointer will be shared among all of the compiler instances created
+  /// to (re)build modules, so that once a module fails to build anywhere,
+  /// other instances will see that the module has failed and won't try to
+  /// build it again.
+  std::shared_ptr<FailedModulesSet> FailedModules;
+
+  /// A prefix map for __FILE__ and __BASE_FILE__.
+  std::map<std::string, std::string, std::greater<std::string>> MacroPrefixMap;
+
+  /// Contains the currently active skipped range mappings for skipping excluded
+  /// conditional directives.
+  ///
+  /// The pointer is passed to the Preprocessor when it's constructed. The
+  /// pointer is unowned, the client is responsible for its lifetime.
+  ExcludedPreprocessorDirectiveSkipMapping
+      *ExcludedConditionalDirectiveSkipMappings = nullptr;
+
+  /// Set up preprocessor for RunAnalysis action.
+  bool SetUpStaticAnalyzer = false;
+
+  /// Prevents intended crashes when using #pragma clang __debug. For testing.
+  bool DisablePragmaDebugCrash = false;
+
+public:
+  PreprocessorOptions() : PrecompiledPreambleBytes(0, false) {}
 
   void addMacroDef(StringRef Name) {
     Macros.emplace_back(std::string(Name), false);

diff  --git a/clang/include/clang/Sema/CodeCompleteOptions.def b/clang/include/clang/Sema/CodeCompleteOptions.def
deleted file mode 100644
index dab8027929e5..000000000000
--- a/clang/include/clang/Sema/CodeCompleteOptions.def
+++ /dev/null
@@ -1,51 +0,0 @@
-//===--- CodeCompleteOptions.def - FileSystem option database ----*- C++-*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-// This file defines the CodeComplete options.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef TYPED_CODE_COMPLETEOPT
-#define TYPED_CODE_COMPLETEOPT(Type, Name, Description)
-#endif
-
-#ifndef CODE_COMPLETEOPT
-#define CODE_COMPLETEOPT(Name, Bits, Description)                              \
-  TYPED_CODE_COMPLETEOPT(unsigned, Name, Description);
-#endif
-
-CODE_COMPLETEOPT(IncludeMacros, 1, "Show macros in code completion results.")
-
-CODE_COMPLETEOPT(IncludeCodePatterns, 1,
-                 "Show code patterns in code completion results.")
-
-CODE_COMPLETEOPT(IncludeGlobals, 1,
-                 "Show top-level decls in code completion results.")
-
-CODE_COMPLETEOPT(IncludeNamespaceLevelDecls, 1,
-                 "Show decls in namespace (including the global namespace) in "
-                 "code completion results. If this is 0, `IncludeGlobals` will "
-                 "be ignored. Currently, this only works when completing "
-                 "qualified IDs (i.e. `Sema::CodeCompleteQualifiedId`). FIXME: "
-                 "consider supporting more completion cases with this option.")
-
-CODE_COMPLETEOPT(
-    IncludeBriefComments, 1,
-    "Show brief documentation comments in code completion results.")
-
-CODE_COMPLETEOPT(LoadExternal, 1,
-                 "Hint whether to load data from the external AST to provide "
-                 "full results. If false, namespace-level declarations and "
-                 "macros from the preamble may be omitted.")
-
-CODE_COMPLETEOPT(IncludeFixIts, 1,
-                 "Include results after corrections (small fix-its), e.g. "
-                 "change '.' to '->' on member access, etc.")
-
-#undef TYPED_CODE_COMPLETEOPT
-#undef CODE_COMPLETEOPT
\ No newline at end of file

diff  --git a/clang/include/clang/Sema/CodeCompleteOptions.h b/clang/include/clang/Sema/CodeCompleteOptions.h
index 28cbc94fc84c..a3403b01dcde 100644
--- a/clang/include/clang/Sema/CodeCompleteOptions.h
+++ b/clang/include/clang/Sema/CodeCompleteOptions.h
@@ -14,14 +14,39 @@ namespace clang {
 /// Options controlling the behavior of code completion.
 class CodeCompleteOptions {
 public:
-#define CODE_COMPLETEOPT(Name, Bits, Description) unsigned Name : Bits;
-#define TYPED_CODE_COMPLETEOPT(Type, Name, Description) Type Name;
-#include "clang/Sema/CodeCompleteOptions.def"
+  /// Show macros in code completion results.
+  unsigned IncludeMacros : 1;
+
+  /// Show code patterns in code completion results.
+  unsigned IncludeCodePatterns : 1;
+
+  /// Show top-level decls in code completion results.
+  unsigned IncludeGlobals : 1;
+
+  /// Show decls in namespace (including the global namespace) in code
+  /// completion results. If this is 0, `IncludeGlobals` will be ignored.
+  ///
+  /// Currently, this only works when completing qualified IDs (i.e.
+  /// `Sema::CodeCompleteQualifiedId`).
+  /// FIXME: consider supporting more completion cases with this option.
+  unsigned IncludeNamespaceLevelDecls : 1;
+
+  /// Show brief documentation comments in code completion results.
+  unsigned IncludeBriefComments : 1;
+
+  /// Hint whether to load data from the external AST to provide full results.
+  /// If false, namespace-level declarations and macros from the preamble may be
+  /// omitted.
+  unsigned LoadExternal : 1;
+
+  /// Include results after corrections (small fix-its), e.g. change '.' to '->'
+  /// on member access, etc.
+  unsigned IncludeFixIts : 1;
 
   CodeCompleteOptions()
       : IncludeMacros(0), IncludeCodePatterns(0), IncludeGlobals(1),
-        IncludeNamespaceLevelDecls(1), IncludeBriefComments(0), LoadExternal(1),
-        IncludeFixIts(0) {}
+        IncludeNamespaceLevelDecls(1), IncludeBriefComments(0),
+        LoadExternal(1), IncludeFixIts(0) {}
 };
 
 } // namespace clang

diff  --git a/clang/include/clang/StaticAnalyzer/Core/AnalyzerOptions.def b/clang/include/clang/StaticAnalyzer/Core/AnalyzerOptions.def
index ff253ca15c0e..f0359d2dbb3c 100644
--- a/clang/include/clang/StaticAnalyzer/Core/AnalyzerOptions.def
+++ b/clang/include/clang/StaticAnalyzer/Core/AnalyzerOptions.def
@@ -6,10 +6,7 @@
 //
 //===----------------------------------------------------------------------===//
 //
-//  This file defines the analyzer options avaible with -analyzer-config, using
-//  the ANLAYZER_OPTION and ANALYZER_OPTION_DEPENDS_ON_USER_MODE macros.
-//  Other analyzer options use the simpler ANALYZEROPT and TYPED_ANALYZEROPT
-//  macro.
+//  This file defines the analyzer options avaible with -analyzer-config.
 //
 //===----------------------------------------------------------------------===//
 
@@ -32,15 +29,6 @@ define both 'ANALYZER_OPTION' and 'ANALYZER_OPTION_DEPENDS_ON_USER_MODE' macros!
 #endif
 #endif
 
-#ifndef TYPED_ANALYZEROPT
-#define TYPED_ANALYZEROPT(TYPE, NAME, DESCRIPTION)
-#endif
-
-#ifndef ANALYZEROPT
-#define ANALYZEROPT(NAME, BITS, DESCRIPTION)                                   \
-  TYPED_ANALYZEROPT(unsigned, NAME, DESCRITPTION)
-#endif
-
 #ifndef ANALYZER_OPTION
 /// Create a new analyzer option, but dont generate a method for it in
 /// AnalyzerOptions.
@@ -54,8 +42,7 @@ define both 'ANALYZER_OPTION' and 'ANALYZER_OPTION_DEPENDS_ON_USER_MODE' macros!
 ///             (-analyzer-config CMDFLAG=VALUE)
 ///   DESC - Description of the flag.
 ///   DEFAULT_VAL - The default value for CMDFLAG.
-#define ANALYZER_OPTION(TYPE, NAME, CMDFLAG, DESC, DEFAULT_VAL)                \
-  TYPED_ANALYZEROPT(TYPE, NAME, DESC)
+#define ANALYZER_OPTION(TYPE, NAME, CMDFLAG, DESC, DEFAULT_VAL)
 #endif
 
 #ifndef ANALYZER_OPTION_DEPENDS_ON_USER_MODE
@@ -75,8 +62,7 @@ define both 'ANALYZER_OPTION' and 'ANALYZER_OPTION_DEPENDS_ON_USER_MODE' macros!
 ///   DEEP_VAL - The default value for CMDFLAG, when "user-mode" was set to
 ///              "deep".
 #define ANALYZER_OPTION_DEPENDS_ON_USER_MODE(TYPE, NAME, CMDFLAG, DESC,        \
-                                             SHALLOW_VAL, DEEP_VAL)            \
-  TYPED_ANALYZEROPT(TYPE, NAME, DESC)
+                                             SHALLOW_VAL, DEEP_VAL)
 #endif
 
 //===----------------------------------------------------------------------===//
@@ -449,79 +435,5 @@ ANALYZER_OPTION_DEPENDS_ON_USER_MODE(
     "\"basic-inlining\", \"inlining\", \"dynamic\", \"dynamic-bifurcate\".",
     /* SHALLOW_VAL */ "inlining", /* DEEP_VAL */ "dynamic-bifurcate")
 
-//===----------------------------------------------------------------------===//
-// Other analyzer options.
-//===----------------------------------------------------------------------===//
-
-TYPED_ANALYZEROPT(CheckersAndPackagesTy, CheckersAndPackages,
-                  "Pairs of checker/package name and enable/disable.")
-
-TYPED_ANALYZEROPT(
-    std::vector<std::string>, SilencedCheckersAndPackages,
-    "Vector of checker/package names which will not emit warnings.")
-
-TYPED_ANALYZEROPT(ConfigTable, Config,
-                  "A key-value table of use-specified configuration values.")
-TYPED_ANALYZEROPT(AnalysisStores, AnalysisStoreOpt, "")
-TYPED_ANALYZEROPT(AnalysisConstraints, AnalysisConstraintsOpt, "")
-TYPED_ANALYZEROPT(AnalysisDiagClients, AnalysisDiagOpt, "")
-TYPED_ANALYZEROPT(AnalysisPurgeMode, AnalysisPurgeOpt, "")
-
-TYPED_ANALYZEROPT(std::string, AnalyzeSpecificFunction, "")
-
-TYPED_ANALYZEROPT(std::string, DumpExplodedGraphTo,
-                  "File path to which the exploded graph should be dumped.")
-
-TYPED_ANALYZEROPT(std::string, FullCompilerInvocation,
-                  "Store full compiler invocation for reproducible "
-                  "instructions in the generated report.")
-
-TYPED_ANALYZEROPT(unsigned, maxBlockVisitOnPath,
-                  "The maximum number of times the analyzer visits a block.")
-
-ANALYZEROPT(
-    DisableAllCheckers, 1,
-    "Disable all analyzer checkers. This flag allows one to disable analyzer "
-    "checkers on the code processed by the given analysis consumer. Note, the "
-    "code will get parsed and the command-line options will get checked.")
-
-ANALYZEROPT(ShowCheckerHelp, 1, "")
-ANALYZEROPT(ShowCheckerHelpAlpha, 1, "")
-ANALYZEROPT(ShowCheckerHelpDeveloper, 1, "")
-
-ANALYZEROPT(ShowCheckerOptionList, 1, "")
-ANALYZEROPT(ShowCheckerOptionAlphaList, 1, "")
-ANALYZEROPT(ShowCheckerOptionDeveloperList, 1, "")
-
-ANALYZEROPT(ShowEnabledCheckerList, 1, "")
-ANALYZEROPT(ShowConfigOptionsList, 1, "")
-ANALYZEROPT(ShouldEmitErrorsOnInvalidConfigValue, 1, "")
-ANALYZEROPT(AnalyzeAll, 1, "")
-ANALYZEROPT(AnalyzerDisplayProgress, 1, "")
-ANALYZEROPT(AnalyzeNestedBlocks, 1, "")
-
-ANALYZEROPT(eagerlyAssumeBinOpBifurcation, 1, "")
-
-ANALYZEROPT(TrimGraph, 1, "")
-ANALYZEROPT(visualizeExplodedGraphWithGraphViz, 1, "")
-ANALYZEROPT(UnoptimizedCFG, 1, "")
-ANALYZEROPT(PrintStats, 1, "")
-
-ANALYZEROPT(
-    NoRetryExhausted, 1,
-    "Do not re-analyze paths leading to exhausted nodes with a 
diff erent "
-    "strategy. We get better code coverage when retry is enabled.")
-
-ANALYZEROPT(AnalyzerWerror, 1, "Emit analyzer warnings as errors.")
-
-TYPED_ANALYZEROPT(unsigned, InlineMaxStackDepth,
-                  "The inlining stack depth limit. Cap the stack depth at 4 "
-                  "calls (5 stack frames, base + 4 calls).")
-
-TYPED_ANALYZEROPT(AnalysisInliningMode, InliningMode,
-                  "The mode of function selection used during inlining.")
-
 #undef ANALYZER_OPTION_DEPENDS_ON_USER_MODE
 #undef ANALYZER_OPTION
-#undef TYPED_ANALYZEROPT
-#undef ANALYZEROPT

diff  --git a/clang/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h b/clang/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h
index 8d81f9029417..4907b0757a8a 100644
--- a/clang/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h
+++ b/clang/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h
@@ -162,7 +162,6 @@ enum UserModeKind {
 class AnalyzerOptions : public RefCountedBase<AnalyzerOptions> {
 public:
   using ConfigTable = llvm::StringMap<std::string>;
-  using CheckersAndPackagesTy = std::vector<std::pair<std::string, bool>>;
 
   /// Retrieves the list of checkers generated from Checkers.td. This doesn't
   /// contain statically linked but non-generated checkers and plugin checkers!
@@ -196,9 +195,86 @@ class AnalyzerOptions : public RefCountedBase<AnalyzerOptions> {
                                   size_t InitialPad, size_t EntryWidth,
                                   size_t MinLineWidth = 0);
 
-#define ANALYZEROPT(NAME, BITS, DESCRIPTION) unsigned NAME : BITS;
-#define TYPED_ANALYZEROPT(TYPE, NAME, DESCRIPTION) TYPE NAME;
+  /// Pairs of checker/package name and enable/disable.
+  std::vector<std::pair<std::string, bool>> CheckersAndPackages;
+
+  /// Vector of checker/package names which will not emit warnings.
+  std::vector<std::string> SilencedCheckersAndPackages;
+
+  /// A key-value table of use-specified configuration values.
+  // TODO: This shouldn't be public.
+  ConfigTable Config;
+  AnalysisStores AnalysisStoreOpt = RegionStoreModel;
+  AnalysisConstraints AnalysisConstraintsOpt = RangeConstraintsModel;
+  AnalysisDiagClients AnalysisDiagOpt = PD_HTML;
+  AnalysisPurgeMode AnalysisPurgeOpt = PurgeStmt;
+
+  std::string AnalyzeSpecificFunction;
+
+  /// File path to which the exploded graph should be dumped.
+  std::string DumpExplodedGraphTo;
+
+  /// Store full compiler invocation for reproducible instructions in the
+  /// generated report.
+  std::string FullCompilerInvocation;
+
+  /// The maximum number of times the analyzer visits a block.
+  unsigned maxBlockVisitOnPath;
+
+  /// Disable all analyzer checkers.
+  ///
+  /// This flag allows one to disable analyzer checkers on the code processed by
+  /// the given analysis consumer. Note, the code will get parsed and the
+  /// command-line options will get checked.
+  unsigned DisableAllCheckers : 1;
+
+  unsigned ShowCheckerHelp : 1;
+  unsigned ShowCheckerHelpAlpha : 1;
+  unsigned ShowCheckerHelpDeveloper : 1;
+
+  unsigned ShowCheckerOptionList : 1;
+  unsigned ShowCheckerOptionAlphaList : 1;
+  unsigned ShowCheckerOptionDeveloperList : 1;
+
+  unsigned ShowEnabledCheckerList : 1;
+  unsigned ShowConfigOptionsList : 1;
+  unsigned ShouldEmitErrorsOnInvalidConfigValue : 1;
+  unsigned AnalyzeAll : 1;
+  unsigned AnalyzerDisplayProgress : 1;
+  unsigned AnalyzeNestedBlocks : 1;
+
+  unsigned eagerlyAssumeBinOpBifurcation : 1;
+
+  unsigned TrimGraph : 1;
+  unsigned visualizeExplodedGraphWithGraphViz : 1;
+  unsigned UnoptimizedCFG : 1;
+  unsigned PrintStats : 1;
+
+  /// Do not re-analyze paths leading to exhausted nodes with a 
diff erent
+  /// strategy. We get better code coverage when retry is enabled.
+  unsigned NoRetryExhausted : 1;
+
+  /// Emit analyzer warnings as errors.
+  unsigned AnalyzerWerror : 1;
+
+  /// The inlining stack depth limit.
+  // Cap the stack depth at 4 calls (5 stack frames, base + 4 calls).
+  unsigned InlineMaxStackDepth = 5;
+
+  /// The mode of function selection used during inlining.
+  AnalysisInliningMode InliningMode = NoRedundancy;
+
+  // Create a field for each -analyzer-config option.
+#define ANALYZER_OPTION_DEPENDS_ON_USER_MODE(TYPE, NAME, CMDFLAG, DESC,        \
+                                             SHALLOW_VAL, DEEP_VAL)            \
+  ANALYZER_OPTION(TYPE, NAME, CMDFLAG, DESC, SHALLOW_VAL)
+
+#define ANALYZER_OPTION(TYPE, NAME, CMDFLAG, DESC, DEFAULT_VAL)                \
+  TYPE NAME;
+
 #include "clang/StaticAnalyzer/Core/AnalyzerOptions.def"
+#undef ANALYZER_OPTION
+#undef ANALYZER_OPTION_DEPENDS_ON_USER_MODE
 
   // Create an array of all -analyzer-config command line options. Sort it in
   // the constructor.
@@ -223,19 +299,15 @@ class AnalyzerOptions : public RefCountedBase<AnalyzerOptions> {
   }
 
   AnalyzerOptions()
-      : AnalysisStoreOpt(RegionStoreModel),
-        AnalysisConstraintsOpt(RangeConstraintsModel), AnalysisDiagOpt(PD_HTML),
-        AnalysisPurgeOpt(PurgeStmt), DisableAllCheckers(false),
-        ShowCheckerHelp(false), ShowCheckerHelpAlpha(false),
-        ShowCheckerHelpDeveloper(false), ShowCheckerOptionList(false),
-        ShowCheckerOptionAlphaList(false),
+      : DisableAllCheckers(false), ShowCheckerHelp(false),
+        ShowCheckerHelpAlpha(false), ShowCheckerHelpDeveloper(false),
+        ShowCheckerOptionList(false), ShowCheckerOptionAlphaList(false),
         ShowCheckerOptionDeveloperList(false), ShowEnabledCheckerList(false),
         ShowConfigOptionsList(false), AnalyzeAll(false),
         AnalyzerDisplayProgress(false), AnalyzeNestedBlocks(false),
         eagerlyAssumeBinOpBifurcation(false), TrimGraph(false),
         visualizeExplodedGraphWithGraphViz(false), UnoptimizedCFG(false),
-        PrintStats(false), NoRetryExhausted(false), AnalyzerWerror(false),
-        InlineMaxStackDepth(5), InliningMode(NoRedundancy) {
+        PrintStats(false), NoRetryExhausted(false), AnalyzerWerror(false) {
     llvm::sort(AnalyzerConfigCmdFlags);
   }
 

diff  --git a/clang/lib/Basic/CodeGenOptions.cpp b/clang/lib/Basic/CodeGenOptions.cpp
index 9e04b5ced2bb..4fc7a535c9eb 100644
--- a/clang/lib/Basic/CodeGenOptions.cpp
+++ b/clang/lib/Basic/CodeGenOptions.cpp
@@ -10,9 +10,8 @@
 #include <string.h>
 
 namespace clang {
-CodeGenOptions::CodeGenOptions()
-    : FPDenormalMode(llvm::DenormalMode::getIEEE()),
-      FP32DenormalMode(llvm::DenormalMode::getIEEE()), Argv0(nullptr) {
+
+CodeGenOptions::CodeGenOptions() {
 #define CODEGENOPT(Name, Bits, Default) Name = Default;
 #define ENUM_CODEGENOPT(Name, Type, Bits, Default) set##Name(Default);
 #include "clang/Basic/CodeGenOptions.def"

diff  --git a/clang/lib/Basic/LangOptions.cpp b/clang/lib/Basic/LangOptions.cpp
index 344d326a92e4..c08670c87fb6 100644
--- a/clang/lib/Basic/LangOptions.cpp
+++ b/clang/lib/Basic/LangOptions.cpp
@@ -14,8 +14,7 @@
 
 using namespace clang;
 
-LangOptions::LangOptions()
-    : CFRuntime(CoreFoundationABI::Unspecified), IsHeaderFile(false) {
+LangOptions::LangOptions() {
 #define LANGOPT(Name, Bits, Default, Description) Name = Default;
 #define ENUM_LANGOPT(Name, Type, Bits, Default, Description) set##Name(Default);
 #include "clang/Basic/LangOptions.def"


        


More information about the cfe-commits mailing list