mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-28 05:56:05 +00:00
[clang][cli] Convert Analyzer option string based options to new option parsing system
Depends on D84185 Reviewed By: dexonsmith Original patch by Daniel Grumberg. Differential Revision: https://reviews.llvm.org/D84186
This commit is contained in:
parent
8c1f2d15b8
commit
caeb56503e
@ -4110,7 +4110,8 @@ def analyzer_display_progress : Flag<["-"], "analyzer-display-progress">,
|
||||
HelpText<"Emit verbose output about the analyzer's progress">,
|
||||
MarshallingInfoFlag<"AnalyzerOpts->AnalyzerDisplayProgress">;
|
||||
def analyze_function : Separate<["-"], "analyze-function">,
|
||||
HelpText<"Run analysis on specific function (for C++ include parameters in name)">;
|
||||
HelpText<"Run analysis on specific function (for C++ include parameters in name)">,
|
||||
MarshallingInfoString<"AnalyzerOpts->AnalyzeSpecificFunction">;
|
||||
def analyze_function_EQ : Joined<["-"], "analyze-function=">, Alias<analyze_function>;
|
||||
def trim_egraph : Flag<["-"], "trim-egraph">,
|
||||
HelpText<"Only show error-related paths in the analysis graph">,
|
||||
@ -4124,7 +4125,9 @@ def analyzer_dump_egraph : Separate<["-"], "analyzer-dump-egraph">,
|
||||
def analyzer_dump_egraph_EQ : Joined<["-"], "analyzer-dump-egraph=">, Alias<analyzer_dump_egraph>;
|
||||
|
||||
def analyzer_inline_max_stack_depth : Separate<["-"], "analyzer-inline-max-stack-depth">,
|
||||
HelpText<"Bound on stack depth while inlining (4 by default)">;
|
||||
HelpText<"Bound on stack depth while inlining (4 by default)">,
|
||||
// Cap the stack depth at 4 calls (5 stack frames, base + 4 calls).
|
||||
MarshallingInfoStringInt<"AnalyzerOpts->InlineMaxStackDepth", "5">;
|
||||
def analyzer_inline_max_stack_depth_EQ : Joined<["-"], "analyzer-inline-max-stack-depth=">,
|
||||
Alias<analyzer_inline_max_stack_depth>;
|
||||
|
||||
@ -4137,7 +4140,8 @@ def analyzer_disable_retry_exhausted : Flag<["-"], "analyzer-disable-retry-exhau
|
||||
MarshallingInfoFlag<"AnalyzerOpts->NoRetryExhausted">;
|
||||
|
||||
def analyzer_max_loop : Separate<["-"], "analyzer-max-loop">,
|
||||
HelpText<"The maximum number of times the analyzer will go through a loop">;
|
||||
HelpText<"The maximum number of times the analyzer will go through a loop">,
|
||||
MarshallingInfoStringInt<"AnalyzerOpts->maxBlockVisitOnPath", "4">;
|
||||
def analyzer_stats : Flag<["-"], "analyzer-stats">,
|
||||
HelpText<"Print internal analyzer statistics.">,
|
||||
MarshallingInfoFlag<"AnalyzerOpts->PrintStats">;
|
||||
|
@ -259,8 +259,7 @@ public:
|
||||
bool AnalyzerWerror : 1;
|
||||
|
||||
/// The inlining stack depth limit.
|
||||
// Cap the stack depth at 4 calls (5 stack frames, base + 4 calls).
|
||||
unsigned InlineMaxStackDepth = 5;
|
||||
unsigned InlineMaxStackDepth;
|
||||
|
||||
/// The mode of function selection used during inlining.
|
||||
AnalysisInliningMode InliningMode = NoRedundancy;
|
||||
|
@ -93,6 +93,7 @@
|
||||
#include <memory>
|
||||
#include <string>
|
||||
#include <tuple>
|
||||
#include <type_traits>
|
||||
#include <utility>
|
||||
#include <vector>
|
||||
|
||||
@ -282,12 +283,38 @@ static Optional<std::string> normalizeString(OptSpecifier Opt, int TableIndex,
|
||||
|
||||
static void denormalizeString(SmallVectorImpl<const char *> &Args,
|
||||
const char *Spelling,
|
||||
CompilerInvocation::StringAllocator SA,
|
||||
unsigned TableIndex, const std::string &Value) {
|
||||
CompilerInvocation::StringAllocator SA, unsigned,
|
||||
Twine Value) {
|
||||
Args.push_back(Spelling);
|
||||
Args.push_back(SA(Value));
|
||||
}
|
||||
|
||||
template <typename T,
|
||||
std::enable_if_t<!std::is_convertible<T, Twine>::value &&
|
||||
std::is_constructible<Twine, T>::value,
|
||||
bool> = false>
|
||||
static void denormalizeString(SmallVectorImpl<const char *> &Args,
|
||||
const char *Spelling,
|
||||
CompilerInvocation::StringAllocator SA,
|
||||
unsigned TableIndex, T Value) {
|
||||
denormalizeString(Args, Spelling, SA, TableIndex, Twine(Value));
|
||||
}
|
||||
|
||||
template <typename IntTy>
|
||||
static Optional<IntTy> normalizeStringIntegral(OptSpecifier Opt, int,
|
||||
const ArgList &Args,
|
||||
DiagnosticsEngine &Diags) {
|
||||
auto *Arg = Args.getLastArg(Opt);
|
||||
if (!Arg)
|
||||
return None;
|
||||
IntTy Res;
|
||||
if (StringRef(Arg->getValue()).getAsInteger(0, Res)) {
|
||||
Diags.Report(diag::err_drv_invalid_int_value)
|
||||
<< Arg->getAsString(Args) << Arg->getValue();
|
||||
}
|
||||
return Res;
|
||||
}
|
||||
|
||||
static Optional<std::string> normalizeTriple(OptSpecifier Opt, int TableIndex,
|
||||
const ArgList &Args,
|
||||
DiagnosticsEngine &Diags) {
|
||||
@ -522,14 +549,6 @@ static bool ParseAnalyzerArgs(AnalyzerOptions &Opts, ArgList &Args,
|
||||
.Case("false", false)
|
||||
.Default(false);
|
||||
|
||||
Opts.AnalyzeSpecificFunction =
|
||||
std::string(Args.getLastArgValue(OPT_analyze_function));
|
||||
Opts.maxBlockVisitOnPath =
|
||||
getLastArgIntValue(Args, OPT_analyzer_max_loop, 4, Diags);
|
||||
Opts.InlineMaxStackDepth =
|
||||
getLastArgIntValue(Args, OPT_analyzer_inline_max_stack_depth,
|
||||
Opts.InlineMaxStackDepth, Diags);
|
||||
|
||||
Opts.CheckersAndPackages.clear();
|
||||
for (const Arg *A :
|
||||
Args.filtered(OPT_analyzer_checker, OPT_analyzer_disable_checker)) {
|
||||
|
@ -161,6 +161,12 @@ class MarshallingInfoString<code keypath, code defaultvalue="std::string()">
|
||||
code Denormalizer = "denormalizeString";
|
||||
}
|
||||
|
||||
class MarshallingInfoStringInt<code keypath, code defaultvalue="0", code type="unsigned">
|
||||
: MarshallingInfo<keypath, defaultvalue> {
|
||||
code Normalizer = "normalizeStringIntegral<"#type#">";
|
||||
code Denormalizer = "denormalizeString";
|
||||
}
|
||||
|
||||
class MarshallingInfoFlag<code keypath, code defaultvalue = "false">
|
||||
: MarshallingInfo<keypath, defaultvalue> {
|
||||
code Normalizer = "normalizeSimpleFlag";
|
||||
|
Loading…
x
Reference in New Issue
Block a user