Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/llvm-project/llvm/tools/llvm-debuginfo-analyzer/Options.cpp
35231 views
1
//===-- options.cpp - Command line options for llvm-debuginfo-analyzer----===//
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 handles the command line options for llvm-debuginfo-analyzer.
10
//
11
//===----------------------------------------------------------------------===//
12
13
#include "Options.h"
14
#include "llvm/DebugInfo/LogicalView/Core/LVOptions.h"
15
#include "llvm/DebugInfo/LogicalView/Core/LVSort.h"
16
#include "llvm/Support/CommandLine.h"
17
18
using namespace llvm;
19
using namespace llvm::logicalview;
20
using namespace llvm::logicalview::cmdline;
21
22
/// @}
23
/// Command line options.
24
/// @{
25
26
OffsetParser::OffsetParser(cl::Option &O) : parser<unsigned long long>(O) {}
27
OffsetParser::~OffsetParser() = default;
28
29
bool OffsetParser::parse(cl::Option &O, StringRef ArgName, StringRef Arg,
30
unsigned long long &Val) {
31
char *End;
32
std::string Argument(Arg);
33
Val = strtoull(Argument.c_str(), &End, 0);
34
if (*End)
35
// Print an error message if unrecognized character.
36
return O.error("'" + Arg + "' unrecognized character.");
37
return false;
38
}
39
40
LVOptions cmdline::ReaderOptions;
41
42
//===----------------------------------------------------------------------===//
43
// Specific options
44
//===----------------------------------------------------------------------===//
45
cl::list<std::string>
46
cmdline::InputFilenames(cl::desc("<input object files or .dSYM bundles>"),
47
cl::Positional, cl::ZeroOrMore);
48
49
//===----------------------------------------------------------------------===//
50
// '--attribute' options
51
//===----------------------------------------------------------------------===//
52
cl::OptionCategory
53
cmdline::AttributeCategory("Attribute Options",
54
"These control extra attributes that are "
55
"added when the element is printed.");
56
57
// --attribute=<value>[,<value>,...]
58
cl::list<LVAttributeKind> cmdline::AttributeOptions(
59
"attribute", cl::cat(AttributeCategory), cl::desc("Element attributes."),
60
cl::Hidden, cl::CommaSeparated,
61
values(clEnumValN(LVAttributeKind::All, "all", "Include all attributes."),
62
clEnumValN(LVAttributeKind::Argument, "argument",
63
"Template parameters replaced by its arguments."),
64
clEnumValN(LVAttributeKind::Base, "base",
65
"Base types (int, bool, etc.)."),
66
clEnumValN(LVAttributeKind::Coverage, "coverage",
67
"Symbol location coverage."),
68
clEnumValN(LVAttributeKind::Directories, "directories",
69
"Directories referenced in the debug information."),
70
clEnumValN(LVAttributeKind::Discarded, "discarded",
71
"Discarded elements by the linker."),
72
clEnumValN(LVAttributeKind::Discriminator, "discriminator",
73
"Discriminators for inlined function instances."),
74
clEnumValN(LVAttributeKind::Encoded, "encoded",
75
"Template arguments encoded in the template name."),
76
clEnumValN(LVAttributeKind::Extended, "extended",
77
"Advanced attributes alias."),
78
clEnumValN(LVAttributeKind::Filename, "filename",
79
"Filename where the element is defined."),
80
clEnumValN(LVAttributeKind::Files, "files",
81
"Files referenced in the debug information."),
82
clEnumValN(LVAttributeKind::Format, "format",
83
"Object file format name."),
84
clEnumValN(LVAttributeKind::Gaps, "gaps",
85
"Missing debug location (gaps)."),
86
clEnumValN(LVAttributeKind::Generated, "generated",
87
"Compiler generated elements."),
88
clEnumValN(LVAttributeKind::Global, "global",
89
"Element referenced across Compile Units."),
90
clEnumValN(LVAttributeKind::Inserted, "inserted",
91
"Generated inlined abstract references."),
92
clEnumValN(LVAttributeKind::Level, "level",
93
"Lexical scope level (File=0, Compile Unit=1)."),
94
clEnumValN(LVAttributeKind::Linkage, "linkage", "Linkage name."),
95
clEnumValN(LVAttributeKind::Local, "local",
96
"Element referenced only in the Compile Unit."),
97
clEnumValN(LVAttributeKind::Location, "location",
98
"Element debug location."),
99
clEnumValN(LVAttributeKind::Offset, "offset",
100
"Debug information offset."),
101
clEnumValN(LVAttributeKind::Pathname, "pathname",
102
"Pathname where the element is defined."),
103
clEnumValN(LVAttributeKind::Producer, "producer",
104
"Toolchain identification name."),
105
clEnumValN(LVAttributeKind::Publics, "publics",
106
"Function names that are public."),
107
clEnumValN(LVAttributeKind::Qualified, "qualified",
108
"The element type include parents in its name."),
109
clEnumValN(LVAttributeKind::Qualifier, "qualifier",
110
"Line qualifiers (Newstatement, BasicBlock, etc.)."),
111
clEnumValN(LVAttributeKind::Range, "range",
112
"Debug location ranges."),
113
clEnumValN(LVAttributeKind::Reference, "reference",
114
"Element declaration and definition references."),
115
clEnumValN(LVAttributeKind::Register, "register",
116
"Processor register names."),
117
clEnumValN(LVAttributeKind::Standard, "standard",
118
"Basic attributes alias."),
119
clEnumValN(LVAttributeKind::Subrange, "subrange",
120
"Subrange encoding information for arrays."),
121
clEnumValN(LVAttributeKind::System, "system",
122
"Display PDB's MS system elements."),
123
clEnumValN(LVAttributeKind::Typename, "typename",
124
"Include Parameters in templates."),
125
clEnumValN(LVAttributeKind::Underlying, "underlying",
126
"Underlying type for type definitions."),
127
clEnumValN(LVAttributeKind::Zero, "zero", "Zero line numbers.")));
128
129
//===----------------------------------------------------------------------===//
130
// '--compare' options
131
//===----------------------------------------------------------------------===//
132
cl::OptionCategory
133
cmdline::CompareCategory("Compare Options",
134
"These control the view comparison.");
135
136
// --compare-context
137
static cl::opt<bool, true>
138
CompareContext("compare-context", cl::cat(CompareCategory),
139
cl::desc("Add the view as compare context."), cl::Hidden,
140
cl::ZeroOrMore, cl::location(ReaderOptions.Compare.Context),
141
cl::init(false));
142
143
// --compare=<value>[,<value>,...]
144
cl::list<LVCompareKind> cmdline::CompareElements(
145
"compare", cl::cat(CompareCategory), cl::desc("Elements to compare."),
146
cl::Hidden, cl::CommaSeparated,
147
values(clEnumValN(LVCompareKind::All, "all", "Compare all elements."),
148
clEnumValN(LVCompareKind::Lines, "lines", "Lines."),
149
clEnumValN(LVCompareKind::Scopes, "scopes", "Scopes."),
150
clEnumValN(LVCompareKind::Symbols, "symbols", "Symbols."),
151
clEnumValN(LVCompareKind::Types, "types", "Types.")));
152
153
//===----------------------------------------------------------------------===//
154
// '--output' options
155
//===----------------------------------------------------------------------===//
156
cl::OptionCategory
157
cmdline::OutputCategory("Output Options",
158
"These control the output generated.");
159
160
// --output-file=<filename>
161
cl::opt<std::string>
162
cmdline::OutputFilename("output-file", cl::cat(OutputCategory),
163
cl::desc("Redirect output to the specified file."),
164
cl::Hidden, cl::value_desc("filename"),
165
cl::init("-"));
166
167
// --output-folder=<path>
168
static cl::opt<std::string, true>
169
OutputFolder("output-folder", cl::cat(OutputCategory),
170
cl::desc("Folder name for view splitting."),
171
cl::value_desc("pathname"), cl::Hidden, cl::ZeroOrMore,
172
cl::location(ReaderOptions.Output.Folder));
173
174
// --output-level=<level>
175
static cl::opt<unsigned, true>
176
OutputLevel("output-level", cl::cat(OutputCategory),
177
cl::desc("Only print to a depth of N elements."),
178
cl::value_desc("N"), cl::Hidden, cl::ZeroOrMore,
179
cl::location(ReaderOptions.Output.Level), cl::init(-1U));
180
181
// --ouput=<value>[,<value>,...]
182
cl::list<LVOutputKind> cmdline::OutputOptions(
183
"output", cl::cat(OutputCategory), cl::desc("Outputs for view."),
184
cl::Hidden, cl::CommaSeparated,
185
values(clEnumValN(LVOutputKind::All, "all", "All outputs."),
186
clEnumValN(LVOutputKind::Split, "split",
187
"Split the output by Compile Units."),
188
clEnumValN(LVOutputKind::Text, "text",
189
"Use a free form text output."),
190
clEnumValN(LVOutputKind::Json, "json",
191
"Use JSON as the output format.")));
192
193
// --output-sort
194
static cl::opt<LVSortMode, true> OutputSort(
195
"output-sort", cl::cat(OutputCategory),
196
cl::desc("Primary key when ordering logical view (default: line)."),
197
cl::Hidden, cl::ZeroOrMore,
198
values(clEnumValN(LVSortMode::Kind, "kind", "Sort by element kind."),
199
clEnumValN(LVSortMode::Line, "line", "Sort by element line number."),
200
clEnumValN(LVSortMode::Name, "name", "Sort by element name."),
201
clEnumValN(LVSortMode::Offset, "offset", "Sort by element offset.")),
202
cl::location(ReaderOptions.Output.SortMode), cl::init(LVSortMode::Line));
203
204
//===----------------------------------------------------------------------===//
205
// '--print' options
206
//===----------------------------------------------------------------------===//
207
cl::OptionCategory
208
cmdline::PrintCategory("Print Options",
209
"These control which elements are printed.");
210
211
// --print=<value>[,<value>,...]
212
cl::list<LVPrintKind> cmdline::PrintOptions(
213
"print", cl::cat(PrintCategory), cl::desc("Element to print."),
214
cl::CommaSeparated,
215
values(clEnumValN(LVPrintKind::All, "all", "All elements."),
216
clEnumValN(LVPrintKind::Elements, "elements",
217
"Instructions, lines, scopes, symbols and types."),
218
clEnumValN(LVPrintKind::Instructions, "instructions",
219
"Assembler instructions."),
220
clEnumValN(LVPrintKind::Lines, "lines",
221
"Lines referenced in the debug information."),
222
clEnumValN(LVPrintKind::Scopes, "scopes",
223
"A lexical block (Function, Class, etc.)."),
224
clEnumValN(LVPrintKind::Sizes, "sizes",
225
"Scope contributions to the debug information."),
226
clEnumValN(LVPrintKind::Summary, "summary",
227
"Summary of elements missing/added/matched/printed."),
228
clEnumValN(LVPrintKind::Symbols, "symbols",
229
"Symbols (Variable, Members, etc.)."),
230
clEnumValN(LVPrintKind::Types, "types",
231
"Types (Pointer, Reference, etc.)."),
232
clEnumValN(LVPrintKind::Warnings, "warnings",
233
"Warnings detected.")));
234
235
//===----------------------------------------------------------------------===//
236
// '--report' options
237
//===----------------------------------------------------------------------===//
238
cl::OptionCategory
239
cmdline::ReportCategory("Report Options",
240
"These control how the elements are printed.");
241
242
// --report=<value>[,<value>,...]
243
cl::list<LVReportKind> cmdline::ReportOptions(
244
"report", cl::cat(ReportCategory),
245
cl::desc("Reports layout used for print, compare and select."), cl::Hidden,
246
cl::CommaSeparated,
247
values(clEnumValN(LVReportKind::All, "all", "Generate all reports."),
248
clEnumValN(LVReportKind::Children, "children",
249
"Selected elements are displayed in a tree view "
250
"(Include children)"),
251
clEnumValN(LVReportKind::List, "list",
252
"Selected elements are displayed in a tabular format."),
253
clEnumValN(LVReportKind::Parents, "parents",
254
"Selected elements are displayed in a tree view. "
255
"(Include parents)"),
256
clEnumValN(LVReportKind::View, "view",
257
"Selected elements are displayed in a tree view "
258
"(Include parents and children.")));
259
260
//===----------------------------------------------------------------------===//
261
// '--select' options
262
//===----------------------------------------------------------------------===//
263
cl::OptionCategory
264
cmdline::SelectCategory("Select Options",
265
"These control which elements are selected.");
266
267
// --select-nocase
268
static cl::opt<bool, true>
269
SelectIgnoreCase("select-nocase", cl::cat(SelectCategory),
270
cl::desc("Ignore case distinctions when searching."),
271
cl::Hidden, cl::ZeroOrMore,
272
cl::location(ReaderOptions.Select.IgnoreCase),
273
cl::init(false));
274
275
// --select-regex
276
static cl::opt<bool, true> SelectUseRegex(
277
"select-regex", cl::cat(SelectCategory),
278
cl::desc("Treat any <pattern> strings as regular expressions when "
279
"selecting instead of just as an exact string match."),
280
cl::Hidden, cl::ZeroOrMore, cl::location(ReaderOptions.Select.UseRegex),
281
cl::init(false));
282
283
// --select=<pattern>
284
cl::list<std::string> cmdline::SelectPatterns(
285
"select", cl::cat(SelectCategory),
286
cl::desc("Search elements matching the given pattern."), cl::Hidden,
287
cl::value_desc("pattern"), cl::CommaSeparated);
288
289
// --select-offsets=<value>[,<value>,...]
290
OffsetOptionList cmdline::SelectOffsets("select-offsets",
291
cl::cat(SelectCategory),
292
cl::desc("Offset element to print."),
293
cl::Hidden, cl::value_desc("offset"),
294
cl::CommaSeparated, cl::ZeroOrMore);
295
296
// --select-elements=<value>[,<value>,...]
297
cl::list<LVElementKind> cmdline::SelectElements(
298
"select-elements", cl::cat(SelectCategory),
299
cl::desc("Conditions to use when printing elements."), cl::Hidden,
300
cl::CommaSeparated,
301
values(clEnumValN(LVElementKind::Discarded, "Discarded",
302
"Discarded elements by the linker."),
303
clEnumValN(LVElementKind::Global, "Global",
304
"Element referenced across Compile Units."),
305
clEnumValN(LVElementKind::Optimized, "Optimized",
306
"Generated inlined abstract references.")));
307
308
// --select-lines=<value>[,<value>,...]
309
cl::list<LVLineKind> cmdline::SelectLines(
310
"select-lines", cl::cat(SelectCategory),
311
cl::desc("Line kind to use when printing lines."), cl::Hidden,
312
cl::CommaSeparated,
313
values(
314
clEnumValN(LVLineKind::IsAlwaysStepInto, "AlwaysStepInto",
315
"Always Step Into."),
316
clEnumValN(LVLineKind::IsBasicBlock, "BasicBlock", "Basic block."),
317
clEnumValN(LVLineKind::IsDiscriminator, "Discriminator",
318
"Discriminator."),
319
clEnumValN(LVLineKind::IsEndSequence, "EndSequence", "End sequence."),
320
clEnumValN(LVLineKind::IsEpilogueBegin, "EpilogueBegin.",
321
"Epilogue begin."),
322
clEnumValN(LVLineKind::IsLineDebug, "LineDebug", "Debug line."),
323
clEnumValN(LVLineKind::IsLineAssembler, "LineAssembler",
324
"Assembler line."),
325
clEnumValN(LVLineKind::IsNeverStepInto, "NeverStepInto",
326
"Never Step Into."),
327
clEnumValN(LVLineKind::IsNewStatement, "NewStatement",
328
"New statement."),
329
clEnumValN(LVLineKind::IsPrologueEnd, "PrologueEnd", "Prologue end.")));
330
331
// --select-scopes=<value>[,<value>,...]
332
cl::list<LVScopeKind> cmdline::SelectScopes(
333
"select-scopes", cl::cat(SelectCategory),
334
cl::desc("Scope kind to use when printing scopes."), cl::Hidden,
335
cl::CommaSeparated,
336
values(
337
clEnumValN(LVScopeKind::IsAggregate, "Aggregate",
338
"Class, Structure or Union."),
339
clEnumValN(LVScopeKind::IsArray, "Array", "Array."),
340
clEnumValN(LVScopeKind::IsBlock, "Block", "Lexical block."),
341
clEnumValN(LVScopeKind::IsCallSite, "CallSite", "Call site block."),
342
clEnumValN(LVScopeKind::IsCatchBlock, "CatchBlock",
343
"Exception catch block."),
344
clEnumValN(LVScopeKind::IsClass, "Class", "Class."),
345
clEnumValN(LVScopeKind::IsCompileUnit, "CompileUnit", "Compile unit."),
346
clEnumValN(LVScopeKind::IsEntryPoint, "EntryPoint",
347
"Function entry point."),
348
clEnumValN(LVScopeKind::IsEnumeration, "Enumeration", "Enumeration."),
349
clEnumValN(LVScopeKind::IsFunction, "Function", "Function."),
350
clEnumValN(LVScopeKind::IsFunctionType, "FunctionType",
351
"Function type."),
352
clEnumValN(LVScopeKind::IsInlinedFunction, "InlinedFunction",
353
"Inlined function."),
354
clEnumValN(LVScopeKind::IsLabel, "Label", "Label."),
355
clEnumValN(LVScopeKind::IsLexicalBlock, "LexicalBlock",
356
"Lexical block."),
357
clEnumValN(LVScopeKind::IsNamespace, "Namespace", "Namespace."),
358
clEnumValN(LVScopeKind::IsRoot, "Root", "Root."),
359
clEnumValN(LVScopeKind::IsStructure, "Structure", "Structure."),
360
clEnumValN(LVScopeKind::IsSubprogram, "Subprogram", "Subprogram."),
361
clEnumValN(LVScopeKind::IsTemplate, "Template", "Template."),
362
clEnumValN(LVScopeKind::IsTemplateAlias, "TemplateAlias",
363
"Template alias."),
364
clEnumValN(LVScopeKind::IsTemplatePack, "TemplatePack",
365
"Template pack."),
366
clEnumValN(LVScopeKind::IsTryBlock, "TryBlock", "Exception try block."),
367
clEnumValN(LVScopeKind::IsUnion, "Union", "Union.")));
368
369
// --select-symbols=<value>[,<value>,...]
370
cl::list<LVSymbolKind> cmdline::SelectSymbols(
371
"select-symbols", cl::cat(SelectCategory),
372
cl::desc("Symbol kind to use when printing symbols."), cl::Hidden,
373
cl::CommaSeparated,
374
values(clEnumValN(LVSymbolKind::IsCallSiteParameter, "CallSiteParameter",
375
"Call site parameter."),
376
clEnumValN(LVSymbolKind::IsConstant, "Constant", "Constant."),
377
clEnumValN(LVSymbolKind::IsInheritance, "Inheritance",
378
"Inheritance."),
379
clEnumValN(LVSymbolKind::IsMember, "Member", "Member."),
380
clEnumValN(LVSymbolKind::IsParameter, "Parameter", "Parameter."),
381
clEnumValN(LVSymbolKind::IsUnspecified, "Unspecified",
382
"Unspecified parameter."),
383
clEnumValN(LVSymbolKind::IsVariable, "Variable", "Variable.")));
384
385
// --select-types=<value>[,<value>,...]
386
cl::list<LVTypeKind> cmdline::SelectTypes(
387
"select-types", cl::cat(SelectCategory),
388
cl::desc("Type kind to use when printing types."), cl::Hidden,
389
cl::CommaSeparated,
390
values(
391
clEnumValN(LVTypeKind::IsBase, "Base", "Base Type (int, bool, etc.)."),
392
clEnumValN(LVTypeKind::IsConst, "Const", "Constant specifier."),
393
clEnumValN(LVTypeKind::IsEnumerator, "Enumerator", "Enumerator."),
394
clEnumValN(LVTypeKind::IsImport, "Import", "Import."),
395
clEnumValN(LVTypeKind::IsImportDeclaration, "ImportDeclaration",
396
"Import declaration."),
397
clEnumValN(LVTypeKind::IsImportModule, "ImportModule",
398
"Import module."),
399
clEnumValN(LVTypeKind::IsPointer, "Pointer", "Pointer."),
400
clEnumValN(LVTypeKind::IsPointerMember, "PointerMember",
401
"Pointer to member."),
402
clEnumValN(LVTypeKind::IsReference, "Reference", "Reference type."),
403
clEnumValN(LVTypeKind::IsRestrict, "Restrict", "Restrict specifier."),
404
clEnumValN(LVTypeKind::IsRvalueReference, "RvalueReference",
405
"Rvalue reference."),
406
clEnumValN(LVTypeKind::IsSubrange, "Subrange", "Array subrange."),
407
clEnumValN(LVTypeKind::IsTemplateParam, "TemplateParam",
408
"Template Parameter."),
409
clEnumValN(LVTypeKind::IsTemplateTemplateParam, "TemplateTemplateParam",
410
"Template template parameter."),
411
clEnumValN(LVTypeKind::IsTemplateTypeParam, "TemplateTypeParam",
412
"Template type parameter."),
413
clEnumValN(LVTypeKind::IsTemplateValueParam, "TemplateValueParam",
414
"Template value parameter."),
415
clEnumValN(LVTypeKind::IsTypedef, "Typedef", "Type definition."),
416
clEnumValN(LVTypeKind::IsUnspecified, "Unspecified",
417
"Unspecified type."),
418
clEnumValN(LVTypeKind::IsVolatile, "Volatile", "Volatile specifier.")));
419
420
//===----------------------------------------------------------------------===//
421
// '--warning' options
422
//===----------------------------------------------------------------------===//
423
cl::OptionCategory
424
cmdline::WarningCategory("Warning Options",
425
"These control the generated warnings.");
426
427
// --warning=<value>[,<value>,...]
428
cl::list<LVWarningKind> cmdline::WarningOptions(
429
"warning", cl::cat(WarningCategory), cl::desc("Warnings to generate."),
430
cl::Hidden, cl::CommaSeparated,
431
values(
432
clEnumValN(LVWarningKind::All, "all", "All warnings."),
433
clEnumValN(LVWarningKind::Coverages, "coverages",
434
"Invalid symbol coverages values."),
435
clEnumValN(LVWarningKind::Lines, "lines", "Debug lines that are zero."),
436
clEnumValN(LVWarningKind::Locations, "locations",
437
"Invalid symbol locations."),
438
clEnumValN(LVWarningKind::Ranges, "ranges", "Invalid code ranges.")));
439
440
//===----------------------------------------------------------------------===//
441
// '--internal' options
442
//===----------------------------------------------------------------------===//
443
cl::OptionCategory
444
cmdline::InternalCategory("Internal Options",
445
"Internal traces and extra debugging code.");
446
447
// --internal=<value>[,<value>,...]
448
cl::list<LVInternalKind> cmdline::InternalOptions(
449
"internal", cl::cat(InternalCategory), cl::desc("Traces to enable."),
450
cl::Hidden, cl::CommaSeparated,
451
values(
452
clEnumValN(LVInternalKind::All, "all", "Enable all traces."),
453
clEnumValN(LVInternalKind::Cmdline, "cmdline", "Print command line."),
454
clEnumValN(LVInternalKind::ID, "id", "Print unique element ID"),
455
clEnumValN(LVInternalKind::Integrity, "integrity",
456
"Check elements integrity."),
457
clEnumValN(LVInternalKind::None, "none", "Ignore element line number."),
458
clEnumValN(LVInternalKind::Tag, "tag", "Debug information tags.")));
459
460
/// @}
461
462
// Copy local options into a globally accessible data structure.
463
void llvm::logicalview::cmdline::propagateOptions() {
464
// Traverse list of options and update the given set (Using case and Regex).
465
auto UpdatePattern = [&](auto &List, auto &Set, bool IgnoreCase,
466
bool UseRegex) {
467
if (!List.empty())
468
for (std::string &Pattern : List)
469
Set.insert((IgnoreCase && !UseRegex) ? StringRef(Pattern).lower()
470
: Pattern);
471
};
472
473
// Handle --select.
474
UpdatePattern(SelectPatterns, ReaderOptions.Select.Generic,
475
ReaderOptions.Select.IgnoreCase, ReaderOptions.Select.UseRegex);
476
477
// Traverse list of options and update the given set.
478
auto UpdateSet = [&](auto &List, auto &Set) {
479
std::copy(List.begin(), List.end(), std::inserter(Set, Set.begin()));
480
};
481
482
// Handle options sets.
483
UpdateSet(AttributeOptions, ReaderOptions.Attribute.Kinds);
484
UpdateSet(PrintOptions, ReaderOptions.Print.Kinds);
485
UpdateSet(OutputOptions, ReaderOptions.Output.Kinds);
486
UpdateSet(ReportOptions, ReaderOptions.Report.Kinds);
487
UpdateSet(WarningOptions, ReaderOptions.Warning.Kinds);
488
UpdateSet(InternalOptions, ReaderOptions.Internal.Kinds);
489
490
UpdateSet(SelectElements, ReaderOptions.Select.Elements);
491
UpdateSet(SelectLines, ReaderOptions.Select.Lines);
492
UpdateSet(SelectScopes, ReaderOptions.Select.Scopes);
493
UpdateSet(SelectSymbols, ReaderOptions.Select.Symbols);
494
UpdateSet(SelectTypes, ReaderOptions.Select.Types);
495
UpdateSet(SelectOffsets, ReaderOptions.Select.Offsets);
496
UpdateSet(CompareElements, ReaderOptions.Compare.Elements);
497
498
// Resolve any options dependencies (ie. --print=all should set other
499
// print options, etc.).
500
ReaderOptions.resolveDependencies();
501
}
502
503