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