xref: /openbsd-src/gnu/llvm/clang/utils/TableGen/TableGen.cpp (revision 12c855180aad702bbcca06e0398d774beeafb155)
1e5dd7070Spatrick //===- TableGen.cpp - Top-Level TableGen implementation for Clang ---------===//
2e5dd7070Spatrick //
3e5dd7070Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4e5dd7070Spatrick // See https://llvm.org/LICENSE.txt for license information.
5e5dd7070Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6e5dd7070Spatrick //
7e5dd7070Spatrick //===----------------------------------------------------------------------===//
8e5dd7070Spatrick //
9e5dd7070Spatrick // This file contains the main function for Clang's TableGen.
10e5dd7070Spatrick //
11e5dd7070Spatrick //===----------------------------------------------------------------------===//
12e5dd7070Spatrick 
13e5dd7070Spatrick #include "TableGenBackends.h" // Declares all backends.
14e5dd7070Spatrick #include "ASTTableGen.h"
15e5dd7070Spatrick #include "llvm/Support/CommandLine.h"
16*12c85518Srobert #include "llvm/Support/ManagedStatic.h"
17e5dd7070Spatrick #include "llvm/Support/PrettyStackTrace.h"
18e5dd7070Spatrick #include "llvm/Support/Signals.h"
19e5dd7070Spatrick #include "llvm/TableGen/Error.h"
20e5dd7070Spatrick #include "llvm/TableGen/Main.h"
21e5dd7070Spatrick #include "llvm/TableGen/Record.h"
22e5dd7070Spatrick 
23e5dd7070Spatrick using namespace llvm;
24e5dd7070Spatrick using namespace clang;
25e5dd7070Spatrick 
26e5dd7070Spatrick enum ActionType {
27e5dd7070Spatrick   PrintRecords,
28e5dd7070Spatrick   DumpJSON,
29e5dd7070Spatrick   GenClangAttrClasses,
30e5dd7070Spatrick   GenClangAttrParserStringSwitches,
31e5dd7070Spatrick   GenClangAttrSubjectMatchRulesParserStringSwitches,
32e5dd7070Spatrick   GenClangAttrImpl,
33e5dd7070Spatrick   GenClangAttrList,
34*12c85518Srobert   GenClangAttrDocTable,
35e5dd7070Spatrick   GenClangAttrSubjectMatchRuleList,
36e5dd7070Spatrick   GenClangAttrPCHRead,
37e5dd7070Spatrick   GenClangAttrPCHWrite,
38e5dd7070Spatrick   GenClangAttrHasAttributeImpl,
39e5dd7070Spatrick   GenClangAttrSpellingListIndex,
40e5dd7070Spatrick   GenClangAttrASTVisitor,
41e5dd7070Spatrick   GenClangAttrTemplateInstantiate,
42e5dd7070Spatrick   GenClangAttrParsedAttrList,
43e5dd7070Spatrick   GenClangAttrParsedAttrImpl,
44e5dd7070Spatrick   GenClangAttrParsedAttrKinds,
45e5dd7070Spatrick   GenClangAttrTextNodeDump,
46e5dd7070Spatrick   GenClangAttrNodeTraverse,
47e5dd7070Spatrick   GenClangBasicReader,
48e5dd7070Spatrick   GenClangBasicWriter,
49e5dd7070Spatrick   GenClangDiagsDefs,
50e5dd7070Spatrick   GenClangDiagGroups,
51e5dd7070Spatrick   GenClangDiagsIndexName,
52e5dd7070Spatrick   GenClangCommentNodes,
53e5dd7070Spatrick   GenClangDeclNodes,
54e5dd7070Spatrick   GenClangStmtNodes,
55e5dd7070Spatrick   GenClangTypeNodes,
56e5dd7070Spatrick   GenClangTypeReader,
57e5dd7070Spatrick   GenClangTypeWriter,
58e5dd7070Spatrick   GenClangOpcodes,
59e5dd7070Spatrick   GenClangSACheckers,
60a9ac8606Spatrick   GenClangSyntaxNodeList,
61a9ac8606Spatrick   GenClangSyntaxNodeClasses,
62e5dd7070Spatrick   GenClangCommentHTMLTags,
63e5dd7070Spatrick   GenClangCommentHTMLTagsProperties,
64e5dd7070Spatrick   GenClangCommentHTMLNamedCharacterReferences,
65e5dd7070Spatrick   GenClangCommentCommandInfo,
66e5dd7070Spatrick   GenClangCommentCommandList,
67e5dd7070Spatrick   GenClangOpenCLBuiltins,
68a9ac8606Spatrick   GenClangOpenCLBuiltinTests,
69e5dd7070Spatrick   GenArmNeon,
70e5dd7070Spatrick   GenArmFP16,
71ec727ea7Spatrick   GenArmBF16,
72e5dd7070Spatrick   GenArmNeonSema,
73e5dd7070Spatrick   GenArmNeonTest,
74e5dd7070Spatrick   GenArmMveHeader,
75e5dd7070Spatrick   GenArmMveBuiltinDef,
76e5dd7070Spatrick   GenArmMveBuiltinSema,
77e5dd7070Spatrick   GenArmMveBuiltinCG,
78e5dd7070Spatrick   GenArmMveBuiltinAliases,
79ec727ea7Spatrick   GenArmSveHeader,
80ec727ea7Spatrick   GenArmSveBuiltins,
81ec727ea7Spatrick   GenArmSveBuiltinCG,
82ec727ea7Spatrick   GenArmSveTypeFlags,
83ec727ea7Spatrick   GenArmSveRangeChecks,
84ec727ea7Spatrick   GenArmCdeHeader,
85ec727ea7Spatrick   GenArmCdeBuiltinDef,
86ec727ea7Spatrick   GenArmCdeBuiltinSema,
87ec727ea7Spatrick   GenArmCdeBuiltinCG,
88ec727ea7Spatrick   GenArmCdeBuiltinAliases,
89a9ac8606Spatrick   GenRISCVVectorHeader,
90a9ac8606Spatrick   GenRISCVVectorBuiltins,
91a9ac8606Spatrick   GenRISCVVectorBuiltinCG,
92*12c85518Srobert   GenRISCVVectorBuiltinSema,
93e5dd7070Spatrick   GenAttrDocs,
94e5dd7070Spatrick   GenDiagDocs,
95e5dd7070Spatrick   GenOptDocs,
96e5dd7070Spatrick   GenDataCollectors,
97e5dd7070Spatrick   GenTestPragmaAttributeSupportedAttributes
98e5dd7070Spatrick };
99e5dd7070Spatrick 
100e5dd7070Spatrick namespace {
101e5dd7070Spatrick cl::opt<ActionType> Action(
102e5dd7070Spatrick     cl::desc("Action to perform:"),
103e5dd7070Spatrick     cl::values(
104e5dd7070Spatrick         clEnumValN(PrintRecords, "print-records",
105e5dd7070Spatrick                    "Print all records to stdout (default)"),
106e5dd7070Spatrick         clEnumValN(DumpJSON, "dump-json",
107e5dd7070Spatrick                    "Dump all records as machine-readable JSON"),
108e5dd7070Spatrick         clEnumValN(GenClangAttrClasses, "gen-clang-attr-classes",
109e5dd7070Spatrick                    "Generate clang attribute clases"),
110e5dd7070Spatrick         clEnumValN(GenClangAttrParserStringSwitches,
111e5dd7070Spatrick                    "gen-clang-attr-parser-string-switches",
112e5dd7070Spatrick                    "Generate all parser-related attribute string switches"),
113e5dd7070Spatrick         clEnumValN(GenClangAttrSubjectMatchRulesParserStringSwitches,
114e5dd7070Spatrick                    "gen-clang-attr-subject-match-rules-parser-string-switches",
115e5dd7070Spatrick                    "Generate all parser-related attribute subject match rule"
116e5dd7070Spatrick                    "string switches"),
117e5dd7070Spatrick         clEnumValN(GenClangAttrImpl, "gen-clang-attr-impl",
118e5dd7070Spatrick                    "Generate clang attribute implementations"),
119e5dd7070Spatrick         clEnumValN(GenClangAttrList, "gen-clang-attr-list",
120e5dd7070Spatrick                    "Generate a clang attribute list"),
121*12c85518Srobert         clEnumValN(GenClangAttrDocTable, "gen-clang-attr-doc-table",
122*12c85518Srobert                    "Generate a table of attribute documentation"),
123e5dd7070Spatrick         clEnumValN(GenClangAttrSubjectMatchRuleList,
124e5dd7070Spatrick                    "gen-clang-attr-subject-match-rule-list",
125e5dd7070Spatrick                    "Generate a clang attribute subject match rule list"),
126e5dd7070Spatrick         clEnumValN(GenClangAttrPCHRead, "gen-clang-attr-pch-read",
127e5dd7070Spatrick                    "Generate clang PCH attribute reader"),
128e5dd7070Spatrick         clEnumValN(GenClangAttrPCHWrite, "gen-clang-attr-pch-write",
129e5dd7070Spatrick                    "Generate clang PCH attribute writer"),
130e5dd7070Spatrick         clEnumValN(GenClangAttrHasAttributeImpl,
131e5dd7070Spatrick                    "gen-clang-attr-has-attribute-impl",
132e5dd7070Spatrick                    "Generate a clang attribute spelling list"),
133e5dd7070Spatrick         clEnumValN(GenClangAttrSpellingListIndex,
134e5dd7070Spatrick                    "gen-clang-attr-spelling-index",
135e5dd7070Spatrick                    "Generate a clang attribute spelling index"),
136e5dd7070Spatrick         clEnumValN(GenClangAttrASTVisitor, "gen-clang-attr-ast-visitor",
137e5dd7070Spatrick                    "Generate a recursive AST visitor for clang attributes"),
138e5dd7070Spatrick         clEnumValN(GenClangAttrTemplateInstantiate,
139e5dd7070Spatrick                    "gen-clang-attr-template-instantiate",
140e5dd7070Spatrick                    "Generate a clang template instantiate code"),
141e5dd7070Spatrick         clEnumValN(GenClangAttrParsedAttrList,
142e5dd7070Spatrick                    "gen-clang-attr-parsed-attr-list",
143e5dd7070Spatrick                    "Generate a clang parsed attribute list"),
144e5dd7070Spatrick         clEnumValN(GenClangAttrParsedAttrImpl,
145e5dd7070Spatrick                    "gen-clang-attr-parsed-attr-impl",
146e5dd7070Spatrick                    "Generate the clang parsed attribute helpers"),
147e5dd7070Spatrick         clEnumValN(GenClangAttrParsedAttrKinds,
148e5dd7070Spatrick                    "gen-clang-attr-parsed-attr-kinds",
149e5dd7070Spatrick                    "Generate a clang parsed attribute kinds"),
150e5dd7070Spatrick         clEnumValN(GenClangAttrTextNodeDump, "gen-clang-attr-text-node-dump",
151e5dd7070Spatrick                    "Generate clang attribute text node dumper"),
152e5dd7070Spatrick         clEnumValN(GenClangAttrNodeTraverse, "gen-clang-attr-node-traverse",
153e5dd7070Spatrick                    "Generate clang attribute traverser"),
154e5dd7070Spatrick         clEnumValN(GenClangDiagsDefs, "gen-clang-diags-defs",
155e5dd7070Spatrick                    "Generate Clang diagnostics definitions"),
156e5dd7070Spatrick         clEnumValN(GenClangDiagGroups, "gen-clang-diag-groups",
157e5dd7070Spatrick                    "Generate Clang diagnostic groups"),
158e5dd7070Spatrick         clEnumValN(GenClangDiagsIndexName, "gen-clang-diags-index-name",
159e5dd7070Spatrick                    "Generate Clang diagnostic name index"),
160e5dd7070Spatrick         clEnumValN(GenClangBasicReader, "gen-clang-basic-reader",
161e5dd7070Spatrick                    "Generate Clang BasicReader classes"),
162e5dd7070Spatrick         clEnumValN(GenClangBasicWriter, "gen-clang-basic-writer",
163e5dd7070Spatrick                    "Generate Clang BasicWriter classes"),
164e5dd7070Spatrick         clEnumValN(GenClangCommentNodes, "gen-clang-comment-nodes",
165e5dd7070Spatrick                    "Generate Clang AST comment nodes"),
166e5dd7070Spatrick         clEnumValN(GenClangDeclNodes, "gen-clang-decl-nodes",
167e5dd7070Spatrick                    "Generate Clang AST declaration nodes"),
168e5dd7070Spatrick         clEnumValN(GenClangStmtNodes, "gen-clang-stmt-nodes",
169e5dd7070Spatrick                    "Generate Clang AST statement nodes"),
170e5dd7070Spatrick         clEnumValN(GenClangTypeNodes, "gen-clang-type-nodes",
171e5dd7070Spatrick                    "Generate Clang AST type nodes"),
172e5dd7070Spatrick         clEnumValN(GenClangTypeReader, "gen-clang-type-reader",
173e5dd7070Spatrick                    "Generate Clang AbstractTypeReader class"),
174e5dd7070Spatrick         clEnumValN(GenClangTypeWriter, "gen-clang-type-writer",
175e5dd7070Spatrick                    "Generate Clang AbstractTypeWriter class"),
176e5dd7070Spatrick         clEnumValN(GenClangOpcodes, "gen-clang-opcodes",
177e5dd7070Spatrick                    "Generate Clang constexpr interpreter opcodes"),
178e5dd7070Spatrick         clEnumValN(GenClangSACheckers, "gen-clang-sa-checkers",
179e5dd7070Spatrick                    "Generate Clang Static Analyzer checkers"),
180a9ac8606Spatrick         clEnumValN(GenClangSyntaxNodeList, "gen-clang-syntax-node-list",
181a9ac8606Spatrick                    "Generate list of Clang Syntax Tree node types"),
182a9ac8606Spatrick         clEnumValN(GenClangSyntaxNodeClasses, "gen-clang-syntax-node-classes",
183a9ac8606Spatrick                    "Generate definitions of Clang Syntax Tree node clasess"),
184e5dd7070Spatrick         clEnumValN(GenClangCommentHTMLTags, "gen-clang-comment-html-tags",
185e5dd7070Spatrick                    "Generate efficient matchers for HTML tag "
186e5dd7070Spatrick                    "names that are used in documentation comments"),
187e5dd7070Spatrick         clEnumValN(GenClangCommentHTMLTagsProperties,
188e5dd7070Spatrick                    "gen-clang-comment-html-tags-properties",
189e5dd7070Spatrick                    "Generate efficient matchers for HTML tag "
190e5dd7070Spatrick                    "properties"),
191e5dd7070Spatrick         clEnumValN(GenClangCommentHTMLNamedCharacterReferences,
192e5dd7070Spatrick                    "gen-clang-comment-html-named-character-references",
193e5dd7070Spatrick                    "Generate function to translate named character "
194e5dd7070Spatrick                    "references to UTF-8 sequences"),
195e5dd7070Spatrick         clEnumValN(GenClangCommentCommandInfo, "gen-clang-comment-command-info",
196e5dd7070Spatrick                    "Generate command properties for commands that "
197e5dd7070Spatrick                    "are used in documentation comments"),
198e5dd7070Spatrick         clEnumValN(GenClangCommentCommandList, "gen-clang-comment-command-list",
199e5dd7070Spatrick                    "Generate list of commands that are used in "
200e5dd7070Spatrick                    "documentation comments"),
201e5dd7070Spatrick         clEnumValN(GenClangOpenCLBuiltins, "gen-clang-opencl-builtins",
202e5dd7070Spatrick                    "Generate OpenCL builtin declaration handlers"),
203a9ac8606Spatrick         clEnumValN(GenClangOpenCLBuiltinTests, "gen-clang-opencl-builtin-tests",
204a9ac8606Spatrick                    "Generate OpenCL builtin declaration tests"),
205e5dd7070Spatrick         clEnumValN(GenArmNeon, "gen-arm-neon", "Generate arm_neon.h for clang"),
206e5dd7070Spatrick         clEnumValN(GenArmFP16, "gen-arm-fp16", "Generate arm_fp16.h for clang"),
207ec727ea7Spatrick         clEnumValN(GenArmBF16, "gen-arm-bf16", "Generate arm_bf16.h for clang"),
208e5dd7070Spatrick         clEnumValN(GenArmNeonSema, "gen-arm-neon-sema",
209e5dd7070Spatrick                    "Generate ARM NEON sema support for clang"),
210e5dd7070Spatrick         clEnumValN(GenArmNeonTest, "gen-arm-neon-test",
211e5dd7070Spatrick                    "Generate ARM NEON tests for clang"),
212ec727ea7Spatrick         clEnumValN(GenArmSveHeader, "gen-arm-sve-header",
213ec727ea7Spatrick                    "Generate arm_sve.h for clang"),
214ec727ea7Spatrick         clEnumValN(GenArmSveBuiltins, "gen-arm-sve-builtins",
215ec727ea7Spatrick                    "Generate arm_sve_builtins.inc for clang"),
216ec727ea7Spatrick         clEnumValN(GenArmSveBuiltinCG, "gen-arm-sve-builtin-codegen",
217ec727ea7Spatrick                    "Generate arm_sve_builtin_cg_map.inc for clang"),
218ec727ea7Spatrick         clEnumValN(GenArmSveTypeFlags, "gen-arm-sve-typeflags",
219ec727ea7Spatrick                    "Generate arm_sve_typeflags.inc for clang"),
220ec727ea7Spatrick         clEnumValN(GenArmSveRangeChecks, "gen-arm-sve-sema-rangechecks",
221ec727ea7Spatrick                    "Generate arm_sve_sema_rangechecks.inc for clang"),
222e5dd7070Spatrick         clEnumValN(GenArmMveHeader, "gen-arm-mve-header",
223e5dd7070Spatrick                    "Generate arm_mve.h for clang"),
224e5dd7070Spatrick         clEnumValN(GenArmMveBuiltinDef, "gen-arm-mve-builtin-def",
225e5dd7070Spatrick                    "Generate ARM MVE builtin definitions for clang"),
226e5dd7070Spatrick         clEnumValN(GenArmMveBuiltinSema, "gen-arm-mve-builtin-sema",
227e5dd7070Spatrick                    "Generate ARM MVE builtin sema checks for clang"),
228e5dd7070Spatrick         clEnumValN(GenArmMveBuiltinCG, "gen-arm-mve-builtin-codegen",
229e5dd7070Spatrick                    "Generate ARM MVE builtin code-generator for clang"),
230e5dd7070Spatrick         clEnumValN(GenArmMveBuiltinAliases, "gen-arm-mve-builtin-aliases",
231e5dd7070Spatrick                    "Generate list of valid ARM MVE builtin aliases for clang"),
232ec727ea7Spatrick         clEnumValN(GenArmCdeHeader, "gen-arm-cde-header",
233ec727ea7Spatrick                    "Generate arm_cde.h for clang"),
234ec727ea7Spatrick         clEnumValN(GenArmCdeBuiltinDef, "gen-arm-cde-builtin-def",
235ec727ea7Spatrick                    "Generate ARM CDE builtin definitions for clang"),
236ec727ea7Spatrick         clEnumValN(GenArmCdeBuiltinSema, "gen-arm-cde-builtin-sema",
237ec727ea7Spatrick                    "Generate ARM CDE builtin sema checks for clang"),
238ec727ea7Spatrick         clEnumValN(GenArmCdeBuiltinCG, "gen-arm-cde-builtin-codegen",
239ec727ea7Spatrick                    "Generate ARM CDE builtin code-generator for clang"),
240ec727ea7Spatrick         clEnumValN(GenArmCdeBuiltinAliases, "gen-arm-cde-builtin-aliases",
241ec727ea7Spatrick                    "Generate list of valid ARM CDE builtin aliases for clang"),
242a9ac8606Spatrick         clEnumValN(GenRISCVVectorHeader, "gen-riscv-vector-header",
243a9ac8606Spatrick                    "Generate riscv_vector.h for clang"),
244a9ac8606Spatrick         clEnumValN(GenRISCVVectorBuiltins, "gen-riscv-vector-builtins",
245a9ac8606Spatrick                    "Generate riscv_vector_builtins.inc for clang"),
246a9ac8606Spatrick         clEnumValN(GenRISCVVectorBuiltinCG, "gen-riscv-vector-builtin-codegen",
247a9ac8606Spatrick                    "Generate riscv_vector_builtin_cg.inc for clang"),
248*12c85518Srobert         clEnumValN(GenRISCVVectorBuiltinSema, "gen-riscv-vector-builtin-sema",
249*12c85518Srobert                    "Generate riscv_vector_builtin_sema.inc for clang"),
250e5dd7070Spatrick         clEnumValN(GenAttrDocs, "gen-attr-docs",
251e5dd7070Spatrick                    "Generate attribute documentation"),
252e5dd7070Spatrick         clEnumValN(GenDiagDocs, "gen-diag-docs",
253e5dd7070Spatrick                    "Generate diagnostic documentation"),
254e5dd7070Spatrick         clEnumValN(GenOptDocs, "gen-opt-docs", "Generate option documentation"),
255e5dd7070Spatrick         clEnumValN(GenDataCollectors, "gen-clang-data-collectors",
256e5dd7070Spatrick                    "Generate data collectors for AST nodes"),
257e5dd7070Spatrick         clEnumValN(GenTestPragmaAttributeSupportedAttributes,
258e5dd7070Spatrick                    "gen-clang-test-pragma-attribute-supported-attributes",
259e5dd7070Spatrick                    "Generate a list of attributes supported by #pragma clang "
260e5dd7070Spatrick                    "attribute for testing purposes")));
261e5dd7070Spatrick 
262e5dd7070Spatrick cl::opt<std::string>
263e5dd7070Spatrick ClangComponent("clang-component",
264e5dd7070Spatrick                cl::desc("Only use warnings from specified component"),
265e5dd7070Spatrick                cl::value_desc("component"), cl::Hidden);
266e5dd7070Spatrick 
ClangTableGenMain(raw_ostream & OS,RecordKeeper & Records)267e5dd7070Spatrick bool ClangTableGenMain(raw_ostream &OS, RecordKeeper &Records) {
268e5dd7070Spatrick   switch (Action) {
269e5dd7070Spatrick   case PrintRecords:
270e5dd7070Spatrick     OS << Records;           // No argument, dump all contents
271e5dd7070Spatrick     break;
272e5dd7070Spatrick   case DumpJSON:
273e5dd7070Spatrick     EmitJSON(Records, OS);
274e5dd7070Spatrick     break;
275e5dd7070Spatrick   case GenClangAttrClasses:
276e5dd7070Spatrick     EmitClangAttrClass(Records, OS);
277e5dd7070Spatrick     break;
278e5dd7070Spatrick   case GenClangAttrParserStringSwitches:
279e5dd7070Spatrick     EmitClangAttrParserStringSwitches(Records, OS);
280e5dd7070Spatrick     break;
281e5dd7070Spatrick   case GenClangAttrSubjectMatchRulesParserStringSwitches:
282e5dd7070Spatrick     EmitClangAttrSubjectMatchRulesParserStringSwitches(Records, OS);
283e5dd7070Spatrick     break;
284e5dd7070Spatrick   case GenClangAttrImpl:
285e5dd7070Spatrick     EmitClangAttrImpl(Records, OS);
286e5dd7070Spatrick     break;
287e5dd7070Spatrick   case GenClangAttrList:
288e5dd7070Spatrick     EmitClangAttrList(Records, OS);
289e5dd7070Spatrick     break;
290*12c85518Srobert   case GenClangAttrDocTable:
291*12c85518Srobert     EmitClangAttrDocTable(Records, OS);
292*12c85518Srobert     break;
293e5dd7070Spatrick   case GenClangAttrSubjectMatchRuleList:
294e5dd7070Spatrick     EmitClangAttrSubjectMatchRuleList(Records, OS);
295e5dd7070Spatrick     break;
296e5dd7070Spatrick   case GenClangAttrPCHRead:
297e5dd7070Spatrick     EmitClangAttrPCHRead(Records, OS);
298e5dd7070Spatrick     break;
299e5dd7070Spatrick   case GenClangAttrPCHWrite:
300e5dd7070Spatrick     EmitClangAttrPCHWrite(Records, OS);
301e5dd7070Spatrick     break;
302e5dd7070Spatrick   case GenClangAttrHasAttributeImpl:
303e5dd7070Spatrick     EmitClangAttrHasAttrImpl(Records, OS);
304e5dd7070Spatrick     break;
305e5dd7070Spatrick   case GenClangAttrSpellingListIndex:
306e5dd7070Spatrick     EmitClangAttrSpellingListIndex(Records, OS);
307e5dd7070Spatrick     break;
308e5dd7070Spatrick   case GenClangAttrASTVisitor:
309e5dd7070Spatrick     EmitClangAttrASTVisitor(Records, OS);
310e5dd7070Spatrick     break;
311e5dd7070Spatrick   case GenClangAttrTemplateInstantiate:
312e5dd7070Spatrick     EmitClangAttrTemplateInstantiate(Records, OS);
313e5dd7070Spatrick     break;
314e5dd7070Spatrick   case GenClangAttrParsedAttrList:
315e5dd7070Spatrick     EmitClangAttrParsedAttrList(Records, OS);
316e5dd7070Spatrick     break;
317e5dd7070Spatrick   case GenClangAttrParsedAttrImpl:
318e5dd7070Spatrick     EmitClangAttrParsedAttrImpl(Records, OS);
319e5dd7070Spatrick     break;
320e5dd7070Spatrick   case GenClangAttrParsedAttrKinds:
321e5dd7070Spatrick     EmitClangAttrParsedAttrKinds(Records, OS);
322e5dd7070Spatrick     break;
323e5dd7070Spatrick   case GenClangAttrTextNodeDump:
324e5dd7070Spatrick     EmitClangAttrTextNodeDump(Records, OS);
325e5dd7070Spatrick     break;
326e5dd7070Spatrick   case GenClangAttrNodeTraverse:
327e5dd7070Spatrick     EmitClangAttrNodeTraverse(Records, OS);
328e5dd7070Spatrick     break;
329e5dd7070Spatrick   case GenClangDiagsDefs:
330e5dd7070Spatrick     EmitClangDiagsDefs(Records, OS, ClangComponent);
331e5dd7070Spatrick     break;
332e5dd7070Spatrick   case GenClangDiagGroups:
333e5dd7070Spatrick     EmitClangDiagGroups(Records, OS);
334e5dd7070Spatrick     break;
335e5dd7070Spatrick   case GenClangDiagsIndexName:
336e5dd7070Spatrick     EmitClangDiagsIndexName(Records, OS);
337e5dd7070Spatrick     break;
338e5dd7070Spatrick   case GenClangCommentNodes:
339e5dd7070Spatrick     EmitClangASTNodes(Records, OS, CommentNodeClassName, "");
340e5dd7070Spatrick     break;
341e5dd7070Spatrick   case GenClangDeclNodes:
342e5dd7070Spatrick     EmitClangASTNodes(Records, OS, DeclNodeClassName, "Decl");
343e5dd7070Spatrick     EmitClangDeclContext(Records, OS);
344e5dd7070Spatrick     break;
345e5dd7070Spatrick   case GenClangStmtNodes:
346e5dd7070Spatrick     EmitClangASTNodes(Records, OS, StmtNodeClassName, "");
347e5dd7070Spatrick     break;
348e5dd7070Spatrick   case GenClangTypeNodes:
349e5dd7070Spatrick     EmitClangTypeNodes(Records, OS);
350e5dd7070Spatrick     break;
351e5dd7070Spatrick   case GenClangTypeReader:
352e5dd7070Spatrick     EmitClangTypeReader(Records, OS);
353e5dd7070Spatrick     break;
354e5dd7070Spatrick   case GenClangTypeWriter:
355e5dd7070Spatrick     EmitClangTypeWriter(Records, OS);
356e5dd7070Spatrick     break;
357e5dd7070Spatrick   case GenClangBasicReader:
358e5dd7070Spatrick     EmitClangBasicReader(Records, OS);
359e5dd7070Spatrick     break;
360e5dd7070Spatrick   case GenClangBasicWriter:
361e5dd7070Spatrick     EmitClangBasicWriter(Records, OS);
362e5dd7070Spatrick     break;
363e5dd7070Spatrick   case GenClangOpcodes:
364e5dd7070Spatrick     EmitClangOpcodes(Records, OS);
365e5dd7070Spatrick     break;
366e5dd7070Spatrick   case GenClangSACheckers:
367e5dd7070Spatrick     EmitClangSACheckers(Records, OS);
368e5dd7070Spatrick     break;
369e5dd7070Spatrick   case GenClangCommentHTMLTags:
370e5dd7070Spatrick     EmitClangCommentHTMLTags(Records, OS);
371e5dd7070Spatrick     break;
372e5dd7070Spatrick   case GenClangCommentHTMLTagsProperties:
373e5dd7070Spatrick     EmitClangCommentHTMLTagsProperties(Records, OS);
374e5dd7070Spatrick     break;
375e5dd7070Spatrick   case GenClangCommentHTMLNamedCharacterReferences:
376e5dd7070Spatrick     EmitClangCommentHTMLNamedCharacterReferences(Records, OS);
377e5dd7070Spatrick     break;
378e5dd7070Spatrick   case GenClangCommentCommandInfo:
379e5dd7070Spatrick     EmitClangCommentCommandInfo(Records, OS);
380e5dd7070Spatrick     break;
381e5dd7070Spatrick   case GenClangCommentCommandList:
382e5dd7070Spatrick     EmitClangCommentCommandList(Records, OS);
383e5dd7070Spatrick     break;
384e5dd7070Spatrick   case GenClangOpenCLBuiltins:
385e5dd7070Spatrick     EmitClangOpenCLBuiltins(Records, OS);
386e5dd7070Spatrick     break;
387a9ac8606Spatrick   case GenClangOpenCLBuiltinTests:
388a9ac8606Spatrick     EmitClangOpenCLBuiltinTests(Records, OS);
389a9ac8606Spatrick     break;
390a9ac8606Spatrick   case GenClangSyntaxNodeList:
391a9ac8606Spatrick     EmitClangSyntaxNodeList(Records, OS);
392a9ac8606Spatrick     break;
393a9ac8606Spatrick   case GenClangSyntaxNodeClasses:
394a9ac8606Spatrick     EmitClangSyntaxNodeClasses(Records, OS);
395a9ac8606Spatrick     break;
396e5dd7070Spatrick   case GenArmNeon:
397e5dd7070Spatrick     EmitNeon(Records, OS);
398e5dd7070Spatrick     break;
399e5dd7070Spatrick   case GenArmFP16:
400e5dd7070Spatrick     EmitFP16(Records, OS);
401e5dd7070Spatrick     break;
402ec727ea7Spatrick   case GenArmBF16:
403ec727ea7Spatrick     EmitBF16(Records, OS);
404ec727ea7Spatrick     break;
405e5dd7070Spatrick   case GenArmNeonSema:
406e5dd7070Spatrick     EmitNeonSema(Records, OS);
407e5dd7070Spatrick     break;
408e5dd7070Spatrick   case GenArmNeonTest:
409e5dd7070Spatrick     EmitNeonTest(Records, OS);
410e5dd7070Spatrick     break;
411e5dd7070Spatrick   case GenArmMveHeader:
412e5dd7070Spatrick     EmitMveHeader(Records, OS);
413e5dd7070Spatrick     break;
414e5dd7070Spatrick   case GenArmMveBuiltinDef:
415e5dd7070Spatrick     EmitMveBuiltinDef(Records, OS);
416e5dd7070Spatrick     break;
417e5dd7070Spatrick   case GenArmMveBuiltinSema:
418e5dd7070Spatrick     EmitMveBuiltinSema(Records, OS);
419e5dd7070Spatrick     break;
420e5dd7070Spatrick   case GenArmMveBuiltinCG:
421e5dd7070Spatrick     EmitMveBuiltinCG(Records, OS);
422e5dd7070Spatrick     break;
423e5dd7070Spatrick   case GenArmMveBuiltinAliases:
424e5dd7070Spatrick     EmitMveBuiltinAliases(Records, OS);
425e5dd7070Spatrick     break;
426ec727ea7Spatrick   case GenArmSveHeader:
427ec727ea7Spatrick     EmitSveHeader(Records, OS);
428ec727ea7Spatrick     break;
429ec727ea7Spatrick   case GenArmSveBuiltins:
430ec727ea7Spatrick     EmitSveBuiltins(Records, OS);
431ec727ea7Spatrick     break;
432ec727ea7Spatrick   case GenArmSveBuiltinCG:
433ec727ea7Spatrick     EmitSveBuiltinCG(Records, OS);
434ec727ea7Spatrick     break;
435ec727ea7Spatrick   case GenArmSveTypeFlags:
436ec727ea7Spatrick     EmitSveTypeFlags(Records, OS);
437ec727ea7Spatrick     break;
438ec727ea7Spatrick   case GenArmSveRangeChecks:
439ec727ea7Spatrick     EmitSveRangeChecks(Records, OS);
440ec727ea7Spatrick     break;
441ec727ea7Spatrick   case GenArmCdeHeader:
442ec727ea7Spatrick     EmitCdeHeader(Records, OS);
443ec727ea7Spatrick     break;
444ec727ea7Spatrick   case GenArmCdeBuiltinDef:
445ec727ea7Spatrick     EmitCdeBuiltinDef(Records, OS);
446ec727ea7Spatrick     break;
447ec727ea7Spatrick   case GenArmCdeBuiltinSema:
448ec727ea7Spatrick     EmitCdeBuiltinSema(Records, OS);
449ec727ea7Spatrick     break;
450ec727ea7Spatrick   case GenArmCdeBuiltinCG:
451ec727ea7Spatrick     EmitCdeBuiltinCG(Records, OS);
452ec727ea7Spatrick     break;
453ec727ea7Spatrick   case GenArmCdeBuiltinAliases:
454ec727ea7Spatrick     EmitCdeBuiltinAliases(Records, OS);
455ec727ea7Spatrick     break;
456a9ac8606Spatrick   case GenRISCVVectorHeader:
457a9ac8606Spatrick     EmitRVVHeader(Records, OS);
458a9ac8606Spatrick     break;
459a9ac8606Spatrick   case GenRISCVVectorBuiltins:
460a9ac8606Spatrick     EmitRVVBuiltins(Records, OS);
461a9ac8606Spatrick     break;
462a9ac8606Spatrick   case GenRISCVVectorBuiltinCG:
463a9ac8606Spatrick     EmitRVVBuiltinCG(Records, OS);
464a9ac8606Spatrick     break;
465*12c85518Srobert   case GenRISCVVectorBuiltinSema:
466*12c85518Srobert     EmitRVVBuiltinSema(Records, OS);
467*12c85518Srobert     break;
468e5dd7070Spatrick   case GenAttrDocs:
469e5dd7070Spatrick     EmitClangAttrDocs(Records, OS);
470e5dd7070Spatrick     break;
471e5dd7070Spatrick   case GenDiagDocs:
472e5dd7070Spatrick     EmitClangDiagDocs(Records, OS);
473e5dd7070Spatrick     break;
474e5dd7070Spatrick   case GenOptDocs:
475e5dd7070Spatrick     EmitClangOptDocs(Records, OS);
476e5dd7070Spatrick     break;
477e5dd7070Spatrick   case GenDataCollectors:
478e5dd7070Spatrick     EmitClangDataCollectors(Records, OS);
479e5dd7070Spatrick     break;
480e5dd7070Spatrick   case GenTestPragmaAttributeSupportedAttributes:
481e5dd7070Spatrick     EmitTestPragmaAttributeSupportedAttributes(Records, OS);
482e5dd7070Spatrick     break;
483e5dd7070Spatrick   }
484e5dd7070Spatrick 
485e5dd7070Spatrick   return false;
486e5dd7070Spatrick }
487e5dd7070Spatrick }
488e5dd7070Spatrick 
main(int argc,char ** argv)489e5dd7070Spatrick int main(int argc, char **argv) {
490e5dd7070Spatrick   sys::PrintStackTraceOnErrorSignal(argv[0]);
491e5dd7070Spatrick   PrettyStackTraceProgram X(argc, argv);
492e5dd7070Spatrick   cl::ParseCommandLineOptions(argc, argv);
493e5dd7070Spatrick 
494e5dd7070Spatrick   llvm_shutdown_obj Y;
495e5dd7070Spatrick 
496e5dd7070Spatrick   return TableGenMain(argv[0], &ClangTableGenMain);
497e5dd7070Spatrick }
498e5dd7070Spatrick 
499e5dd7070Spatrick #ifdef __has_feature
500e5dd7070Spatrick #if __has_feature(address_sanitizer)
501e5dd7070Spatrick #include <sanitizer/lsan_interface.h>
502e5dd7070Spatrick // Disable LeakSanitizer for this binary as it has too many leaks that are not
503e5dd7070Spatrick // very interesting to fix. See compiler-rt/include/sanitizer/lsan_interface.h .
__lsan_is_turned_off()504e5dd7070Spatrick int __lsan_is_turned_off() { return 1; }
505e5dd7070Spatrick #endif  // __has_feature(address_sanitizer)
506e5dd7070Spatrick #endif  // defined(__has_feature)
507