diff --git a/clang/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h b/clang/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h --- a/clang/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h +++ b/clang/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h @@ -360,11 +360,6 @@ StringRef OptionName, bool SearchInParents = false) const; - /// Retrieves and sets the UserMode. This is a high-level option, - /// which is used to set other low-level options. It is not accessible - /// outside of AnalyzerOptions. - UserModeKind getUserMode() const; - ExplorationStrategyKind getExplorationStrategy() const; CTUPhase1InliningKind getCTUPhase1Inlining() const; @@ -404,15 +399,6 @@ // For this reason, implement some methods in this header file. //===----------------------------------------------------------------------===// -inline UserModeKind AnalyzerOptions::getUserMode() const { - auto K = llvm::StringSwitch>(UserMode) - .Case("shallow", UMK_Shallow) - .Case("deep", UMK_Deep) - .Default(None); - assert(K.hasValue() && "User mode is invalid."); - return K.getValue(); -} - inline std::vector AnalyzerOptions::getRegisteredCheckers(bool IncludeExperimental) { static constexpr llvm::StringLiteral StaticAnalyzerCheckerNames[] = { diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp --- a/clang/lib/Frontend/CompilerInvocation.cpp +++ b/clang/lib/Frontend/CompilerInvocation.cpp @@ -1089,25 +1089,22 @@ static void parseAnalyzerConfigs(AnalyzerOptions &AnOpts, DiagnosticsEngine *Diags) { // TODO: There's no need to store the entire configtable, it'd be plenty - // enough tostore checker options. + // enough to store checker options. #define ANALYZER_OPTION(TYPE, NAME, CMDFLAG, DESC, DEFAULT_VAL) \ initOption(AnOpts.Config, Diags, AnOpts.NAME, CMDFLAG, DEFAULT_VAL); +#define ANALYZER_OPTION_DEPENDS_ON_USER_MODE(...) +#include "clang/StaticAnalyzer/Core/AnalyzerOptions.def" -#define ANALYZER_OPTION_DEPENDS_ON_USER_MODE(TYPE, NAME, CMDFLAG, DESC, \ - SHALLOW_VAL, DEEP_VAL) \ - switch (AnOpts.getUserMode()) { \ - case UMK_Shallow: \ - initOption(AnOpts.Config, Diags, AnOpts.NAME, CMDFLAG, SHALLOW_VAL); \ - break; \ - case UMK_Deep: \ - initOption(AnOpts.Config, Diags, AnOpts.NAME, CMDFLAG, DEEP_VAL); \ - break; \ - } \ + assert(AnOpts.UserMode == "shallow" || AnOpts.UserMode == "deep"); + const bool InShallowMode = AnOpts.UserMode == "shallow"; +#define ANALYZER_OPTION(...) +#define ANALYZER_OPTION_DEPENDS_ON_USER_MODE(TYPE, NAME, CMDFLAG, DESC, \ + SHALLOW_VAL, DEEP_VAL) \ + initOption(AnOpts.Config, Diags, AnOpts.NAME, CMDFLAG, \ + InShallowMode ? SHALLOW_VAL : DEEP_VAL); #include "clang/StaticAnalyzer/Core/AnalyzerOptions.def" -#undef ANALYZER_OPTION -#undef ANALYZER_OPTION_DEPENDS_ON_USER_MODE // At this point, AnalyzerOptions is configured. Let's validate some options.