xref: /netbsd-src/external/apache2/llvm/dist/clang/utils/TableGen/TableGen.cpp (revision e038c9c4676b0f19b1b7dd08a940c6ed64a6d5ae)
17330f729Sjoerg //===- TableGen.cpp - Top-Level TableGen implementation for Clang ---------===//
27330f729Sjoerg //
37330f729Sjoerg // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
47330f729Sjoerg // See https://llvm.org/LICENSE.txt for license information.
57330f729Sjoerg // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
67330f729Sjoerg //
77330f729Sjoerg //===----------------------------------------------------------------------===//
87330f729Sjoerg //
97330f729Sjoerg // This file contains the main function for Clang's TableGen.
107330f729Sjoerg //
117330f729Sjoerg //===----------------------------------------------------------------------===//
127330f729Sjoerg 
137330f729Sjoerg #include "TableGenBackends.h" // Declares all backends.
14*e038c9c4Sjoerg #include "ASTTableGen.h"
157330f729Sjoerg #include "llvm/Support/CommandLine.h"
167330f729Sjoerg #include "llvm/Support/PrettyStackTrace.h"
177330f729Sjoerg #include "llvm/Support/Signals.h"
187330f729Sjoerg #include "llvm/TableGen/Error.h"
197330f729Sjoerg #include "llvm/TableGen/Main.h"
207330f729Sjoerg #include "llvm/TableGen/Record.h"
217330f729Sjoerg 
227330f729Sjoerg using namespace llvm;
237330f729Sjoerg using namespace clang;
247330f729Sjoerg 
257330f729Sjoerg enum ActionType {
267330f729Sjoerg   PrintRecords,
277330f729Sjoerg   DumpJSON,
287330f729Sjoerg   GenClangAttrClasses,
297330f729Sjoerg   GenClangAttrParserStringSwitches,
307330f729Sjoerg   GenClangAttrSubjectMatchRulesParserStringSwitches,
317330f729Sjoerg   GenClangAttrImpl,
327330f729Sjoerg   GenClangAttrList,
337330f729Sjoerg   GenClangAttrSubjectMatchRuleList,
347330f729Sjoerg   GenClangAttrPCHRead,
357330f729Sjoerg   GenClangAttrPCHWrite,
367330f729Sjoerg   GenClangAttrHasAttributeImpl,
377330f729Sjoerg   GenClangAttrSpellingListIndex,
387330f729Sjoerg   GenClangAttrASTVisitor,
397330f729Sjoerg   GenClangAttrTemplateInstantiate,
407330f729Sjoerg   GenClangAttrParsedAttrList,
417330f729Sjoerg   GenClangAttrParsedAttrImpl,
427330f729Sjoerg   GenClangAttrParsedAttrKinds,
437330f729Sjoerg   GenClangAttrTextNodeDump,
447330f729Sjoerg   GenClangAttrNodeTraverse,
45*e038c9c4Sjoerg   GenClangBasicReader,
46*e038c9c4Sjoerg   GenClangBasicWriter,
477330f729Sjoerg   GenClangDiagsDefs,
487330f729Sjoerg   GenClangDiagGroups,
497330f729Sjoerg   GenClangDiagsIndexName,
507330f729Sjoerg   GenClangCommentNodes,
517330f729Sjoerg   GenClangDeclNodes,
527330f729Sjoerg   GenClangStmtNodes,
537330f729Sjoerg   GenClangTypeNodes,
54*e038c9c4Sjoerg   GenClangTypeReader,
55*e038c9c4Sjoerg   GenClangTypeWriter,
567330f729Sjoerg   GenClangOpcodes,
577330f729Sjoerg   GenClangSACheckers,
58*e038c9c4Sjoerg   GenClangSyntaxNodeList,
59*e038c9c4Sjoerg   GenClangSyntaxNodeClasses,
607330f729Sjoerg   GenClangCommentHTMLTags,
617330f729Sjoerg   GenClangCommentHTMLTagsProperties,
627330f729Sjoerg   GenClangCommentHTMLNamedCharacterReferences,
637330f729Sjoerg   GenClangCommentCommandInfo,
647330f729Sjoerg   GenClangCommentCommandList,
657330f729Sjoerg   GenClangOpenCLBuiltins,
667330f729Sjoerg   GenArmNeon,
677330f729Sjoerg   GenArmFP16,
68*e038c9c4Sjoerg   GenArmBF16,
697330f729Sjoerg   GenArmNeonSema,
707330f729Sjoerg   GenArmNeonTest,
717330f729Sjoerg   GenArmMveHeader,
727330f729Sjoerg   GenArmMveBuiltinDef,
737330f729Sjoerg   GenArmMveBuiltinSema,
747330f729Sjoerg   GenArmMveBuiltinCG,
757330f729Sjoerg   GenArmMveBuiltinAliases,
76*e038c9c4Sjoerg   GenArmSveHeader,
77*e038c9c4Sjoerg   GenArmSveBuiltins,
78*e038c9c4Sjoerg   GenArmSveBuiltinCG,
79*e038c9c4Sjoerg   GenArmSveTypeFlags,
80*e038c9c4Sjoerg   GenArmSveRangeChecks,
81*e038c9c4Sjoerg   GenArmCdeHeader,
82*e038c9c4Sjoerg   GenArmCdeBuiltinDef,
83*e038c9c4Sjoerg   GenArmCdeBuiltinSema,
84*e038c9c4Sjoerg   GenArmCdeBuiltinCG,
85*e038c9c4Sjoerg   GenArmCdeBuiltinAliases,
86*e038c9c4Sjoerg   GenRISCVVectorHeader,
87*e038c9c4Sjoerg   GenRISCVVectorBuiltins,
88*e038c9c4Sjoerg   GenRISCVVectorBuiltinCG,
897330f729Sjoerg   GenAttrDocs,
907330f729Sjoerg   GenDiagDocs,
917330f729Sjoerg   GenOptDocs,
927330f729Sjoerg   GenDataCollectors,
937330f729Sjoerg   GenTestPragmaAttributeSupportedAttributes
947330f729Sjoerg };
957330f729Sjoerg 
967330f729Sjoerg namespace {
977330f729Sjoerg cl::opt<ActionType> Action(
987330f729Sjoerg     cl::desc("Action to perform:"),
997330f729Sjoerg     cl::values(
1007330f729Sjoerg         clEnumValN(PrintRecords, "print-records",
1017330f729Sjoerg                    "Print all records to stdout (default)"),
1027330f729Sjoerg         clEnumValN(DumpJSON, "dump-json",
1037330f729Sjoerg                    "Dump all records as machine-readable JSON"),
1047330f729Sjoerg         clEnumValN(GenClangAttrClasses, "gen-clang-attr-classes",
1057330f729Sjoerg                    "Generate clang attribute clases"),
1067330f729Sjoerg         clEnumValN(GenClangAttrParserStringSwitches,
1077330f729Sjoerg                    "gen-clang-attr-parser-string-switches",
1087330f729Sjoerg                    "Generate all parser-related attribute string switches"),
1097330f729Sjoerg         clEnumValN(GenClangAttrSubjectMatchRulesParserStringSwitches,
1107330f729Sjoerg                    "gen-clang-attr-subject-match-rules-parser-string-switches",
1117330f729Sjoerg                    "Generate all parser-related attribute subject match rule"
1127330f729Sjoerg                    "string switches"),
1137330f729Sjoerg         clEnumValN(GenClangAttrImpl, "gen-clang-attr-impl",
1147330f729Sjoerg                    "Generate clang attribute implementations"),
1157330f729Sjoerg         clEnumValN(GenClangAttrList, "gen-clang-attr-list",
1167330f729Sjoerg                    "Generate a clang attribute list"),
1177330f729Sjoerg         clEnumValN(GenClangAttrSubjectMatchRuleList,
1187330f729Sjoerg                    "gen-clang-attr-subject-match-rule-list",
1197330f729Sjoerg                    "Generate a clang attribute subject match rule list"),
1207330f729Sjoerg         clEnumValN(GenClangAttrPCHRead, "gen-clang-attr-pch-read",
1217330f729Sjoerg                    "Generate clang PCH attribute reader"),
1227330f729Sjoerg         clEnumValN(GenClangAttrPCHWrite, "gen-clang-attr-pch-write",
1237330f729Sjoerg                    "Generate clang PCH attribute writer"),
1247330f729Sjoerg         clEnumValN(GenClangAttrHasAttributeImpl,
1257330f729Sjoerg                    "gen-clang-attr-has-attribute-impl",
1267330f729Sjoerg                    "Generate a clang attribute spelling list"),
1277330f729Sjoerg         clEnumValN(GenClangAttrSpellingListIndex,
1287330f729Sjoerg                    "gen-clang-attr-spelling-index",
1297330f729Sjoerg                    "Generate a clang attribute spelling index"),
1307330f729Sjoerg         clEnumValN(GenClangAttrASTVisitor, "gen-clang-attr-ast-visitor",
1317330f729Sjoerg                    "Generate a recursive AST visitor for clang attributes"),
1327330f729Sjoerg         clEnumValN(GenClangAttrTemplateInstantiate,
1337330f729Sjoerg                    "gen-clang-attr-template-instantiate",
1347330f729Sjoerg                    "Generate a clang template instantiate code"),
1357330f729Sjoerg         clEnumValN(GenClangAttrParsedAttrList,
1367330f729Sjoerg                    "gen-clang-attr-parsed-attr-list",
1377330f729Sjoerg                    "Generate a clang parsed attribute list"),
1387330f729Sjoerg         clEnumValN(GenClangAttrParsedAttrImpl,
1397330f729Sjoerg                    "gen-clang-attr-parsed-attr-impl",
1407330f729Sjoerg                    "Generate the clang parsed attribute helpers"),
1417330f729Sjoerg         clEnumValN(GenClangAttrParsedAttrKinds,
1427330f729Sjoerg                    "gen-clang-attr-parsed-attr-kinds",
1437330f729Sjoerg                    "Generate a clang parsed attribute kinds"),
1447330f729Sjoerg         clEnumValN(GenClangAttrTextNodeDump, "gen-clang-attr-text-node-dump",
1457330f729Sjoerg                    "Generate clang attribute text node dumper"),
1467330f729Sjoerg         clEnumValN(GenClangAttrNodeTraverse, "gen-clang-attr-node-traverse",
1477330f729Sjoerg                    "Generate clang attribute traverser"),
1487330f729Sjoerg         clEnumValN(GenClangDiagsDefs, "gen-clang-diags-defs",
1497330f729Sjoerg                    "Generate Clang diagnostics definitions"),
1507330f729Sjoerg         clEnumValN(GenClangDiagGroups, "gen-clang-diag-groups",
1517330f729Sjoerg                    "Generate Clang diagnostic groups"),
1527330f729Sjoerg         clEnumValN(GenClangDiagsIndexName, "gen-clang-diags-index-name",
1537330f729Sjoerg                    "Generate Clang diagnostic name index"),
154*e038c9c4Sjoerg         clEnumValN(GenClangBasicReader, "gen-clang-basic-reader",
155*e038c9c4Sjoerg                    "Generate Clang BasicReader classes"),
156*e038c9c4Sjoerg         clEnumValN(GenClangBasicWriter, "gen-clang-basic-writer",
157*e038c9c4Sjoerg                    "Generate Clang BasicWriter classes"),
1587330f729Sjoerg         clEnumValN(GenClangCommentNodes, "gen-clang-comment-nodes",
1597330f729Sjoerg                    "Generate Clang AST comment nodes"),
1607330f729Sjoerg         clEnumValN(GenClangDeclNodes, "gen-clang-decl-nodes",
1617330f729Sjoerg                    "Generate Clang AST declaration nodes"),
1627330f729Sjoerg         clEnumValN(GenClangStmtNodes, "gen-clang-stmt-nodes",
1637330f729Sjoerg                    "Generate Clang AST statement nodes"),
1647330f729Sjoerg         clEnumValN(GenClangTypeNodes, "gen-clang-type-nodes",
1657330f729Sjoerg                    "Generate Clang AST type nodes"),
166*e038c9c4Sjoerg         clEnumValN(GenClangTypeReader, "gen-clang-type-reader",
167*e038c9c4Sjoerg                    "Generate Clang AbstractTypeReader class"),
168*e038c9c4Sjoerg         clEnumValN(GenClangTypeWriter, "gen-clang-type-writer",
169*e038c9c4Sjoerg                    "Generate Clang AbstractTypeWriter class"),
1707330f729Sjoerg         clEnumValN(GenClangOpcodes, "gen-clang-opcodes",
1717330f729Sjoerg                    "Generate Clang constexpr interpreter opcodes"),
1727330f729Sjoerg         clEnumValN(GenClangSACheckers, "gen-clang-sa-checkers",
1737330f729Sjoerg                    "Generate Clang Static Analyzer checkers"),
174*e038c9c4Sjoerg         clEnumValN(GenClangSyntaxNodeList, "gen-clang-syntax-node-list",
175*e038c9c4Sjoerg                    "Generate list of Clang Syntax Tree node types"),
176*e038c9c4Sjoerg         clEnumValN(GenClangSyntaxNodeClasses, "gen-clang-syntax-node-classes",
177*e038c9c4Sjoerg                    "Generate definitions of Clang Syntax Tree node clasess"),
1787330f729Sjoerg         clEnumValN(GenClangCommentHTMLTags, "gen-clang-comment-html-tags",
1797330f729Sjoerg                    "Generate efficient matchers for HTML tag "
1807330f729Sjoerg                    "names that are used in documentation comments"),
1817330f729Sjoerg         clEnumValN(GenClangCommentHTMLTagsProperties,
1827330f729Sjoerg                    "gen-clang-comment-html-tags-properties",
1837330f729Sjoerg                    "Generate efficient matchers for HTML tag "
1847330f729Sjoerg                    "properties"),
1857330f729Sjoerg         clEnumValN(GenClangCommentHTMLNamedCharacterReferences,
1867330f729Sjoerg                    "gen-clang-comment-html-named-character-references",
1877330f729Sjoerg                    "Generate function to translate named character "
1887330f729Sjoerg                    "references to UTF-8 sequences"),
1897330f729Sjoerg         clEnumValN(GenClangCommentCommandInfo, "gen-clang-comment-command-info",
1907330f729Sjoerg                    "Generate command properties for commands that "
1917330f729Sjoerg                    "are used in documentation comments"),
1927330f729Sjoerg         clEnumValN(GenClangCommentCommandList, "gen-clang-comment-command-list",
1937330f729Sjoerg                    "Generate list of commands that are used in "
1947330f729Sjoerg                    "documentation comments"),
1957330f729Sjoerg         clEnumValN(GenClangOpenCLBuiltins, "gen-clang-opencl-builtins",
1967330f729Sjoerg                    "Generate OpenCL builtin declaration handlers"),
1977330f729Sjoerg         clEnumValN(GenArmNeon, "gen-arm-neon", "Generate arm_neon.h for clang"),
1987330f729Sjoerg         clEnumValN(GenArmFP16, "gen-arm-fp16", "Generate arm_fp16.h for clang"),
199*e038c9c4Sjoerg         clEnumValN(GenArmBF16, "gen-arm-bf16", "Generate arm_bf16.h for clang"),
2007330f729Sjoerg         clEnumValN(GenArmNeonSema, "gen-arm-neon-sema",
2017330f729Sjoerg                    "Generate ARM NEON sema support for clang"),
2027330f729Sjoerg         clEnumValN(GenArmNeonTest, "gen-arm-neon-test",
2037330f729Sjoerg                    "Generate ARM NEON tests for clang"),
204*e038c9c4Sjoerg         clEnumValN(GenArmSveHeader, "gen-arm-sve-header",
205*e038c9c4Sjoerg                    "Generate arm_sve.h for clang"),
206*e038c9c4Sjoerg         clEnumValN(GenArmSveBuiltins, "gen-arm-sve-builtins",
207*e038c9c4Sjoerg                    "Generate arm_sve_builtins.inc for clang"),
208*e038c9c4Sjoerg         clEnumValN(GenArmSveBuiltinCG, "gen-arm-sve-builtin-codegen",
209*e038c9c4Sjoerg                    "Generate arm_sve_builtin_cg_map.inc for clang"),
210*e038c9c4Sjoerg         clEnumValN(GenArmSveTypeFlags, "gen-arm-sve-typeflags",
211*e038c9c4Sjoerg                    "Generate arm_sve_typeflags.inc for clang"),
212*e038c9c4Sjoerg         clEnumValN(GenArmSveRangeChecks, "gen-arm-sve-sema-rangechecks",
213*e038c9c4Sjoerg                    "Generate arm_sve_sema_rangechecks.inc for clang"),
2147330f729Sjoerg         clEnumValN(GenArmMveHeader, "gen-arm-mve-header",
2157330f729Sjoerg                    "Generate arm_mve.h for clang"),
2167330f729Sjoerg         clEnumValN(GenArmMveBuiltinDef, "gen-arm-mve-builtin-def",
2177330f729Sjoerg                    "Generate ARM MVE builtin definitions for clang"),
2187330f729Sjoerg         clEnumValN(GenArmMveBuiltinSema, "gen-arm-mve-builtin-sema",
2197330f729Sjoerg                    "Generate ARM MVE builtin sema checks for clang"),
2207330f729Sjoerg         clEnumValN(GenArmMveBuiltinCG, "gen-arm-mve-builtin-codegen",
2217330f729Sjoerg                    "Generate ARM MVE builtin code-generator for clang"),
2227330f729Sjoerg         clEnumValN(GenArmMveBuiltinAliases, "gen-arm-mve-builtin-aliases",
2237330f729Sjoerg                    "Generate list of valid ARM MVE builtin aliases for clang"),
224*e038c9c4Sjoerg         clEnumValN(GenArmCdeHeader, "gen-arm-cde-header",
225*e038c9c4Sjoerg                    "Generate arm_cde.h for clang"),
226*e038c9c4Sjoerg         clEnumValN(GenArmCdeBuiltinDef, "gen-arm-cde-builtin-def",
227*e038c9c4Sjoerg                    "Generate ARM CDE builtin definitions for clang"),
228*e038c9c4Sjoerg         clEnumValN(GenArmCdeBuiltinSema, "gen-arm-cde-builtin-sema",
229*e038c9c4Sjoerg                    "Generate ARM CDE builtin sema checks for clang"),
230*e038c9c4Sjoerg         clEnumValN(GenArmCdeBuiltinCG, "gen-arm-cde-builtin-codegen",
231*e038c9c4Sjoerg                    "Generate ARM CDE builtin code-generator for clang"),
232*e038c9c4Sjoerg         clEnumValN(GenArmCdeBuiltinAliases, "gen-arm-cde-builtin-aliases",
233*e038c9c4Sjoerg                    "Generate list of valid ARM CDE builtin aliases for clang"),
234*e038c9c4Sjoerg         clEnumValN(GenRISCVVectorHeader, "gen-riscv-vector-header",
235*e038c9c4Sjoerg                    "Generate riscv_vector.h for clang"),
236*e038c9c4Sjoerg         clEnumValN(GenRISCVVectorBuiltins, "gen-riscv-vector-builtins",
237*e038c9c4Sjoerg                    "Generate riscv_vector_builtins.inc for clang"),
238*e038c9c4Sjoerg         clEnumValN(GenRISCVVectorBuiltinCG, "gen-riscv-vector-builtin-codegen",
239*e038c9c4Sjoerg                    "Generate riscv_vector_builtin_cg.inc for clang"),
2407330f729Sjoerg         clEnumValN(GenAttrDocs, "gen-attr-docs",
2417330f729Sjoerg                    "Generate attribute documentation"),
2427330f729Sjoerg         clEnumValN(GenDiagDocs, "gen-diag-docs",
2437330f729Sjoerg                    "Generate diagnostic documentation"),
2447330f729Sjoerg         clEnumValN(GenOptDocs, "gen-opt-docs", "Generate option documentation"),
2457330f729Sjoerg         clEnumValN(GenDataCollectors, "gen-clang-data-collectors",
2467330f729Sjoerg                    "Generate data collectors for AST nodes"),
2477330f729Sjoerg         clEnumValN(GenTestPragmaAttributeSupportedAttributes,
2487330f729Sjoerg                    "gen-clang-test-pragma-attribute-supported-attributes",
2497330f729Sjoerg                    "Generate a list of attributes supported by #pragma clang "
2507330f729Sjoerg                    "attribute for testing purposes")));
2517330f729Sjoerg 
2527330f729Sjoerg cl::opt<std::string>
2537330f729Sjoerg ClangComponent("clang-component",
2547330f729Sjoerg                cl::desc("Only use warnings from specified component"),
2557330f729Sjoerg                cl::value_desc("component"), cl::Hidden);
2567330f729Sjoerg 
ClangTableGenMain(raw_ostream & OS,RecordKeeper & Records)2577330f729Sjoerg bool ClangTableGenMain(raw_ostream &OS, RecordKeeper &Records) {
2587330f729Sjoerg   switch (Action) {
2597330f729Sjoerg   case PrintRecords:
2607330f729Sjoerg     OS << Records;           // No argument, dump all contents
2617330f729Sjoerg     break;
2627330f729Sjoerg   case DumpJSON:
2637330f729Sjoerg     EmitJSON(Records, OS);
2647330f729Sjoerg     break;
2657330f729Sjoerg   case GenClangAttrClasses:
2667330f729Sjoerg     EmitClangAttrClass(Records, OS);
2677330f729Sjoerg     break;
2687330f729Sjoerg   case GenClangAttrParserStringSwitches:
2697330f729Sjoerg     EmitClangAttrParserStringSwitches(Records, OS);
2707330f729Sjoerg     break;
2717330f729Sjoerg   case GenClangAttrSubjectMatchRulesParserStringSwitches:
2727330f729Sjoerg     EmitClangAttrSubjectMatchRulesParserStringSwitches(Records, OS);
2737330f729Sjoerg     break;
2747330f729Sjoerg   case GenClangAttrImpl:
2757330f729Sjoerg     EmitClangAttrImpl(Records, OS);
2767330f729Sjoerg     break;
2777330f729Sjoerg   case GenClangAttrList:
2787330f729Sjoerg     EmitClangAttrList(Records, OS);
2797330f729Sjoerg     break;
2807330f729Sjoerg   case GenClangAttrSubjectMatchRuleList:
2817330f729Sjoerg     EmitClangAttrSubjectMatchRuleList(Records, OS);
2827330f729Sjoerg     break;
2837330f729Sjoerg   case GenClangAttrPCHRead:
2847330f729Sjoerg     EmitClangAttrPCHRead(Records, OS);
2857330f729Sjoerg     break;
2867330f729Sjoerg   case GenClangAttrPCHWrite:
2877330f729Sjoerg     EmitClangAttrPCHWrite(Records, OS);
2887330f729Sjoerg     break;
2897330f729Sjoerg   case GenClangAttrHasAttributeImpl:
2907330f729Sjoerg     EmitClangAttrHasAttrImpl(Records, OS);
2917330f729Sjoerg     break;
2927330f729Sjoerg   case GenClangAttrSpellingListIndex:
2937330f729Sjoerg     EmitClangAttrSpellingListIndex(Records, OS);
2947330f729Sjoerg     break;
2957330f729Sjoerg   case GenClangAttrASTVisitor:
2967330f729Sjoerg     EmitClangAttrASTVisitor(Records, OS);
2977330f729Sjoerg     break;
2987330f729Sjoerg   case GenClangAttrTemplateInstantiate:
2997330f729Sjoerg     EmitClangAttrTemplateInstantiate(Records, OS);
3007330f729Sjoerg     break;
3017330f729Sjoerg   case GenClangAttrParsedAttrList:
3027330f729Sjoerg     EmitClangAttrParsedAttrList(Records, OS);
3037330f729Sjoerg     break;
3047330f729Sjoerg   case GenClangAttrParsedAttrImpl:
3057330f729Sjoerg     EmitClangAttrParsedAttrImpl(Records, OS);
3067330f729Sjoerg     break;
3077330f729Sjoerg   case GenClangAttrParsedAttrKinds:
3087330f729Sjoerg     EmitClangAttrParsedAttrKinds(Records, OS);
3097330f729Sjoerg     break;
3107330f729Sjoerg   case GenClangAttrTextNodeDump:
3117330f729Sjoerg     EmitClangAttrTextNodeDump(Records, OS);
3127330f729Sjoerg     break;
3137330f729Sjoerg   case GenClangAttrNodeTraverse:
3147330f729Sjoerg     EmitClangAttrNodeTraverse(Records, OS);
3157330f729Sjoerg     break;
3167330f729Sjoerg   case GenClangDiagsDefs:
3177330f729Sjoerg     EmitClangDiagsDefs(Records, OS, ClangComponent);
3187330f729Sjoerg     break;
3197330f729Sjoerg   case GenClangDiagGroups:
3207330f729Sjoerg     EmitClangDiagGroups(Records, OS);
3217330f729Sjoerg     break;
3227330f729Sjoerg   case GenClangDiagsIndexName:
3237330f729Sjoerg     EmitClangDiagsIndexName(Records, OS);
3247330f729Sjoerg     break;
3257330f729Sjoerg   case GenClangCommentNodes:
3267330f729Sjoerg     EmitClangASTNodes(Records, OS, CommentNodeClassName, "");
3277330f729Sjoerg     break;
3287330f729Sjoerg   case GenClangDeclNodes:
3297330f729Sjoerg     EmitClangASTNodes(Records, OS, DeclNodeClassName, "Decl");
3307330f729Sjoerg     EmitClangDeclContext(Records, OS);
3317330f729Sjoerg     break;
3327330f729Sjoerg   case GenClangStmtNodes:
3337330f729Sjoerg     EmitClangASTNodes(Records, OS, StmtNodeClassName, "");
3347330f729Sjoerg     break;
3357330f729Sjoerg   case GenClangTypeNodes:
3367330f729Sjoerg     EmitClangTypeNodes(Records, OS);
3377330f729Sjoerg     break;
338*e038c9c4Sjoerg   case GenClangTypeReader:
339*e038c9c4Sjoerg     EmitClangTypeReader(Records, OS);
340*e038c9c4Sjoerg     break;
341*e038c9c4Sjoerg   case GenClangTypeWriter:
342*e038c9c4Sjoerg     EmitClangTypeWriter(Records, OS);
343*e038c9c4Sjoerg     break;
344*e038c9c4Sjoerg   case GenClangBasicReader:
345*e038c9c4Sjoerg     EmitClangBasicReader(Records, OS);
346*e038c9c4Sjoerg     break;
347*e038c9c4Sjoerg   case GenClangBasicWriter:
348*e038c9c4Sjoerg     EmitClangBasicWriter(Records, OS);
349*e038c9c4Sjoerg     break;
3507330f729Sjoerg   case GenClangOpcodes:
3517330f729Sjoerg     EmitClangOpcodes(Records, OS);
3527330f729Sjoerg     break;
3537330f729Sjoerg   case GenClangSACheckers:
3547330f729Sjoerg     EmitClangSACheckers(Records, OS);
3557330f729Sjoerg     break;
3567330f729Sjoerg   case GenClangCommentHTMLTags:
3577330f729Sjoerg     EmitClangCommentHTMLTags(Records, OS);
3587330f729Sjoerg     break;
3597330f729Sjoerg   case GenClangCommentHTMLTagsProperties:
3607330f729Sjoerg     EmitClangCommentHTMLTagsProperties(Records, OS);
3617330f729Sjoerg     break;
3627330f729Sjoerg   case GenClangCommentHTMLNamedCharacterReferences:
3637330f729Sjoerg     EmitClangCommentHTMLNamedCharacterReferences(Records, OS);
3647330f729Sjoerg     break;
3657330f729Sjoerg   case GenClangCommentCommandInfo:
3667330f729Sjoerg     EmitClangCommentCommandInfo(Records, OS);
3677330f729Sjoerg     break;
3687330f729Sjoerg   case GenClangCommentCommandList:
3697330f729Sjoerg     EmitClangCommentCommandList(Records, OS);
3707330f729Sjoerg     break;
3717330f729Sjoerg   case GenClangOpenCLBuiltins:
3727330f729Sjoerg     EmitClangOpenCLBuiltins(Records, OS);
3737330f729Sjoerg     break;
374*e038c9c4Sjoerg   case GenClangSyntaxNodeList:
375*e038c9c4Sjoerg     EmitClangSyntaxNodeList(Records, OS);
376*e038c9c4Sjoerg     break;
377*e038c9c4Sjoerg   case GenClangSyntaxNodeClasses:
378*e038c9c4Sjoerg     EmitClangSyntaxNodeClasses(Records, OS);
379*e038c9c4Sjoerg     break;
3807330f729Sjoerg   case GenArmNeon:
3817330f729Sjoerg     EmitNeon(Records, OS);
3827330f729Sjoerg     break;
3837330f729Sjoerg   case GenArmFP16:
3847330f729Sjoerg     EmitFP16(Records, OS);
3857330f729Sjoerg     break;
386*e038c9c4Sjoerg   case GenArmBF16:
387*e038c9c4Sjoerg     EmitBF16(Records, OS);
388*e038c9c4Sjoerg     break;
3897330f729Sjoerg   case GenArmNeonSema:
3907330f729Sjoerg     EmitNeonSema(Records, OS);
3917330f729Sjoerg     break;
3927330f729Sjoerg   case GenArmNeonTest:
3937330f729Sjoerg     EmitNeonTest(Records, OS);
3947330f729Sjoerg     break;
3957330f729Sjoerg   case GenArmMveHeader:
3967330f729Sjoerg     EmitMveHeader(Records, OS);
3977330f729Sjoerg     break;
3987330f729Sjoerg   case GenArmMveBuiltinDef:
3997330f729Sjoerg     EmitMveBuiltinDef(Records, OS);
4007330f729Sjoerg     break;
4017330f729Sjoerg   case GenArmMveBuiltinSema:
4027330f729Sjoerg     EmitMveBuiltinSema(Records, OS);
4037330f729Sjoerg     break;
4047330f729Sjoerg   case GenArmMveBuiltinCG:
4057330f729Sjoerg     EmitMveBuiltinCG(Records, OS);
4067330f729Sjoerg     break;
4077330f729Sjoerg   case GenArmMveBuiltinAliases:
4087330f729Sjoerg     EmitMveBuiltinAliases(Records, OS);
4097330f729Sjoerg     break;
410*e038c9c4Sjoerg   case GenArmSveHeader:
411*e038c9c4Sjoerg     EmitSveHeader(Records, OS);
412*e038c9c4Sjoerg     break;
413*e038c9c4Sjoerg   case GenArmSveBuiltins:
414*e038c9c4Sjoerg     EmitSveBuiltins(Records, OS);
415*e038c9c4Sjoerg     break;
416*e038c9c4Sjoerg   case GenArmSveBuiltinCG:
417*e038c9c4Sjoerg     EmitSveBuiltinCG(Records, OS);
418*e038c9c4Sjoerg     break;
419*e038c9c4Sjoerg   case GenArmSveTypeFlags:
420*e038c9c4Sjoerg     EmitSveTypeFlags(Records, OS);
421*e038c9c4Sjoerg     break;
422*e038c9c4Sjoerg   case GenArmSveRangeChecks:
423*e038c9c4Sjoerg     EmitSveRangeChecks(Records, OS);
424*e038c9c4Sjoerg     break;
425*e038c9c4Sjoerg   case GenArmCdeHeader:
426*e038c9c4Sjoerg     EmitCdeHeader(Records, OS);
427*e038c9c4Sjoerg     break;
428*e038c9c4Sjoerg   case GenArmCdeBuiltinDef:
429*e038c9c4Sjoerg     EmitCdeBuiltinDef(Records, OS);
430*e038c9c4Sjoerg     break;
431*e038c9c4Sjoerg   case GenArmCdeBuiltinSema:
432*e038c9c4Sjoerg     EmitCdeBuiltinSema(Records, OS);
433*e038c9c4Sjoerg     break;
434*e038c9c4Sjoerg   case GenArmCdeBuiltinCG:
435*e038c9c4Sjoerg     EmitCdeBuiltinCG(Records, OS);
436*e038c9c4Sjoerg     break;
437*e038c9c4Sjoerg   case GenArmCdeBuiltinAliases:
438*e038c9c4Sjoerg     EmitCdeBuiltinAliases(Records, OS);
439*e038c9c4Sjoerg     break;
440*e038c9c4Sjoerg   case GenRISCVVectorHeader:
441*e038c9c4Sjoerg     EmitRVVHeader(Records, OS);
442*e038c9c4Sjoerg     break;
443*e038c9c4Sjoerg   case GenRISCVVectorBuiltins:
444*e038c9c4Sjoerg     EmitRVVBuiltins(Records, OS);
445*e038c9c4Sjoerg     break;
446*e038c9c4Sjoerg   case GenRISCVVectorBuiltinCG:
447*e038c9c4Sjoerg     EmitRVVBuiltinCG(Records, OS);
448*e038c9c4Sjoerg     break;
4497330f729Sjoerg   case GenAttrDocs:
4507330f729Sjoerg     EmitClangAttrDocs(Records, OS);
4517330f729Sjoerg     break;
4527330f729Sjoerg   case GenDiagDocs:
4537330f729Sjoerg     EmitClangDiagDocs(Records, OS);
4547330f729Sjoerg     break;
4557330f729Sjoerg   case GenOptDocs:
4567330f729Sjoerg     EmitClangOptDocs(Records, OS);
4577330f729Sjoerg     break;
4587330f729Sjoerg   case GenDataCollectors:
4597330f729Sjoerg     EmitClangDataCollectors(Records, OS);
4607330f729Sjoerg     break;
4617330f729Sjoerg   case GenTestPragmaAttributeSupportedAttributes:
4627330f729Sjoerg     EmitTestPragmaAttributeSupportedAttributes(Records, OS);
4637330f729Sjoerg     break;
4647330f729Sjoerg   }
4657330f729Sjoerg 
4667330f729Sjoerg   return false;
4677330f729Sjoerg }
4687330f729Sjoerg }
4697330f729Sjoerg 
main(int argc,char ** argv)4707330f729Sjoerg int main(int argc, char **argv) {
4717330f729Sjoerg   sys::PrintStackTraceOnErrorSignal(argv[0]);
4727330f729Sjoerg   PrettyStackTraceProgram X(argc, argv);
4737330f729Sjoerg   cl::ParseCommandLineOptions(argc, argv);
4747330f729Sjoerg 
4757330f729Sjoerg   llvm_shutdown_obj Y;
4767330f729Sjoerg 
4777330f729Sjoerg   return TableGenMain(argv[0], &ClangTableGenMain);
4787330f729Sjoerg }
4797330f729Sjoerg 
4807330f729Sjoerg #ifdef __has_feature
4817330f729Sjoerg #if __has_feature(address_sanitizer)
4827330f729Sjoerg #include <sanitizer/lsan_interface.h>
4837330f729Sjoerg // Disable LeakSanitizer for this binary as it has too many leaks that are not
4847330f729Sjoerg // very interesting to fix. See compiler-rt/include/sanitizer/lsan_interface.h .
__lsan_is_turned_off()4857330f729Sjoerg int __lsan_is_turned_off() { return 1; }
4867330f729Sjoerg #endif  // __has_feature(address_sanitizer)
4877330f729Sjoerg #endif  // defined(__has_feature)
488