xref: /llvm-project/clang/include/clang/StaticAnalyzer/Core/AnalyzerOptions.def (revision 55391f85acc7e7a14ea2ef3c1a4bd8f3df990426)
1//===-- AnalyzerOptions.def - Metadata about Static Analyses ----*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9//  This file defines the analyzer options avaible with -analyzer-config.
10//
11//===----------------------------------------------------------------------===//
12
13#ifndef LLVM_CLANG_STATICANALYZER_CORE_ANALYZEROPTIONS_H
14#error This .def file is expected to be included in translation units where \
15"clang/StaticAnalyzer/Core/AnalyzerOptions.h" is already included!
16#endif
17
18#ifdef ANALYZER_OPTION
19#ifndef ANALYZER_OPTION_DEPENDS_ON_USER_MODE
20#error If you didnt include this file with the intent of generating methods, \
21define both 'ANALYZER_OPTION' and 'ANALYZER_OPTION_DEPENDS_ON_USER_MODE' macros!
22#endif
23#endif
24
25#ifndef ANALYZER_OPTION_DEPENDS_ON_USER_MODE
26#ifdef ANALYZER_OPTION
27#error If you didnt include this file with the intent of generating methods, \
28define both 'ANALYZER_OPTION' and 'ANALYZER_OPTION_DEPENDS_ON_USER_MODE' macros!
29#endif
30#endif
31
32#ifndef ANALYZER_OPTION
33/// Create a new analyzer option, but dont generate a method for it in
34/// AnalyzerOptions.
35///
36///   TYPE - The type of the option object that will be stored in
37///          AnalyzerOptions. This file is expected to be icluded in translation
38///          units where AnalyzerOptions.h is included, so types from that
39///          header should be used.
40///   NAME - The name of the option object.
41///   CMDFLAG - The command line flag for the option.
42///             (-analyzer-config CMDFLAG=VALUE)
43///   DESC - Description of the flag.
44///   DEFAULT_VAL - The default value for CMDFLAG.
45#define ANALYZER_OPTION(TYPE, NAME, CMDFLAG, DESC, DEFAULT_VAL)
46#endif
47
48#ifndef ANALYZER_OPTION_DEPENDS_ON_USER_MODE
49/// Create a new analyzer option, but dont generate a method for it in
50/// AnalyzerOptions. It's value depends on the option "user-mode".
51///
52///   TYPE - The type of the option object that will be stored in
53///          AnalyzerOptions. This file is expected to be icluded in translation
54///          units where AnalyzerOptions.h is included, so types from that
55///          header should be used.
56///   NAME - The name of the option object.
57///   CMDFLAG - The command line flag for the option.
58///             (-analyzer-config CMDFLAG=VALUE)
59///   DESC - Description of the flag.
60///   SHALLOW_VAL - The default value for CMDFLAG, when "user-mode" was set to
61///                 "shallow".
62///   DEEP_VAL - The default value for CMDFLAG, when "user-mode" was set to
63///              "deep".
64#define ANALYZER_OPTION_DEPENDS_ON_USER_MODE(TYPE, NAME, CMDFLAG, DESC,        \
65                                             SHALLOW_VAL, DEEP_VAL)
66#endif
67
68//===----------------------------------------------------------------------===//
69// The "mode" option. Since some options depend on this, we list it on top of
70// this file in order to make sure that the generated field for it is
71// initialized before the rest.
72//===----------------------------------------------------------------------===//
73
74ANALYZER_OPTION(
75    StringRef, UserMode, "mode",
76    "(string) Controls the high-level analyzer mode, which influences the "
77    "default settings for some of the lower-level config options (such as "
78    "IPAMode). Value: \"deep\", \"shallow\".",
79    "deep")
80
81//===----------------------------------------------------------------------===//
82// Boolean analyzer options.
83//===----------------------------------------------------------------------===//
84
85ANALYZER_OPTION(bool, ShouldIncludeImplicitDtorsInCFG, "cfg-implicit-dtors",
86                "Whether or not implicit destructors for C++ objects "
87                "should be included in the CFG.",
88                true)
89
90ANALYZER_OPTION(bool, ShouldIncludeTemporaryDtorsInCFG, "cfg-temporary-dtors",
91                "Whether or not the destructors for C++ temporary "
92                "objects should be included in the CFG.",
93                true)
94
95ANALYZER_OPTION(
96    bool, ShouldIncludeLifetimeInCFG, "cfg-lifetime",
97    "Whether or not end-of-lifetime information should be included in the CFG.",
98    false)
99
100ANALYZER_OPTION(bool, ShouldIncludeLoopExitInCFG, "cfg-loopexit",
101                "Whether or not the end of the loop information should "
102                "be included in the CFG.",
103                false)
104
105ANALYZER_OPTION(bool, ShouldIncludeRichConstructorsInCFG,
106                "cfg-rich-constructors",
107                "Whether or not construction site information should be "
108                "included in the CFG C++ constructor elements.",
109                true)
110
111ANALYZER_OPTION(
112    bool, ShouldIncludeScopesInCFG, "cfg-scopes",
113    "Whether or not scope information should be included in the CFG.", false)
114
115ANALYZER_OPTION(bool, ShouldIncludeDefaultInitForAggregates,
116                "cfg-expand-default-aggr-inits",
117                "Whether or not inline CXXDefaultInitializers for aggregate "
118                "initialization in the CFG.",
119                false)
120
121ANALYZER_OPTION(
122    bool, MayInlineTemplateFunctions, "c++-template-inlining",
123    "Whether or not templated functions may be considered for inlining.", true)
124
125ANALYZER_OPTION(bool, MayInlineCXXStandardLibrary, "c++-stdlib-inlining",
126                "Whether or not C++ standard library functions may be "
127                "considered for inlining.",
128                true)
129
130ANALYZER_OPTION(bool, MayInlineCXXAllocator, "c++-allocator-inlining",
131                "Whether or not allocator and deallocator calls may be "
132                "considered for inlining.",
133                true)
134
135ANALYZER_OPTION(
136    bool, MayInlineCXXSharedPtrDtor, "c++-shared_ptr-inlining",
137    "Whether or not the destructor of C++ 'shared_ptr' may be considered for "
138    "inlining. This covers std::shared_ptr, std::tr1::shared_ptr, and "
139    "boost::shared_ptr, and indeed any destructor named '~shared_ptr'.",
140    false)
141
142ANALYZER_OPTION(bool, MayInlineCXXTemporaryDtors, "c++-temp-dtor-inlining",
143                "Whether C++ temporary destructors should be inlined "
144                "during analysis. If temporary destructors are disabled "
145                "in the CFG via the 'cfg-temporary-dtors' option, "
146                "temporary destructors would not be inlined anyway.",
147                true)
148
149ANALYZER_OPTION(
150    bool, ShouldSuppressNullReturnPaths, "suppress-null-return-paths",
151    "Whether or not paths that go through null returns should be suppressed. "
152    "This is a heuristic for avoiding bug reports with paths that go through "
153    "inlined functions that are more defensive than their callers.",
154    true)
155
156ANALYZER_OPTION(
157    bool, ShouldAvoidSuppressingNullArgumentPaths,
158    "avoid-suppressing-null-argument-paths",
159    "Whether a bug report should not be suppressed if its path includes a call "
160    "with a null argument, even if that call has a null return. This option "
161    "has no effect when ShouldSuppressNullReturnPaths is false. This is a "
162    "counter-heuristic to avoid false negatives.",
163    false)
164
165ANALYZER_OPTION(bool, ShouldSuppressInlinedDefensiveChecks,
166                "suppress-inlined-defensive-checks",
167                "Whether or not diagnostics containing inlined "
168                "defensive NULL checks should be suppressed.",
169                true)
170
171ANALYZER_OPTION(bool, MayInlineCXXContainerMethods, "c++-container-inlining",
172                "Whether or not methods of C++ container objects may be "
173                "considered for inlining.",
174                false)
175
176ANALYZER_OPTION(bool, ShouldSuppressFromCXXStandardLibrary,
177                "suppress-c++-stdlib",
178                "Whether or not diagnostics reported within the C++ "
179                "standard library should be suppressed.",
180                true)
181
182ANALYZER_OPTION(bool, ShouldCrosscheckWithZ3, "crosscheck-with-z3",
183                "Whether bug reports should be crosschecked with the Z3 "
184                "constraint manager backend.",
185                false)
186
187ANALYZER_OPTION(
188    unsigned, Z3CrosscheckEQClassTimeoutThreshold,
189    "crosscheck-with-z3-eqclass-timeout-threshold",
190    "Set a timeout for bug report equivalence classes in milliseconds. "
191    "If we exhaust this threshold, we will drop the bug report eqclass "
192    "instead of doing more Z3 queries. Setting this to 700 ms in conjunction "
193    "with \"crosscheck-with-z3-timeout-threshold\" of 300 ms, would nicely "
194    "guarantee that no bug report equivalence class can take longer than "
195    "1 second, effectively mitigating Z3 hangs during refutation. "
196    "If there were Z3 retries, only the minimum query time is considered "
197    "when accumulating query times within a report equivalence class. "
198    "Set 0 for no timeout.", 0)
199
200ANALYZER_OPTION(
201    unsigned, Z3CrosscheckTimeoutThreshold,
202    "crosscheck-with-z3-timeout-threshold",
203    "Set a timeout for individual Z3 queries in milliseconds. "
204    "On fast machines, 300 worked well in some cases. "
205    "The lower it is, the higher the chances of having flaky issues. "
206    "Having no timeout may hang the analyzer indefinitely. "
207    "Set 0 for no timeout.", 15'000)
208
209ANALYZER_OPTION(
210    unsigned, Z3CrosscheckRLimitThreshold,
211    "crosscheck-with-z3-rlimit-threshold",
212    "Set the Z3 resource limit threshold. This sets a supposedly deterministic "
213    "cutoff point for Z3 queries, as longer queries usually consume more "
214    "resources. "
215    "400'000 should on average make Z3 queries run for up to 100ms on modern "
216    "hardware. Set 0 for unlimited.", 0)
217
218ANALYZER_OPTION(
219    PositiveAnalyzerOption, Z3CrosscheckMaxAttemptsPerQuery,
220    "crosscheck-with-z3-max-attempts-per-query",
221    "Set how many times the oracle is allowed to run a Z3 query. "
222    "This must be a positive value. Set 1 to not allow any retry attempts. "
223    "Increasing the number of attempts is often more effective at reducing "
224    "the number of nondeterministic diagnostics than "
225    "\"crosscheck-with-z3-timeout-threshold\" in practice.", 3)
226
227ANALYZER_OPTION(bool, ShouldReportIssuesInMainSourceFile,
228                "report-in-main-source-file",
229                "Whether or not the diagnostic report should be always "
230                "reported in the main source file and not the headers.",
231                false)
232
233ANALYZER_OPTION(bool, ShouldWriteStableReportFilename, "stable-report-filename",
234                "Deprecated: report filenames are now always stable. "
235                "See also 'verbose-report-filename'.",
236                false)
237
238ANALYZER_OPTION(bool, ShouldWriteVerboseReportFilename, "verbose-report-filename",
239                "Whether or not the report filename should contain extra "
240                "information about the issue.",
241                false)
242
243ANALYZER_OPTION(
244    bool, ShouldSerializeStats, "serialize-stats",
245    "Whether the analyzer should serialize statistics to plist output. "
246    "Statistics would be serialized in JSON format inside the main dictionary "
247    "under the statistics key. Available only if compiled in assert mode or "
248    "with LLVM statistics explicitly enabled.",
249    false)
250
251ANALYZER_OPTION(bool, MayInlineObjCMethod, "objc-inlining",
252                "Whether ObjectiveC inlining is enabled, false otherwise.",
253                true)
254
255ANALYZER_OPTION(bool, ShouldPrunePaths, "prune-paths",
256                "Whether irrelevant parts of a bug report path should "
257                "be pruned out of the final output.",
258                true)
259
260ANALYZER_OPTION(bool, ShouldAddPopUpNotes, "add-pop-up-notes",
261                "Whether pop-up notes should be added to the final output.",
262                true)
263
264ANALYZER_OPTION(
265    bool, ShouldConditionalizeStaticInitializers,
266    "cfg-conditional-static-initializers",
267    "Whether 'static' initializers should be in conditional logic in the CFG.",
268    true)
269
270ANALYZER_OPTION(bool, ShouldSynthesizeBodies, "faux-bodies",
271                "Whether the analyzer engine should synthesize fake "
272                "bodies for well-known functions.",
273                true)
274
275ANALYZER_OPTION(
276    bool, ShouldElideConstructors, "elide-constructors",
277    "Whether elidable C++ copy-constructors and move-constructors should be "
278    "actually elided during analysis. Both behaviors are allowed by the C++ "
279    "standard, and the analyzer, like CodeGen, defaults to eliding. Starting "
280    "with C++17 some elisions become mandatory, and in these cases the option "
281    "will be ignored.",
282    true)
283
284ANALYZER_OPTION(
285    bool, ShouldInlineLambdas, "inline-lambdas",
286    "Whether lambdas should be inlined. Otherwise a sink node will be "
287    "generated each time a LambdaExpr is visited.",
288    true)
289
290ANALYZER_OPTION(bool, ShouldWidenLoops, "widen-loops",
291                "Whether the analysis should try to widen loops.", false)
292
293ANALYZER_OPTION(
294    bool, ShouldUnrollLoops, "unroll-loops",
295    "Whether the analysis should try to unroll loops with known bounds.", false)
296
297ANALYZER_OPTION(
298    bool, ShouldDisplayNotesAsEvents, "notes-as-events",
299    "Whether the bug reporter should transparently treat extra note diagnostic "
300    "pieces as event diagnostic pieces. Useful when the diagnostic consumer "
301    "doesn't support the extra note pieces.",
302    false)
303
304ANALYZER_OPTION(
305    bool, ShouldAggressivelySimplifyBinaryOperation,
306    "aggressive-binary-operation-simplification",
307    "Whether SValBuilder should rearrange comparisons and additive operations "
308    "of symbolic expressions which consist of a sum of a symbol and a concrete "
309    "integer into the format where symbols are on the left-hand side and the "
310    "integer is on the right. This is only done if both symbols and both "
311    "concrete integers are signed, greater than or equal to the quarter of the "
312    "minimum value of the type and less than or equal to the quarter of the "
313    "maximum value of that type. A + n <OP> B + m becomes A - B <OP> m - n, "
314    "where A and B symbolic, n and m are integers. <OP> is any of '==', '!=', "
315    "'<', '<=', '>', '>=', '+' or '-'. The rearrangement also happens with '-' "
316    "instead of '+' on either or both side and also if any or both integers "
317    "are missing.",
318    false)
319
320ANALYZER_OPTION(
321    bool, ShouldEagerlyAssume, "eagerly-assume",
322    "If this is enabled (the default behavior), when the analyzer encounters "
323    "a comparison operator or logical negation, it immediately splits the "
324    "state to separate the case when the expression is true and the case when "
325    "it's false. The upside is that this can increase analysis precision until "
326    "we have a better way to lazily evaluate such logic; the downside is that "
327    "it eagerly bifurcates paths.",
328    true)
329
330ANALYZER_OPTION(
331    bool, IsNaiveCTUEnabled, "experimental-enable-naive-ctu-analysis",
332    "Whether naive cross translation unit analysis is enabled. This is an "
333    "experimental feature to inline functions from other translation units.",
334    false)
335
336ANALYZER_OPTION(bool, ShouldDisplayMacroExpansions, "expand-macros",
337                "Whether macros related to the bugpath should be "
338                "expanded and included in the plist output.",
339                false)
340
341ANALYZER_OPTION(bool, DisplayCTUProgress, "display-ctu-progress",
342                "Whether to emit verbose output about "
343                "the analyzer's progress related to ctu.",
344                false)
345
346ANALYZER_OPTION(bool, ShouldTrackConditions, "track-conditions",
347                "Whether to track conditions that are a control dependency of "
348                "an already tracked variable.",
349                true)
350
351ANALYZER_OPTION(bool, ShouldTrackConditionsDebug, "track-conditions-debug",
352                "Whether to place an event at each tracked condition.",
353                false)
354
355ANALYZER_OPTION(bool, ShouldApplyFixIts, "apply-fixits",
356                "Apply the fix-it hints to the files",
357                false)
358
359ANALYZER_OPTION(bool, ShouldDisplayCheckerNameForText, "display-checker-name",
360                "Display the checker name for textual outputs",
361                true)
362
363ANALYZER_OPTION(bool, ShouldSupportSymbolicIntegerCasts,
364                "support-symbolic-integer-casts",
365                "Produce cast symbols for integral types.",
366                false)
367
368ANALYZER_OPTION(
369    bool, ShouldAssumeControlledEnvironment, "assume-controlled-environment",
370    "Whether the analyzed application runs in a controlled environment. "
371    "We will assume that environment variables exist in queries and they hold "
372    "no malicious data. For instance, if this option is enabled, 'getenv()' "
373    "might be modeled by the analyzer to never return NULL.",
374    false)
375
376ANALYZER_OPTION(
377    bool, ShouldIgnoreBisonGeneratedFiles, "ignore-bison-generated-files",
378    "If enabled, any files containing the \"/* A Bison parser, made by\" "
379    "won't be analyzed.",
380    true)
381
382ANALYZER_OPTION(
383    bool, ShouldIgnoreFlexGeneratedFiles, "ignore-flex-generated-files",
384    "If enabled, any files containing the \"/* A lexical scanner generated by "
385    "flex\" won't be analyzed.",
386    true)
387
388//===----------------------------------------------------------------------===//
389// Unsigned analyzer options.
390//===----------------------------------------------------------------------===//
391
392ANALYZER_OPTION(unsigned, CTUImportThreshold, "ctu-import-threshold",
393                "The maximal amount of translation units that is considered "
394                "for import when inlining functions during CTU analysis. "
395                "Lowering this threshold can alleviate the memory burden of "
396                "analysis with many interdependent definitions located in "
397                "various translation units. This is valid only for non C++ "
398                "source files.",
399                24u)
400
401ANALYZER_OPTION(unsigned, CTUImportCppThreshold, "ctu-import-cpp-threshold",
402                "The maximal amount of translation units that is considered "
403                "for import when inlining functions during CTU analysis of C++ "
404                "source files.",
405                8u)
406
407ANALYZER_OPTION(
408    unsigned, AlwaysInlineSize, "ipa-always-inline-size",
409    "The size of the functions (in basic blocks), which should be considered "
410    "to be small enough to always inline.",
411    3)
412
413ANALYZER_OPTION(
414    unsigned, GraphTrimInterval, "graph-trim-interval",
415    "How often nodes in the ExplodedGraph should be recycled to save memory. "
416    "To disable node reclamation, set the option to 0.",
417    1000)
418
419ANALYZER_OPTION(
420    unsigned, MinCFGSizeTreatFunctionsAsLarge,
421    "min-cfg-size-treat-functions-as-large",
422    "The number of basic blocks a function needs to have to be considered "
423    "large for the 'max-times-inline-large' config option.",
424    14)
425
426ANALYZER_OPTION(unsigned, MaxSymbolComplexity, "max-symbol-complexity",
427                "The maximum complexity of symbolic constraint.", 35)
428
429// HACK:https://discourse.llvm.org/t/rfc-make-istainted-and-complex-symbols-friends/79570
430// Ideally, we should get rid of this option soon.
431ANALYZER_OPTION(unsigned, MaxTaintedSymbolComplexity, "max-tainted-symbol-complexity",
432                "[DEPRECATED] The maximum complexity of a symbol to carry taint", 9)
433
434ANALYZER_OPTION(unsigned, MaxTimesInlineLarge, "max-times-inline-large",
435                "The maximum times a large function could be inlined.", 32)
436
437ANALYZER_OPTION_DEPENDS_ON_USER_MODE(
438    unsigned, MaxInlinableSize, "max-inlinable-size",
439    "The bound on the number of basic blocks in an inlined function.",
440    /* SHALLOW_VAL */ 4, /* DEEP_VAL */ 100)
441
442ANALYZER_OPTION_DEPENDS_ON_USER_MODE(
443    unsigned, MaxNodesPerTopLevelFunction, "max-nodes",
444    "The maximum number of nodes the analyzer can generate while exploring a "
445    "top level function (for each exploded graph). 0 means no limit.",
446    /* SHALLOW_VAL */ 75000, /* DEEP_VAL */ 225000)
447
448ANALYZER_OPTION(
449    unsigned, CTUMaxNodesPercentage, "ctu-max-nodes-pct",
450    "The percentage of single-TU analysed nodes that the CTU analysis is "
451    "allowed to visit.", 50)
452
453ANALYZER_OPTION(
454    unsigned, CTUMaxNodesMin, "ctu-max-nodes-min",
455    "The maximum number of nodes in CTU mode is determinded by "
456    "'ctu-max-nodes-pct'. However, if the number of nodes in single-TU "
457    "analysis is too low, it is meaningful to provide a minimum value that "
458    "serves as an upper bound instead.", 10000)
459
460ANALYZER_OPTION(
461    unsigned, RegionStoreSmallStructLimit, "region-store-small-struct-limit",
462    "The largest number of fields a struct can have and still be considered "
463    "small. This is currently used to decide whether or not it is worth forcing "
464    "a LazyCompoundVal on bind. To disable all small-struct-dependent "
465    "behavior, set the option to 0.",
466    2)
467
468ANALYZER_OPTION(
469    unsigned, RegionStoreSmallArrayLimit, "region-store-small-array-limit",
470    "The largest number of elements an array can have and still be considered "
471    "small. This is currently used to decide whether or not it is worth forcing "
472    "a LazyCompoundVal on bind. To disable all small-array-dependent "
473    "behavior, set the option to 0.",
474    5)
475
476//===----------------------------------------------------------------------===//
477// String analyzer options.
478//===----------------------------------------------------------------------===//
479
480ANALYZER_OPTION(StringRef, CTUDir, "ctu-dir",
481                "The directory containing the CTU related files.", "")
482
483ANALYZER_OPTION(StringRef, CTUIndexName, "ctu-index-name",
484                "The name of the file containing the CTU index of definitions. "
485                "The index file maps USR-names to identifiers. An identifier "
486                "can end with an '.ast' suffix, indicating the indentifier is "
487                "a path to a pch-dump. Otherwise the identifier is regarded as "
488                "path to a source file which is parsed on-demand. Relative "
489                "paths are prefixed with ctu-dir, absolute paths are used "
490                "unmodified during lookup.",
491                "externalDefMap.txt")
492
493ANALYZER_OPTION(
494    StringRef, CTUInvocationList, "ctu-invocation-list",
495    "The path to the YAML format file containing a mapping from source file "
496    "paths to command-line invocations represented as a list of arguments. "
497    "This invocation is used produce the source-file's AST in case on-demand "
498    "loading is performed. Example file-content: "
499    "{/main.cpp: [clang++, /main.cpp], other.cpp: [clang++, /other.cpp]}",
500    "invocations.yaml")
501
502ANALYZER_OPTION(
503    StringRef, ModelPath, "model-path",
504    "The analyzer can inline an alternative implementation written in C at the "
505    "call site if the called function's body is not available. This is a path "
506    "where to look for those alternative implementations (called models).",
507    "")
508
509ANALYZER_OPTION(
510    StringRef, CTUPhase1InliningMode, "ctu-phase1-inlining",
511    "Controls which functions will be inlined during the first phase of the ctu "
512    "analysis. "
513    "If the value is set to 'all' then all foreign functions are inlinied "
514    "immediately during the first phase, thus rendering the second phase a noop. "
515    "The 'ctu-max-nodes-*' budge has no effect in this case. "
516    "If the value is 'small' then only functions with a linear CFG and with a "
517    "limited number of statements would be inlined during the first phase. The "
518    "long and/or nontrivial functions are handled in the second phase and are "
519    "controlled by the 'ctu-max-nodes-*' budge. "
520    "The value 'none' means that all foreign functions are inlined only in the "
521    "second phase, 'ctu-max-nodes-*' budge limits the second phase. "
522    "Value: \"none\", \"small\", \"all\".",
523    "small")
524
525ANALYZER_OPTION(
526    StringRef, CXXMemberInliningMode, "c++-inlining",
527    "Controls which C++ member functions will be considered for inlining. "
528    "Value: \"constructors\", \"destructors\", \"methods\".",
529    "destructors")
530
531ANALYZER_OPTION(
532    StringRef, ExplorationStrategy, "exploration_strategy",
533    "Value: \"dfs\", \"bfs\", \"unexplored_first\", "
534    "\"unexplored_first_queue\", \"unexplored_first_location_queue\", "
535    "\"bfs_block_dfs_contents\".",
536    "unexplored_first_queue")
537
538ANALYZER_OPTION(
539    StringRef, RawSilencedCheckersAndPackages, "silence-checkers",
540    "A semicolon separated list of checker and package names to silence. "
541    "Silenced checkers will not emit reports, but the modeling remain enabled.",
542    "")
543
544ANALYZER_OPTION_DEPENDS_ON_USER_MODE(
545    StringRef, IPAMode, "ipa",
546    "Controls the mode of inter-procedural analysis. Value: \"none\", "
547    "\"basic-inlining\", \"inlining\", \"dynamic\", \"dynamic-bifurcate\".",
548    /* SHALLOW_VAL */ "inlining", /* DEEP_VAL */ "dynamic-bifurcate")
549
550#undef ANALYZER_OPTION_DEPENDS_ON_USER_MODE
551#undef ANALYZER_OPTION
552