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