1bee583fdSPeter Collingbourne //===- TableGen.cpp - Top-Level TableGen implementation for Clang ---------===//
2bee583fdSPeter Collingbourne //
32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6bee583fdSPeter Collingbourne //
7bee583fdSPeter Collingbourne //===----------------------------------------------------------------------===//
8bee583fdSPeter Collingbourne //
9bee583fdSPeter Collingbourne // This file contains the main function for Clang's TableGen.
10bee583fdSPeter Collingbourne //
11bee583fdSPeter Collingbourne //===----------------------------------------------------------------------===//
12bee583fdSPeter Collingbourne 
133f76260dSRui Ueyama #include "TableGenBackends.h" // Declares all backends.
14b6f03a5aSJohn McCall #include "ASTTableGen.h"
15bee583fdSPeter Collingbourne #include "llvm/Support/CommandLine.h"
16bee583fdSPeter Collingbourne #include "llvm/Support/PrettyStackTrace.h"
17bee583fdSPeter Collingbourne #include "llvm/Support/Signals.h"
18bee583fdSPeter Collingbourne #include "llvm/TableGen/Error.h"
19bee583fdSPeter Collingbourne #include "llvm/TableGen/Main.h"
20bee583fdSPeter Collingbourne #include "llvm/TableGen/Record.h"
21bee583fdSPeter Collingbourne 
22bee583fdSPeter Collingbourne using namespace llvm;
23995e0e13SJakob Stoklund Olesen using namespace clang;
24bee583fdSPeter Collingbourne 
25bee583fdSPeter Collingbourne enum ActionType {
26b092da8cSSimon Tatham   PrintRecords,
27b092da8cSSimon Tatham   DumpJSON,
28bee583fdSPeter Collingbourne   GenClangAttrClasses,
2935db2b3dSAaron Ballman   GenClangAttrParserStringSwitches,
309e7bf161SAlex Lorenz   GenClangAttrSubjectMatchRulesParserStringSwitches,
31bee583fdSPeter Collingbourne   GenClangAttrImpl,
32bee583fdSPeter Collingbourne   GenClangAttrList,
3318f9e25cSSam McCall   GenClangAttrDocTable,
349e7bf161SAlex Lorenz   GenClangAttrSubjectMatchRuleList,
35bee583fdSPeter Collingbourne   GenClangAttrPCHRead,
36bee583fdSPeter Collingbourne   GenClangAttrPCHWrite,
372fbf9942SAaron Ballman   GenClangAttrHasAttributeImpl,
3899315932SMichael Han   GenClangAttrSpellingListIndex,
39c4a82438SDeLesley Hutchins   GenClangAttrASTVisitor,
40ceec3063SDeLesley Hutchins   GenClangAttrTemplateInstantiate,
414a045173SMichael Han   GenClangAttrParsedAttrList,
428ee40b72SAaron Ballman   GenClangAttrParsedAttrImpl,
434a045173SMichael Han   GenClangAttrParsedAttrKinds,
44db8fac14SStephen Kelly   GenClangAttrTextNodeDump,
45db8fac14SStephen Kelly   GenClangAttrNodeTraverse,
466404bd23SJohn McCall   GenClangBasicReader,
476404bd23SJohn McCall   GenClangBasicWriter,
48bee583fdSPeter Collingbourne   GenClangDiagsDefs,
49bee583fdSPeter Collingbourne   GenClangDiagGroups,
50bee583fdSPeter Collingbourne   GenClangDiagsIndexName,
51ec92531cSDmitri Gribenko   GenClangCommentNodes,
52bee583fdSPeter Collingbourne   GenClangDeclNodes,
53bee583fdSPeter Collingbourne   GenClangStmtNodes,
54a82d2fe9SJohn McCall   GenClangTypeNodes,
55d505e57cSJohn McCall   GenClangTypeReader,
56d505e57cSJohn McCall   GenClangTypeWriter,
57950b70dcSNandor Licker   GenClangOpcodes,
58bee583fdSPeter Collingbourne   GenClangSACheckers,
59454579e4SSam McCall   GenClangSyntaxNodeList,
6098aa0671SSam McCall   GenClangSyntaxNodeClasses,
613ca956f7SDmitri Gribenko   GenClangCommentHTMLTags,
623ca956f7SDmitri Gribenko   GenClangCommentHTMLTagsProperties,
6328800da1SDmitri Gribenko   GenClangCommentHTMLNamedCharacterReferences,
647acbf00fSDmitri Gribenko   GenClangCommentCommandInfo,
652e72dd4aSDmitri Gribenko   GenClangCommentCommandList,
6679a222fcSSven van Haastregt   GenClangOpenCLBuiltins,
678866793bSSven van Haastregt   GenClangOpenCLBuiltinTests,
68bee583fdSPeter Collingbourne   GenArmNeon,
69ce8746d1SAbderrazek Zaafrani   GenArmFP16,
70a6fcf5caSTies Stuij   GenArmBF16,
71bee583fdSPeter Collingbourne   GenArmNeonSema,
7297dba048SAaron Ballman   GenArmNeonTest,
7308074cc9SSimon Tatham   GenArmMveHeader,
7408074cc9SSimon Tatham   GenArmMveBuiltinDef,
7508074cc9SSimon Tatham   GenArmMveBuiltinSema,
7608074cc9SSimon Tatham   GenArmMveBuiltinCG,
7708074cc9SSimon Tatham   GenArmMveBuiltinAliases,
785087ace6SSander de Smalen   GenArmSveHeader,
79c5b81466SSander de Smalen   GenArmSveBuiltins,
80c5b81466SSander de Smalen   GenArmSveBuiltinCG,
81c5b81466SSander de Smalen   GenArmSveTypeFlags,
82c8a5b30bSSander de Smalen   GenArmSveRangeChecks,
8347edf5baSMikhail Maltsev   GenArmCdeHeader,
8447edf5baSMikhail Maltsev   GenArmCdeBuiltinDef,
8547edf5baSMikhail Maltsev   GenArmCdeBuiltinSema,
8647edf5baSMikhail Maltsev   GenArmCdeBuiltinCG,
8747edf5baSMikhail Maltsev   GenArmCdeBuiltinAliases,
88d6a0560bSZakk Chen   GenRISCVVectorHeader,
89d6a0560bSZakk Chen   GenRISCVVectorBuiltins,
90d6a0560bSZakk Chen   GenRISCVVectorBuiltinCG,
91*7a5cb15eSKito Cheng   GenRISCVVectorBuiltinSema,
92b6a3b4baSRichard Smith   GenAttrDocs,
93081ad4d3SRichard Smith   GenDiagDocs,
949e7bf161SAlex Lorenz   GenOptDocs,
951509da08SJohannes Altmanninger   GenDataCollectors,
969e7bf161SAlex Lorenz   GenTestPragmaAttributeSupportedAttributes
97bee583fdSPeter Collingbourne };
98bee583fdSPeter Collingbourne 
99bee583fdSPeter Collingbourne namespace {
100d3f8b1f2SRafael Espindola cl::opt<ActionType> Action(
101d3f8b1f2SRafael Espindola     cl::desc("Action to perform:"),
102d3f8b1f2SRafael Espindola     cl::values(
103b092da8cSSimon Tatham         clEnumValN(PrintRecords, "print-records",
104b092da8cSSimon Tatham                    "Print all records to stdout (default)"),
105b092da8cSSimon Tatham         clEnumValN(DumpJSON, "dump-json",
106b092da8cSSimon Tatham                    "Dump all records as machine-readable JSON"),
107d3f8b1f2SRafael Espindola         clEnumValN(GenClangAttrClasses, "gen-clang-attr-classes",
108bee583fdSPeter Collingbourne                    "Generate clang attribute clases"),
10935db2b3dSAaron Ballman         clEnumValN(GenClangAttrParserStringSwitches,
11035db2b3dSAaron Ballman                    "gen-clang-attr-parser-string-switches",
11135db2b3dSAaron Ballman                    "Generate all parser-related attribute string switches"),
1129e7bf161SAlex Lorenz         clEnumValN(GenClangAttrSubjectMatchRulesParserStringSwitches,
1139e7bf161SAlex Lorenz                    "gen-clang-attr-subject-match-rules-parser-string-switches",
1149e7bf161SAlex Lorenz                    "Generate all parser-related attribute subject match rule"
1159e7bf161SAlex Lorenz                    "string switches"),
116bee583fdSPeter Collingbourne         clEnumValN(GenClangAttrImpl, "gen-clang-attr-impl",
117bee583fdSPeter Collingbourne                    "Generate clang attribute implementations"),
118bee583fdSPeter Collingbourne         clEnumValN(GenClangAttrList, "gen-clang-attr-list",
119bee583fdSPeter Collingbourne                    "Generate a clang attribute list"),
12018f9e25cSSam McCall         clEnumValN(GenClangAttrDocTable, "gen-clang-attr-doc-table",
12118f9e25cSSam McCall                    "Generate a table of attribute documentation"),
1229e7bf161SAlex Lorenz         clEnumValN(GenClangAttrSubjectMatchRuleList,
1239e7bf161SAlex Lorenz                    "gen-clang-attr-subject-match-rule-list",
1249e7bf161SAlex Lorenz                    "Generate a clang attribute subject match rule list"),
125bee583fdSPeter Collingbourne         clEnumValN(GenClangAttrPCHRead, "gen-clang-attr-pch-read",
126bee583fdSPeter Collingbourne                    "Generate clang PCH attribute reader"),
127bee583fdSPeter Collingbourne         clEnumValN(GenClangAttrPCHWrite, "gen-clang-attr-pch-write",
128bee583fdSPeter Collingbourne                    "Generate clang PCH attribute writer"),
1292fbf9942SAaron Ballman         clEnumValN(GenClangAttrHasAttributeImpl,
1302fbf9942SAaron Ballman                    "gen-clang-attr-has-attribute-impl",
131bee583fdSPeter Collingbourne                    "Generate a clang attribute spelling list"),
13299315932SMichael Han         clEnumValN(GenClangAttrSpellingListIndex,
13399315932SMichael Han                    "gen-clang-attr-spelling-index",
13499315932SMichael Han                    "Generate a clang attribute spelling index"),
1359e7bf161SAlex Lorenz         clEnumValN(GenClangAttrASTVisitor, "gen-clang-attr-ast-visitor",
136c4a82438SDeLesley Hutchins                    "Generate a recursive AST visitor for clang attributes"),
137ceec3063SDeLesley Hutchins         clEnumValN(GenClangAttrTemplateInstantiate,
138ceec3063SDeLesley Hutchins                    "gen-clang-attr-template-instantiate",
139ceec3063SDeLesley Hutchins                    "Generate a clang template instantiate code"),
1404a045173SMichael Han         clEnumValN(GenClangAttrParsedAttrList,
1414a045173SMichael Han                    "gen-clang-attr-parsed-attr-list",
1424a045173SMichael Han                    "Generate a clang parsed attribute list"),
1438ee40b72SAaron Ballman         clEnumValN(GenClangAttrParsedAttrImpl,
1448ee40b72SAaron Ballman                    "gen-clang-attr-parsed-attr-impl",
1458ee40b72SAaron Ballman                    "Generate the clang parsed attribute helpers"),
1464a045173SMichael Han         clEnumValN(GenClangAttrParsedAttrKinds,
1474a045173SMichael Han                    "gen-clang-attr-parsed-attr-kinds",
1484a045173SMichael Han                    "Generate a clang parsed attribute kinds"),
149db8fac14SStephen Kelly         clEnumValN(GenClangAttrTextNodeDump, "gen-clang-attr-text-node-dump",
150db8fac14SStephen Kelly                    "Generate clang attribute text node dumper"),
151db8fac14SStephen Kelly         clEnumValN(GenClangAttrNodeTraverse, "gen-clang-attr-node-traverse",
152db8fac14SStephen Kelly                    "Generate clang attribute traverser"),
153bee583fdSPeter Collingbourne         clEnumValN(GenClangDiagsDefs, "gen-clang-diags-defs",
154bee583fdSPeter Collingbourne                    "Generate Clang diagnostics definitions"),
155bee583fdSPeter Collingbourne         clEnumValN(GenClangDiagGroups, "gen-clang-diag-groups",
156bee583fdSPeter Collingbourne                    "Generate Clang diagnostic groups"),
157d3f8b1f2SRafael Espindola         clEnumValN(GenClangDiagsIndexName, "gen-clang-diags-index-name",
158bee583fdSPeter Collingbourne                    "Generate Clang diagnostic name index"),
1596404bd23SJohn McCall         clEnumValN(GenClangBasicReader, "gen-clang-basic-reader",
1606404bd23SJohn McCall                    "Generate Clang BasicReader classes"),
1616404bd23SJohn McCall         clEnumValN(GenClangBasicWriter, "gen-clang-basic-writer",
1626404bd23SJohn McCall                    "Generate Clang BasicWriter classes"),
163ec92531cSDmitri Gribenko         clEnumValN(GenClangCommentNodes, "gen-clang-comment-nodes",
164ec92531cSDmitri Gribenko                    "Generate Clang AST comment nodes"),
165bee583fdSPeter Collingbourne         clEnumValN(GenClangDeclNodes, "gen-clang-decl-nodes",
166bee583fdSPeter Collingbourne                    "Generate Clang AST declaration nodes"),
167bee583fdSPeter Collingbourne         clEnumValN(GenClangStmtNodes, "gen-clang-stmt-nodes",
168bee583fdSPeter Collingbourne                    "Generate Clang AST statement nodes"),
169a82d2fe9SJohn McCall         clEnumValN(GenClangTypeNodes, "gen-clang-type-nodes",
170a82d2fe9SJohn McCall                    "Generate Clang AST type nodes"),
171d505e57cSJohn McCall         clEnumValN(GenClangTypeReader, "gen-clang-type-reader",
172d505e57cSJohn McCall                    "Generate Clang AbstractTypeReader class"),
173d505e57cSJohn McCall         clEnumValN(GenClangTypeWriter, "gen-clang-type-writer",
174d505e57cSJohn McCall                    "Generate Clang AbstractTypeWriter class"),
175950b70dcSNandor Licker         clEnumValN(GenClangOpcodes, "gen-clang-opcodes",
176950b70dcSNandor Licker                    "Generate Clang constexpr interpreter opcodes"),
177bee583fdSPeter Collingbourne         clEnumValN(GenClangSACheckers, "gen-clang-sa-checkers",
178bee583fdSPeter Collingbourne                    "Generate Clang Static Analyzer checkers"),
179454579e4SSam McCall         clEnumValN(GenClangSyntaxNodeList, "gen-clang-syntax-node-list",
180454579e4SSam McCall                    "Generate list of Clang Syntax Tree node types"),
18198aa0671SSam McCall         clEnumValN(GenClangSyntaxNodeClasses, "gen-clang-syntax-node-classes",
18298aa0671SSam McCall                    "Generate definitions of Clang Syntax Tree node clasess"),
183d3f8b1f2SRafael Espindola         clEnumValN(GenClangCommentHTMLTags, "gen-clang-comment-html-tags",
1843ca956f7SDmitri Gribenko                    "Generate efficient matchers for HTML tag "
1853ca956f7SDmitri Gribenko                    "names that are used in documentation comments"),
1863ca956f7SDmitri Gribenko         clEnumValN(GenClangCommentHTMLTagsProperties,
1873ca956f7SDmitri Gribenko                    "gen-clang-comment-html-tags-properties",
1883ca956f7SDmitri Gribenko                    "Generate efficient matchers for HTML tag "
1893ca956f7SDmitri Gribenko                    "properties"),
19028800da1SDmitri Gribenko         clEnumValN(GenClangCommentHTMLNamedCharacterReferences,
19128800da1SDmitri Gribenko                    "gen-clang-comment-html-named-character-references",
19228800da1SDmitri Gribenko                    "Generate function to translate named character "
19328800da1SDmitri Gribenko                    "references to UTF-8 sequences"),
194d3f8b1f2SRafael Espindola         clEnumValN(GenClangCommentCommandInfo, "gen-clang-comment-command-info",
1952e72dd4aSDmitri Gribenko                    "Generate command properties for commands that "
1962e72dd4aSDmitri Gribenko                    "are used in documentation comments"),
197d3f8b1f2SRafael Espindola         clEnumValN(GenClangCommentCommandList, "gen-clang-comment-command-list",
1987acbf00fSDmitri Gribenko                    "Generate list of commands that are used in "
1997acbf00fSDmitri Gribenko                    "documentation comments"),
20079a222fcSSven van Haastregt         clEnumValN(GenClangOpenCLBuiltins, "gen-clang-opencl-builtins",
20179a222fcSSven van Haastregt                    "Generate OpenCL builtin declaration handlers"),
2028866793bSSven van Haastregt         clEnumValN(GenClangOpenCLBuiltinTests, "gen-clang-opencl-builtin-tests",
2038866793bSSven van Haastregt                    "Generate OpenCL builtin declaration tests"),
204d3f8b1f2SRafael Espindola         clEnumValN(GenArmNeon, "gen-arm-neon", "Generate arm_neon.h for clang"),
205ce8746d1SAbderrazek Zaafrani         clEnumValN(GenArmFP16, "gen-arm-fp16", "Generate arm_fp16.h for clang"),
206a6fcf5caSTies Stuij         clEnumValN(GenArmBF16, "gen-arm-bf16", "Generate arm_bf16.h for clang"),
207bee583fdSPeter Collingbourne         clEnumValN(GenArmNeonSema, "gen-arm-neon-sema",
208bee583fdSPeter Collingbourne                    "Generate ARM NEON sema support for clang"),
209bee583fdSPeter Collingbourne         clEnumValN(GenArmNeonTest, "gen-arm-neon-test",
210bee583fdSPeter Collingbourne                    "Generate ARM NEON tests for clang"),
2115087ace6SSander de Smalen         clEnumValN(GenArmSveHeader, "gen-arm-sve-header",
2125087ace6SSander de Smalen                    "Generate arm_sve.h for clang"),
213c5b81466SSander de Smalen         clEnumValN(GenArmSveBuiltins, "gen-arm-sve-builtins",
214c5b81466SSander de Smalen                    "Generate arm_sve_builtins.inc for clang"),
215c5b81466SSander de Smalen         clEnumValN(GenArmSveBuiltinCG, "gen-arm-sve-builtin-codegen",
216c5b81466SSander de Smalen                    "Generate arm_sve_builtin_cg_map.inc for clang"),
217c5b81466SSander de Smalen         clEnumValN(GenArmSveTypeFlags, "gen-arm-sve-typeflags",
218c5b81466SSander de Smalen                    "Generate arm_sve_typeflags.inc for clang"),
219c8a5b30bSSander de Smalen         clEnumValN(GenArmSveRangeChecks, "gen-arm-sve-sema-rangechecks",
220c8a5b30bSSander de Smalen                    "Generate arm_sve_sema_rangechecks.inc for clang"),
22108074cc9SSimon Tatham         clEnumValN(GenArmMveHeader, "gen-arm-mve-header",
22208074cc9SSimon Tatham                    "Generate arm_mve.h for clang"),
22308074cc9SSimon Tatham         clEnumValN(GenArmMveBuiltinDef, "gen-arm-mve-builtin-def",
22408074cc9SSimon Tatham                    "Generate ARM MVE builtin definitions for clang"),
22508074cc9SSimon Tatham         clEnumValN(GenArmMveBuiltinSema, "gen-arm-mve-builtin-sema",
22608074cc9SSimon Tatham                    "Generate ARM MVE builtin sema checks for clang"),
22708074cc9SSimon Tatham         clEnumValN(GenArmMveBuiltinCG, "gen-arm-mve-builtin-codegen",
22808074cc9SSimon Tatham                    "Generate ARM MVE builtin code-generator for clang"),
22908074cc9SSimon Tatham         clEnumValN(GenArmMveBuiltinAliases, "gen-arm-mve-builtin-aliases",
23008074cc9SSimon Tatham                    "Generate list of valid ARM MVE builtin aliases for clang"),
23147edf5baSMikhail Maltsev         clEnumValN(GenArmCdeHeader, "gen-arm-cde-header",
23247edf5baSMikhail Maltsev                    "Generate arm_cde.h for clang"),
23347edf5baSMikhail Maltsev         clEnumValN(GenArmCdeBuiltinDef, "gen-arm-cde-builtin-def",
23447edf5baSMikhail Maltsev                    "Generate ARM CDE builtin definitions for clang"),
23547edf5baSMikhail Maltsev         clEnumValN(GenArmCdeBuiltinSema, "gen-arm-cde-builtin-sema",
23647edf5baSMikhail Maltsev                    "Generate ARM CDE builtin sema checks for clang"),
23747edf5baSMikhail Maltsev         clEnumValN(GenArmCdeBuiltinCG, "gen-arm-cde-builtin-codegen",
23847edf5baSMikhail Maltsev                    "Generate ARM CDE builtin code-generator for clang"),
23947edf5baSMikhail Maltsev         clEnumValN(GenArmCdeBuiltinAliases, "gen-arm-cde-builtin-aliases",
24047edf5baSMikhail Maltsev                    "Generate list of valid ARM CDE builtin aliases for clang"),
241d6a0560bSZakk Chen         clEnumValN(GenRISCVVectorHeader, "gen-riscv-vector-header",
242d6a0560bSZakk Chen                    "Generate riscv_vector.h for clang"),
243d6a0560bSZakk Chen         clEnumValN(GenRISCVVectorBuiltins, "gen-riscv-vector-builtins",
244d6a0560bSZakk Chen                    "Generate riscv_vector_builtins.inc for clang"),
245d6a0560bSZakk Chen         clEnumValN(GenRISCVVectorBuiltinCG, "gen-riscv-vector-builtin-codegen",
246d6a0560bSZakk Chen                    "Generate riscv_vector_builtin_cg.inc for clang"),
247*7a5cb15eSKito Cheng         clEnumValN(GenRISCVVectorBuiltinSema, "gen-riscv-vector-builtin-sema",
248*7a5cb15eSKito Cheng                    "Generate riscv_vector_builtin_sema.inc for clang"),
24997dba048SAaron Ballman         clEnumValN(GenAttrDocs, "gen-attr-docs",
25097dba048SAaron Ballman                    "Generate attribute documentation"),
251b6a3b4baSRichard Smith         clEnumValN(GenDiagDocs, "gen-diag-docs",
252081ad4d3SRichard Smith                    "Generate diagnostic documentation"),
2539e7bf161SAlex Lorenz         clEnumValN(GenOptDocs, "gen-opt-docs", "Generate option documentation"),
2541509da08SJohannes Altmanninger         clEnumValN(GenDataCollectors, "gen-clang-data-collectors",
2551509da08SJohannes Altmanninger                    "Generate data collectors for AST nodes"),
2569e7bf161SAlex Lorenz         clEnumValN(GenTestPragmaAttributeSupportedAttributes,
2579e7bf161SAlex Lorenz                    "gen-clang-test-pragma-attribute-supported-attributes",
2589e7bf161SAlex Lorenz                    "Generate a list of attributes supported by #pragma clang "
2599e7bf161SAlex Lorenz                    "attribute for testing purposes")));
260bee583fdSPeter Collingbourne 
261bee583fdSPeter Collingbourne cl::opt<std::string>
262bee583fdSPeter Collingbourne ClangComponent("clang-component",
263bee583fdSPeter Collingbourne                cl::desc("Only use warnings from specified component"),
264bee583fdSPeter Collingbourne                cl::value_desc("component"), cl::Hidden);
265bee583fdSPeter Collingbourne 
ClangTableGenMain(raw_ostream & OS,RecordKeeper & Records)266f85f39dfSSean Silva bool ClangTableGenMain(raw_ostream &OS, RecordKeeper &Records) {
267bee583fdSPeter Collingbourne   switch (Action) {
268b092da8cSSimon Tatham   case PrintRecords:
269b092da8cSSimon Tatham     OS << Records;           // No argument, dump all contents
270b092da8cSSimon Tatham     break;
271b092da8cSSimon Tatham   case DumpJSON:
272b092da8cSSimon Tatham     EmitJSON(Records, OS);
273b092da8cSSimon Tatham     break;
274bee583fdSPeter Collingbourne   case GenClangAttrClasses:
275995e0e13SJakob Stoklund Olesen     EmitClangAttrClass(Records, OS);
276bee583fdSPeter Collingbourne     break;
27735db2b3dSAaron Ballman   case GenClangAttrParserStringSwitches:
27835db2b3dSAaron Ballman     EmitClangAttrParserStringSwitches(Records, OS);
2794768b317SAaron Ballman     break;
2809e7bf161SAlex Lorenz   case GenClangAttrSubjectMatchRulesParserStringSwitches:
2819e7bf161SAlex Lorenz     EmitClangAttrSubjectMatchRulesParserStringSwitches(Records, OS);
2829e7bf161SAlex Lorenz     break;
283bee583fdSPeter Collingbourne   case GenClangAttrImpl:
284995e0e13SJakob Stoklund Olesen     EmitClangAttrImpl(Records, OS);
285bee583fdSPeter Collingbourne     break;
286bee583fdSPeter Collingbourne   case GenClangAttrList:
287995e0e13SJakob Stoklund Olesen     EmitClangAttrList(Records, OS);
288bee583fdSPeter Collingbourne     break;
28918f9e25cSSam McCall   case GenClangAttrDocTable:
29018f9e25cSSam McCall     EmitClangAttrDocTable(Records, OS);
29118f9e25cSSam McCall     break;
2929e7bf161SAlex Lorenz   case GenClangAttrSubjectMatchRuleList:
2939e7bf161SAlex Lorenz     EmitClangAttrSubjectMatchRuleList(Records, OS);
2949e7bf161SAlex Lorenz     break;
295bee583fdSPeter Collingbourne   case GenClangAttrPCHRead:
296995e0e13SJakob Stoklund Olesen     EmitClangAttrPCHRead(Records, OS);
297bee583fdSPeter Collingbourne     break;
298bee583fdSPeter Collingbourne   case GenClangAttrPCHWrite:
299995e0e13SJakob Stoklund Olesen     EmitClangAttrPCHWrite(Records, OS);
300bee583fdSPeter Collingbourne     break;
3012fbf9942SAaron Ballman   case GenClangAttrHasAttributeImpl:
3022fbf9942SAaron Ballman     EmitClangAttrHasAttrImpl(Records, OS);
303bee583fdSPeter Collingbourne     break;
30499315932SMichael Han   case GenClangAttrSpellingListIndex:
30599315932SMichael Han     EmitClangAttrSpellingListIndex(Records, OS);
30699315932SMichael Han     break;
307c4a82438SDeLesley Hutchins   case GenClangAttrASTVisitor:
308c4a82438SDeLesley Hutchins     EmitClangAttrASTVisitor(Records, OS);
309c4a82438SDeLesley Hutchins     break;
310ceec3063SDeLesley Hutchins   case GenClangAttrTemplateInstantiate:
311995e0e13SJakob Stoklund Olesen     EmitClangAttrTemplateInstantiate(Records, OS);
312ceec3063SDeLesley Hutchins     break;
3134a045173SMichael Han   case GenClangAttrParsedAttrList:
314995e0e13SJakob Stoklund Olesen     EmitClangAttrParsedAttrList(Records, OS);
3154a045173SMichael Han     break;
3168ee40b72SAaron Ballman   case GenClangAttrParsedAttrImpl:
3178ee40b72SAaron Ballman     EmitClangAttrParsedAttrImpl(Records, OS);
3188ee40b72SAaron Ballman     break;
3194a045173SMichael Han   case GenClangAttrParsedAttrKinds:
320995e0e13SJakob Stoklund Olesen     EmitClangAttrParsedAttrKinds(Records, OS);
3214a045173SMichael Han     break;
322db8fac14SStephen Kelly   case GenClangAttrTextNodeDump:
323db8fac14SStephen Kelly     EmitClangAttrTextNodeDump(Records, OS);
324db8fac14SStephen Kelly     break;
325db8fac14SStephen Kelly   case GenClangAttrNodeTraverse:
326db8fac14SStephen Kelly     EmitClangAttrNodeTraverse(Records, OS);
3275bc364ebSAlexander Kornienko     break;
328bee583fdSPeter Collingbourne   case GenClangDiagsDefs:
329995e0e13SJakob Stoklund Olesen     EmitClangDiagsDefs(Records, OS, ClangComponent);
330bee583fdSPeter Collingbourne     break;
331bee583fdSPeter Collingbourne   case GenClangDiagGroups:
332995e0e13SJakob Stoklund Olesen     EmitClangDiagGroups(Records, OS);
333bee583fdSPeter Collingbourne     break;
334bee583fdSPeter Collingbourne   case GenClangDiagsIndexName:
335995e0e13SJakob Stoklund Olesen     EmitClangDiagsIndexName(Records, OS);
336bee583fdSPeter Collingbourne     break;
337ec92531cSDmitri Gribenko   case GenClangCommentNodes:
338baf91d02SJohn McCall     EmitClangASTNodes(Records, OS, CommentNodeClassName, "");
339ec92531cSDmitri Gribenko     break;
340bee583fdSPeter Collingbourne   case GenClangDeclNodes:
341baf91d02SJohn McCall     EmitClangASTNodes(Records, OS, DeclNodeClassName, "Decl");
342995e0e13SJakob Stoklund Olesen     EmitClangDeclContext(Records, OS);
343bee583fdSPeter Collingbourne     break;
344bee583fdSPeter Collingbourne   case GenClangStmtNodes:
345baf91d02SJohn McCall     EmitClangASTNodes(Records, OS, StmtNodeClassName, "");
346bee583fdSPeter Collingbourne     break;
347a82d2fe9SJohn McCall   case GenClangTypeNodes:
348a82d2fe9SJohn McCall     EmitClangTypeNodes(Records, OS);
349a82d2fe9SJohn McCall     break;
350d505e57cSJohn McCall   case GenClangTypeReader:
351d505e57cSJohn McCall     EmitClangTypeReader(Records, OS);
352d505e57cSJohn McCall     break;
353d505e57cSJohn McCall   case GenClangTypeWriter:
354d505e57cSJohn McCall     EmitClangTypeWriter(Records, OS);
355d505e57cSJohn McCall     break;
3566404bd23SJohn McCall   case GenClangBasicReader:
3576404bd23SJohn McCall     EmitClangBasicReader(Records, OS);
3586404bd23SJohn McCall     break;
3596404bd23SJohn McCall   case GenClangBasicWriter:
3606404bd23SJohn McCall     EmitClangBasicWriter(Records, OS);
3616404bd23SJohn McCall     break;
362950b70dcSNandor Licker   case GenClangOpcodes:
363950b70dcSNandor Licker     EmitClangOpcodes(Records, OS);
364950b70dcSNandor Licker     break;
365bee583fdSPeter Collingbourne   case GenClangSACheckers:
366995e0e13SJakob Stoklund Olesen     EmitClangSACheckers(Records, OS);
367bee583fdSPeter Collingbourne     break;
3683ca956f7SDmitri Gribenko   case GenClangCommentHTMLTags:
3693ca956f7SDmitri Gribenko     EmitClangCommentHTMLTags(Records, OS);
3703ca956f7SDmitri Gribenko     break;
3713ca956f7SDmitri Gribenko   case GenClangCommentHTMLTagsProperties:
3723ca956f7SDmitri Gribenko     EmitClangCommentHTMLTagsProperties(Records, OS);
3733ca956f7SDmitri Gribenko     break;
37428800da1SDmitri Gribenko   case GenClangCommentHTMLNamedCharacterReferences:
37528800da1SDmitri Gribenko     EmitClangCommentHTMLNamedCharacterReferences(Records, OS);
37628800da1SDmitri Gribenko     break;
3777acbf00fSDmitri Gribenko   case GenClangCommentCommandInfo:
3787acbf00fSDmitri Gribenko     EmitClangCommentCommandInfo(Records, OS);
3797acbf00fSDmitri Gribenko     break;
3802e72dd4aSDmitri Gribenko   case GenClangCommentCommandList:
3812e72dd4aSDmitri Gribenko     EmitClangCommentCommandList(Records, OS);
3822e72dd4aSDmitri Gribenko     break;
38379a222fcSSven van Haastregt   case GenClangOpenCLBuiltins:
38479a222fcSSven van Haastregt     EmitClangOpenCLBuiltins(Records, OS);
38579a222fcSSven van Haastregt     break;
3868866793bSSven van Haastregt   case GenClangOpenCLBuiltinTests:
3878866793bSSven van Haastregt     EmitClangOpenCLBuiltinTests(Records, OS);
3888866793bSSven van Haastregt     break;
389454579e4SSam McCall   case GenClangSyntaxNodeList:
390454579e4SSam McCall     EmitClangSyntaxNodeList(Records, OS);
391454579e4SSam McCall     break;
39298aa0671SSam McCall   case GenClangSyntaxNodeClasses:
39398aa0671SSam McCall     EmitClangSyntaxNodeClasses(Records, OS);
39498aa0671SSam McCall     break;
395bee583fdSPeter Collingbourne   case GenArmNeon:
396995e0e13SJakob Stoklund Olesen     EmitNeon(Records, OS);
397bee583fdSPeter Collingbourne     break;
398ce8746d1SAbderrazek Zaafrani   case GenArmFP16:
399ce8746d1SAbderrazek Zaafrani     EmitFP16(Records, OS);
400ce8746d1SAbderrazek Zaafrani     break;
401a6fcf5caSTies Stuij   case GenArmBF16:
402a6fcf5caSTies Stuij     EmitBF16(Records, OS);
403a6fcf5caSTies Stuij     break;
404bee583fdSPeter Collingbourne   case GenArmNeonSema:
405995e0e13SJakob Stoklund Olesen     EmitNeonSema(Records, OS);
406bee583fdSPeter Collingbourne     break;
407bee583fdSPeter Collingbourne   case GenArmNeonTest:
408995e0e13SJakob Stoklund Olesen     EmitNeonTest(Records, OS);
409bee583fdSPeter Collingbourne     break;
41008074cc9SSimon Tatham   case GenArmMveHeader:
41108074cc9SSimon Tatham     EmitMveHeader(Records, OS);
41208074cc9SSimon Tatham     break;
41308074cc9SSimon Tatham   case GenArmMveBuiltinDef:
41408074cc9SSimon Tatham     EmitMveBuiltinDef(Records, OS);
41508074cc9SSimon Tatham     break;
41608074cc9SSimon Tatham   case GenArmMveBuiltinSema:
41708074cc9SSimon Tatham     EmitMveBuiltinSema(Records, OS);
41808074cc9SSimon Tatham     break;
41908074cc9SSimon Tatham   case GenArmMveBuiltinCG:
42008074cc9SSimon Tatham     EmitMveBuiltinCG(Records, OS);
42108074cc9SSimon Tatham     break;
42208074cc9SSimon Tatham   case GenArmMveBuiltinAliases:
42308074cc9SSimon Tatham     EmitMveBuiltinAliases(Records, OS);
42408074cc9SSimon Tatham     break;
4255087ace6SSander de Smalen   case GenArmSveHeader:
4265087ace6SSander de Smalen     EmitSveHeader(Records, OS);
4275087ace6SSander de Smalen     break;
428c5b81466SSander de Smalen   case GenArmSveBuiltins:
429c5b81466SSander de Smalen     EmitSveBuiltins(Records, OS);
430c5b81466SSander de Smalen     break;
431c5b81466SSander de Smalen   case GenArmSveBuiltinCG:
432c5b81466SSander de Smalen     EmitSveBuiltinCG(Records, OS);
433c5b81466SSander de Smalen     break;
434c5b81466SSander de Smalen   case GenArmSveTypeFlags:
435c5b81466SSander de Smalen     EmitSveTypeFlags(Records, OS);
436c5b81466SSander de Smalen     break;
437c8a5b30bSSander de Smalen   case GenArmSveRangeChecks:
438c8a5b30bSSander de Smalen     EmitSveRangeChecks(Records, OS);
439c8a5b30bSSander de Smalen     break;
44047edf5baSMikhail Maltsev   case GenArmCdeHeader:
44147edf5baSMikhail Maltsev     EmitCdeHeader(Records, OS);
44247edf5baSMikhail Maltsev     break;
44347edf5baSMikhail Maltsev   case GenArmCdeBuiltinDef:
44447edf5baSMikhail Maltsev     EmitCdeBuiltinDef(Records, OS);
44547edf5baSMikhail Maltsev     break;
44647edf5baSMikhail Maltsev   case GenArmCdeBuiltinSema:
44747edf5baSMikhail Maltsev     EmitCdeBuiltinSema(Records, OS);
44847edf5baSMikhail Maltsev     break;
44947edf5baSMikhail Maltsev   case GenArmCdeBuiltinCG:
45047edf5baSMikhail Maltsev     EmitCdeBuiltinCG(Records, OS);
45147edf5baSMikhail Maltsev     break;
45247edf5baSMikhail Maltsev   case GenArmCdeBuiltinAliases:
45347edf5baSMikhail Maltsev     EmitCdeBuiltinAliases(Records, OS);
45447edf5baSMikhail Maltsev     break;
455d6a0560bSZakk Chen   case GenRISCVVectorHeader:
456d6a0560bSZakk Chen     EmitRVVHeader(Records, OS);
457d6a0560bSZakk Chen     break;
458d6a0560bSZakk Chen   case GenRISCVVectorBuiltins:
459d6a0560bSZakk Chen     EmitRVVBuiltins(Records, OS);
460d6a0560bSZakk Chen     break;
461d6a0560bSZakk Chen   case GenRISCVVectorBuiltinCG:
462d6a0560bSZakk Chen     EmitRVVBuiltinCG(Records, OS);
463d6a0560bSZakk Chen     break;
464*7a5cb15eSKito Cheng   case GenRISCVVectorBuiltinSema:
465*7a5cb15eSKito Cheng     EmitRVVBuiltinSema(Records, OS);
466*7a5cb15eSKito Cheng     break;
46797dba048SAaron Ballman   case GenAttrDocs:
46897dba048SAaron Ballman     EmitClangAttrDocs(Records, OS);
46997dba048SAaron Ballman     break;
470b6a3b4baSRichard Smith   case GenDiagDocs:
471b6a3b4baSRichard Smith     EmitClangDiagDocs(Records, OS);
472b6a3b4baSRichard Smith     break;
473081ad4d3SRichard Smith   case GenOptDocs:
474081ad4d3SRichard Smith     EmitClangOptDocs(Records, OS);
475081ad4d3SRichard Smith     break;
4761509da08SJohannes Altmanninger   case GenDataCollectors:
4771509da08SJohannes Altmanninger     EmitClangDataCollectors(Records, OS);
4781509da08SJohannes Altmanninger     break;
4799e7bf161SAlex Lorenz   case GenTestPragmaAttributeSupportedAttributes:
4809e7bf161SAlex Lorenz     EmitTestPragmaAttributeSupportedAttributes(Records, OS);
4819e7bf161SAlex Lorenz     break;
482bee583fdSPeter Collingbourne   }
483bee583fdSPeter Collingbourne 
484bee583fdSPeter Collingbourne   return false;
485bee583fdSPeter Collingbourne }
486ab9db510SAlexander Kornienko }
487bee583fdSPeter Collingbourne 
main(int argc,char ** argv)488bee583fdSPeter Collingbourne int main(int argc, char **argv) {
4896f773205SNico Weber   sys::PrintStackTraceOnErrorSignal(argv[0]);
4906f773205SNico Weber   PrettyStackTraceProgram X(argc, argv);
491bee583fdSPeter Collingbourne   cl::ParseCommandLineOptions(argc, argv);
492bee583fdSPeter Collingbourne 
493d3dfa14aSCraig Topper   llvm_shutdown_obj Y;
494d3dfa14aSCraig Topper 
495f85f39dfSSean Silva   return TableGenMain(argv[0], &ClangTableGenMain);
496bee583fdSPeter Collingbourne }
497a6afef7aSKostya Serebryany 
498317e2c49SKostya Serebryany #ifdef __has_feature
499317e2c49SKostya Serebryany #if __has_feature(address_sanitizer)
500317e2c49SKostya Serebryany #include <sanitizer/lsan_interface.h>
501a6afef7aSKostya Serebryany // Disable LeakSanitizer for this binary as it has too many leaks that are not
502317e2c49SKostya Serebryany // very interesting to fix. See compiler-rt/include/sanitizer/lsan_interface.h .
__lsan_is_turned_off()503317e2c49SKostya Serebryany int __lsan_is_turned_off() { return 1; }
504317e2c49SKostya Serebryany #endif  // __has_feature(address_sanitizer)
505317e2c49SKostya Serebryany #endif  // defined(__has_feature)
506