blob: 3d61a9bf8e6e45c10e8caf2927710b5993fb33ef [file] [log] [blame]
Peter Collingbournebee583f2011-10-06 13:03:08 +00001//===- TableGen.cpp - Top-Level TableGen implementation for Clang ---------===//
2//
Chandler Carruth2946cd72019-01-19 08:50:56 +00003// 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
Peter Collingbournebee583f2011-10-06 13:03:08 +00006//
7//===----------------------------------------------------------------------===//
8//
9// This file contains the main function for Clang's TableGen.
10//
11//===----------------------------------------------------------------------===//
12
Rui Ueyama3f762602019-11-26 10:15:47 +090013#include "TableGenBackends.h" // Declares all backends.
John McCallb6f03a52019-10-25 18:38:07 -070014#include "ASTTableGen.h"
Peter Collingbournebee583f2011-10-06 13:03:08 +000015#include "llvm/Support/CommandLine.h"
16#include "llvm/Support/PrettyStackTrace.h"
17#include "llvm/Support/Signals.h"
18#include "llvm/TableGen/Error.h"
19#include "llvm/TableGen/Main.h"
20#include "llvm/TableGen/Record.h"
Peter Collingbournebee583f2011-10-06 13:03:08 +000021
22using namespace llvm;
Jakob Stoklund Olesen995e0e12012-06-13 05:12:41 +000023using namespace clang;
Peter Collingbournebee583f2011-10-06 13:03:08 +000024
25enum ActionType {
Simon Tathamb092da82018-08-22 09:20:39 +000026 PrintRecords,
27 DumpJSON,
Peter Collingbournebee583f2011-10-06 13:03:08 +000028 GenClangAttrClasses,
Aaron Ballman35db2b32014-01-29 22:13:45 +000029 GenClangAttrParserStringSwitches,
Alex Lorenz9e7bf162017-04-18 14:33:39 +000030 GenClangAttrSubjectMatchRulesParserStringSwitches,
Peter Collingbournebee583f2011-10-06 13:03:08 +000031 GenClangAttrImpl,
32 GenClangAttrList,
Alex Lorenz9e7bf162017-04-18 14:33:39 +000033 GenClangAttrSubjectMatchRuleList,
Peter Collingbournebee583f2011-10-06 13:03:08 +000034 GenClangAttrPCHRead,
35 GenClangAttrPCHWrite,
Aaron Ballman2fbf9942014-03-31 13:14:44 +000036 GenClangAttrHasAttributeImpl,
Michael Han99315932013-01-24 16:46:58 +000037 GenClangAttrSpellingListIndex,
DeLesley Hutchinsc4a82432013-12-30 17:24:36 +000038 GenClangAttrASTVisitor,
DeLesley Hutchinsceec3062012-01-20 22:37:06 +000039 GenClangAttrTemplateInstantiate,
Michael Han4a045172012-03-07 00:12:16 +000040 GenClangAttrParsedAttrList,
Aaron Ballman8ee40b72013-09-09 23:33:17 +000041 GenClangAttrParsedAttrImpl,
Michael Han4a045172012-03-07 00:12:16 +000042 GenClangAttrParsedAttrKinds,
Stephen Kellydb8fac12019-01-11 19:16:01 +000043 GenClangAttrTextNodeDump,
44 GenClangAttrNodeTraverse,
John McCall6404bd22019-12-13 21:52:16 -050045 GenClangBasicReader,
46 GenClangBasicWriter,
Peter Collingbournebee583f2011-10-06 13:03:08 +000047 GenClangDiagsDefs,
48 GenClangDiagGroups,
49 GenClangDiagsIndexName,
Dmitri Gribenkoec925312012-07-06 00:28:32 +000050 GenClangCommentNodes,
Peter Collingbournebee583f2011-10-06 13:03:08 +000051 GenClangDeclNodes,
52 GenClangStmtNodes,
John McCalla82d2fe2019-10-01 23:13:03 +000053 GenClangTypeNodes,
John McCalld505e572019-12-13 21:54:44 -050054 GenClangTypeReader,
55 GenClangTypeWriter,
Nandor Licker950b70d2019-09-13 09:46:16 +000056 GenClangOpcodes,
Peter Collingbournebee583f2011-10-06 13:03:08 +000057 GenClangSACheckers,
Dmitri Gribenko3ca956f2012-08-31 02:21:44 +000058 GenClangCommentHTMLTags,
59 GenClangCommentHTMLTagsProperties,
Dmitri Gribenko28800da2013-01-30 14:29:28 +000060 GenClangCommentHTMLNamedCharacterReferences,
Dmitri Gribenko7acbf002012-09-10 20:32:42 +000061 GenClangCommentCommandInfo,
Dmitri Gribenko2e72dd42013-02-01 20:23:57 +000062 GenClangCommentCommandList,
Sven van Haastregt79a222f2019-06-03 09:39:11 +000063 GenClangOpenCLBuiltins,
Peter Collingbournebee583f2011-10-06 13:03:08 +000064 GenArmNeon,
Abderrazek Zaafranice8746d2018-01-19 23:11:18 +000065 GenArmFP16,
Peter Collingbournebee583f2011-10-06 13:03:08 +000066 GenArmNeonSema,
Aaron Ballman97dba042014-02-17 15:27:10 +000067 GenArmNeonTest,
Simon Tatham08074cc2019-09-02 15:50:50 +010068 GenArmMveHeader,
69 GenArmMveBuiltinDef,
70 GenArmMveBuiltinSema,
71 GenArmMveBuiltinCG,
72 GenArmMveBuiltinAliases,
Sander de Smalen5087ace2020-03-15 14:29:45 +000073 GenArmSveHeader,
Sander de Smalen8b409ea2020-03-16 10:14:05 +000074 GenArmSveBuiltins,
75 GenArmSveCodeGenMap,
Mikhail Maltsev47edf5ba2020-03-10 14:01:42 +000076 GenArmCdeHeader,
77 GenArmCdeBuiltinDef,
78 GenArmCdeBuiltinSema,
79 GenArmCdeBuiltinCG,
80 GenArmCdeBuiltinAliases,
Richard Smithb6a3b4b2016-09-12 05:58:29 +000081 GenAttrDocs,
Richard Smith081ad4d2017-01-24 19:39:46 +000082 GenDiagDocs,
Alex Lorenz9e7bf162017-04-18 14:33:39 +000083 GenOptDocs,
Johannes Altmanninger1509da02017-09-06 13:20:51 +000084 GenDataCollectors,
Alex Lorenz9e7bf162017-04-18 14:33:39 +000085 GenTestPragmaAttributeSupportedAttributes
Peter Collingbournebee583f2011-10-06 13:03:08 +000086};
87
88namespace {
Rafael Espindolad3f8b1f2013-08-16 16:46:27 +000089cl::opt<ActionType> Action(
90 cl::desc("Action to perform:"),
91 cl::values(
Simon Tathamb092da82018-08-22 09:20:39 +000092 clEnumValN(PrintRecords, "print-records",
93 "Print all records to stdout (default)"),
94 clEnumValN(DumpJSON, "dump-json",
95 "Dump all records as machine-readable JSON"),
Rafael Espindolad3f8b1f2013-08-16 16:46:27 +000096 clEnumValN(GenClangAttrClasses, "gen-clang-attr-classes",
97 "Generate clang attribute clases"),
Aaron Ballman35db2b32014-01-29 22:13:45 +000098 clEnumValN(GenClangAttrParserStringSwitches,
99 "gen-clang-attr-parser-string-switches",
100 "Generate all parser-related attribute string switches"),
Alex Lorenz9e7bf162017-04-18 14:33:39 +0000101 clEnumValN(GenClangAttrSubjectMatchRulesParserStringSwitches,
102 "gen-clang-attr-subject-match-rules-parser-string-switches",
103 "Generate all parser-related attribute subject match rule"
104 "string switches"),
Rafael Espindolad3f8b1f2013-08-16 16:46:27 +0000105 clEnumValN(GenClangAttrImpl, "gen-clang-attr-impl",
106 "Generate clang attribute implementations"),
107 clEnumValN(GenClangAttrList, "gen-clang-attr-list",
108 "Generate a clang attribute list"),
Alex Lorenz9e7bf162017-04-18 14:33:39 +0000109 clEnumValN(GenClangAttrSubjectMatchRuleList,
110 "gen-clang-attr-subject-match-rule-list",
111 "Generate a clang attribute subject match rule list"),
Rafael Espindolad3f8b1f2013-08-16 16:46:27 +0000112 clEnumValN(GenClangAttrPCHRead, "gen-clang-attr-pch-read",
113 "Generate clang PCH attribute reader"),
114 clEnumValN(GenClangAttrPCHWrite, "gen-clang-attr-pch-write",
115 "Generate clang PCH attribute writer"),
Aaron Ballman2fbf9942014-03-31 13:14:44 +0000116 clEnumValN(GenClangAttrHasAttributeImpl,
117 "gen-clang-attr-has-attribute-impl",
Rafael Espindolad3f8b1f2013-08-16 16:46:27 +0000118 "Generate a clang attribute spelling list"),
119 clEnumValN(GenClangAttrSpellingListIndex,
120 "gen-clang-attr-spelling-index",
121 "Generate a clang attribute spelling index"),
Alex Lorenz9e7bf162017-04-18 14:33:39 +0000122 clEnumValN(GenClangAttrASTVisitor, "gen-clang-attr-ast-visitor",
DeLesley Hutchinsc4a82432013-12-30 17:24:36 +0000123 "Generate a recursive AST visitor for clang attributes"),
Rafael Espindolad3f8b1f2013-08-16 16:46:27 +0000124 clEnumValN(GenClangAttrTemplateInstantiate,
125 "gen-clang-attr-template-instantiate",
126 "Generate a clang template instantiate code"),
Richard Smith66e71682013-10-24 01:07:54 +0000127 clEnumValN(GenClangAttrParsedAttrList,
128 "gen-clang-attr-parsed-attr-list",
129 "Generate a clang parsed attribute list"),
130 clEnumValN(GenClangAttrParsedAttrImpl,
131 "gen-clang-attr-parsed-attr-impl",
132 "Generate the clang parsed attribute helpers"),
133 clEnumValN(GenClangAttrParsedAttrKinds,
134 "gen-clang-attr-parsed-attr-kinds",
135 "Generate a clang parsed attribute kinds"),
Stephen Kellydb8fac12019-01-11 19:16:01 +0000136 clEnumValN(GenClangAttrTextNodeDump, "gen-clang-attr-text-node-dump",
137 "Generate clang attribute text node dumper"),
138 clEnumValN(GenClangAttrNodeTraverse, "gen-clang-attr-node-traverse",
139 "Generate clang attribute traverser"),
Rafael Espindolad3f8b1f2013-08-16 16:46:27 +0000140 clEnumValN(GenClangDiagsDefs, "gen-clang-diags-defs",
141 "Generate Clang diagnostics definitions"),
142 clEnumValN(GenClangDiagGroups, "gen-clang-diag-groups",
143 "Generate Clang diagnostic groups"),
144 clEnumValN(GenClangDiagsIndexName, "gen-clang-diags-index-name",
145 "Generate Clang diagnostic name index"),
John McCall6404bd22019-12-13 21:52:16 -0500146 clEnumValN(GenClangBasicReader, "gen-clang-basic-reader",
147 "Generate Clang BasicReader classes"),
148 clEnumValN(GenClangBasicWriter, "gen-clang-basic-writer",
149 "Generate Clang BasicWriter classes"),
Rafael Espindolad3f8b1f2013-08-16 16:46:27 +0000150 clEnumValN(GenClangCommentNodes, "gen-clang-comment-nodes",
151 "Generate Clang AST comment nodes"),
152 clEnumValN(GenClangDeclNodes, "gen-clang-decl-nodes",
153 "Generate Clang AST declaration nodes"),
154 clEnumValN(GenClangStmtNodes, "gen-clang-stmt-nodes",
155 "Generate Clang AST statement nodes"),
John McCalla82d2fe2019-10-01 23:13:03 +0000156 clEnumValN(GenClangTypeNodes, "gen-clang-type-nodes",
157 "Generate Clang AST type nodes"),
John McCalld505e572019-12-13 21:54:44 -0500158 clEnumValN(GenClangTypeReader, "gen-clang-type-reader",
159 "Generate Clang AbstractTypeReader class"),
160 clEnumValN(GenClangTypeWriter, "gen-clang-type-writer",
161 "Generate Clang AbstractTypeWriter class"),
Nandor Licker950b70d2019-09-13 09:46:16 +0000162 clEnumValN(GenClangOpcodes, "gen-clang-opcodes",
163 "Generate Clang constexpr interpreter opcodes"),
Rafael Espindolad3f8b1f2013-08-16 16:46:27 +0000164 clEnumValN(GenClangSACheckers, "gen-clang-sa-checkers",
165 "Generate Clang Static Analyzer checkers"),
166 clEnumValN(GenClangCommentHTMLTags, "gen-clang-comment-html-tags",
167 "Generate efficient matchers for HTML tag "
168 "names that are used in documentation comments"),
169 clEnumValN(GenClangCommentHTMLTagsProperties,
170 "gen-clang-comment-html-tags-properties",
171 "Generate efficient matchers for HTML tag "
172 "properties"),
173 clEnumValN(GenClangCommentHTMLNamedCharacterReferences,
174 "gen-clang-comment-html-named-character-references",
175 "Generate function to translate named character "
176 "references to UTF-8 sequences"),
177 clEnumValN(GenClangCommentCommandInfo, "gen-clang-comment-command-info",
178 "Generate command properties for commands that "
179 "are used in documentation comments"),
180 clEnumValN(GenClangCommentCommandList, "gen-clang-comment-command-list",
181 "Generate list of commands that are used in "
182 "documentation comments"),
Sven van Haastregt79a222f2019-06-03 09:39:11 +0000183 clEnumValN(GenClangOpenCLBuiltins, "gen-clang-opencl-builtins",
184 "Generate OpenCL builtin declaration handlers"),
Rafael Espindolad3f8b1f2013-08-16 16:46:27 +0000185 clEnumValN(GenArmNeon, "gen-arm-neon", "Generate arm_neon.h for clang"),
Abderrazek Zaafranice8746d2018-01-19 23:11:18 +0000186 clEnumValN(GenArmFP16, "gen-arm-fp16", "Generate arm_fp16.h for clang"),
Rafael Espindolad3f8b1f2013-08-16 16:46:27 +0000187 clEnumValN(GenArmNeonSema, "gen-arm-neon-sema",
188 "Generate ARM NEON sema support for clang"),
189 clEnumValN(GenArmNeonTest, "gen-arm-neon-test",
190 "Generate ARM NEON tests for clang"),
Sander de Smalen5087ace2020-03-15 14:29:45 +0000191 clEnumValN(GenArmSveHeader, "gen-arm-sve-header",
192 "Generate arm_sve.h for clang"),
Sander de Smalen8b409ea2020-03-16 10:14:05 +0000193 clEnumValN(GenArmSveBuiltins, "gen-arm-sve-builtins",
194 "Generate arm_sve_builtins.inc for clang"),
195 clEnumValN(GenArmSveCodeGenMap, "gen-arm-sve-codegenmap",
196 "Generate arm_sve_codegenmap.inc for clang"),
Simon Tatham08074cc2019-09-02 15:50:50 +0100197 clEnumValN(GenArmMveHeader, "gen-arm-mve-header",
198 "Generate arm_mve.h for clang"),
199 clEnumValN(GenArmMveBuiltinDef, "gen-arm-mve-builtin-def",
200 "Generate ARM MVE builtin definitions for clang"),
201 clEnumValN(GenArmMveBuiltinSema, "gen-arm-mve-builtin-sema",
202 "Generate ARM MVE builtin sema checks for clang"),
203 clEnumValN(GenArmMveBuiltinCG, "gen-arm-mve-builtin-codegen",
204 "Generate ARM MVE builtin code-generator for clang"),
205 clEnumValN(GenArmMveBuiltinAliases, "gen-arm-mve-builtin-aliases",
206 "Generate list of valid ARM MVE builtin aliases for clang"),
Mikhail Maltsev47edf5ba2020-03-10 14:01:42 +0000207 clEnumValN(GenArmCdeHeader, "gen-arm-cde-header",
208 "Generate arm_cde.h for clang"),
209 clEnumValN(GenArmCdeBuiltinDef, "gen-arm-cde-builtin-def",
210 "Generate ARM CDE builtin definitions for clang"),
211 clEnumValN(GenArmCdeBuiltinSema, "gen-arm-cde-builtin-sema",
212 "Generate ARM CDE builtin sema checks for clang"),
213 clEnumValN(GenArmCdeBuiltinCG, "gen-arm-cde-builtin-codegen",
214 "Generate ARM CDE builtin code-generator for clang"),
215 clEnumValN(GenArmCdeBuiltinAliases, "gen-arm-cde-builtin-aliases",
216 "Generate list of valid ARM CDE builtin aliases for clang"),
Aaron Ballman97dba042014-02-17 15:27:10 +0000217 clEnumValN(GenAttrDocs, "gen-attr-docs",
218 "Generate attribute documentation"),
Richard Smithb6a3b4b2016-09-12 05:58:29 +0000219 clEnumValN(GenDiagDocs, "gen-diag-docs",
Richard Smith081ad4d2017-01-24 19:39:46 +0000220 "Generate diagnostic documentation"),
Alex Lorenz9e7bf162017-04-18 14:33:39 +0000221 clEnumValN(GenOptDocs, "gen-opt-docs", "Generate option documentation"),
Johannes Altmanninger1509da02017-09-06 13:20:51 +0000222 clEnumValN(GenDataCollectors, "gen-clang-data-collectors",
223 "Generate data collectors for AST nodes"),
Alex Lorenz9e7bf162017-04-18 14:33:39 +0000224 clEnumValN(GenTestPragmaAttributeSupportedAttributes,
225 "gen-clang-test-pragma-attribute-supported-attributes",
226 "Generate a list of attributes supported by #pragma clang "
227 "attribute for testing purposes")));
Peter Collingbournebee583f2011-10-06 13:03:08 +0000228
Rafael Espindolad3f8b1f2013-08-16 16:46:27 +0000229cl::opt<std::string>
230ClangComponent("clang-component",
231 cl::desc("Only use warnings from specified component"),
232 cl::value_desc("component"), cl::Hidden);
Peter Collingbournebee583f2011-10-06 13:03:08 +0000233
Sean Silvaf85f39d2012-10-03 21:29:30 +0000234bool ClangTableGenMain(raw_ostream &OS, RecordKeeper &Records) {
235 switch (Action) {
Simon Tathamb092da82018-08-22 09:20:39 +0000236 case PrintRecords:
237 OS << Records; // No argument, dump all contents
238 break;
239 case DumpJSON:
240 EmitJSON(Records, OS);
241 break;
Sean Silvaf85f39d2012-10-03 21:29:30 +0000242 case GenClangAttrClasses:
243 EmitClangAttrClass(Records, OS);
244 break;
Aaron Ballman35db2b32014-01-29 22:13:45 +0000245 case GenClangAttrParserStringSwitches:
246 EmitClangAttrParserStringSwitches(Records, OS);
Aaron Ballman4768b312013-11-04 12:55:56 +0000247 break;
Alex Lorenz9e7bf162017-04-18 14:33:39 +0000248 case GenClangAttrSubjectMatchRulesParserStringSwitches:
249 EmitClangAttrSubjectMatchRulesParserStringSwitches(Records, OS);
250 break;
Sean Silvaf85f39d2012-10-03 21:29:30 +0000251 case GenClangAttrImpl:
252 EmitClangAttrImpl(Records, OS);
253 break;
254 case GenClangAttrList:
255 EmitClangAttrList(Records, OS);
256 break;
Alex Lorenz9e7bf162017-04-18 14:33:39 +0000257 case GenClangAttrSubjectMatchRuleList:
258 EmitClangAttrSubjectMatchRuleList(Records, OS);
259 break;
Sean Silvaf85f39d2012-10-03 21:29:30 +0000260 case GenClangAttrPCHRead:
261 EmitClangAttrPCHRead(Records, OS);
262 break;
263 case GenClangAttrPCHWrite:
264 EmitClangAttrPCHWrite(Records, OS);
265 break;
Aaron Ballman2fbf9942014-03-31 13:14:44 +0000266 case GenClangAttrHasAttributeImpl:
267 EmitClangAttrHasAttrImpl(Records, OS);
Sean Silvaf85f39d2012-10-03 21:29:30 +0000268 break;
Michael Han99315932013-01-24 16:46:58 +0000269 case GenClangAttrSpellingListIndex:
270 EmitClangAttrSpellingListIndex(Records, OS);
271 break;
DeLesley Hutchinsc4a82432013-12-30 17:24:36 +0000272 case GenClangAttrASTVisitor:
273 EmitClangAttrASTVisitor(Records, OS);
274 break;
Sean Silvaf85f39d2012-10-03 21:29:30 +0000275 case GenClangAttrTemplateInstantiate:
276 EmitClangAttrTemplateInstantiate(Records, OS);
277 break;
278 case GenClangAttrParsedAttrList:
279 EmitClangAttrParsedAttrList(Records, OS);
280 break;
Aaron Ballman8ee40b72013-09-09 23:33:17 +0000281 case GenClangAttrParsedAttrImpl:
282 EmitClangAttrParsedAttrImpl(Records, OS);
283 break;
Sean Silvaf85f39d2012-10-03 21:29:30 +0000284 case GenClangAttrParsedAttrKinds:
285 EmitClangAttrParsedAttrKinds(Records, OS);
286 break;
Stephen Kellydb8fac12019-01-11 19:16:01 +0000287 case GenClangAttrTextNodeDump:
288 EmitClangAttrTextNodeDump(Records, OS);
289 break;
290 case GenClangAttrNodeTraverse:
291 EmitClangAttrNodeTraverse(Records, OS);
Alexander Kornienko5bc364e2013-01-07 17:53:08 +0000292 break;
Sean Silvaf85f39d2012-10-03 21:29:30 +0000293 case GenClangDiagsDefs:
294 EmitClangDiagsDefs(Records, OS, ClangComponent);
295 break;
296 case GenClangDiagGroups:
297 EmitClangDiagGroups(Records, OS);
298 break;
299 case GenClangDiagsIndexName:
300 EmitClangDiagsIndexName(Records, OS);
301 break;
302 case GenClangCommentNodes:
John McCallbaf91d02019-10-25 16:28:03 -0700303 EmitClangASTNodes(Records, OS, CommentNodeClassName, "");
Sean Silvaf85f39d2012-10-03 21:29:30 +0000304 break;
305 case GenClangDeclNodes:
John McCallbaf91d02019-10-25 16:28:03 -0700306 EmitClangASTNodes(Records, OS, DeclNodeClassName, "Decl");
Sean Silvaf85f39d2012-10-03 21:29:30 +0000307 EmitClangDeclContext(Records, OS);
308 break;
309 case GenClangStmtNodes:
John McCallbaf91d02019-10-25 16:28:03 -0700310 EmitClangASTNodes(Records, OS, StmtNodeClassName, "");
Sean Silvaf85f39d2012-10-03 21:29:30 +0000311 break;
John McCalla82d2fe2019-10-01 23:13:03 +0000312 case GenClangTypeNodes:
313 EmitClangTypeNodes(Records, OS);
314 break;
John McCalld505e572019-12-13 21:54:44 -0500315 case GenClangTypeReader:
316 EmitClangTypeReader(Records, OS);
317 break;
318 case GenClangTypeWriter:
319 EmitClangTypeWriter(Records, OS);
320 break;
John McCall6404bd22019-12-13 21:52:16 -0500321 case GenClangBasicReader:
322 EmitClangBasicReader(Records, OS);
323 break;
324 case GenClangBasicWriter:
325 EmitClangBasicWriter(Records, OS);
326 break;
Nandor Licker950b70d2019-09-13 09:46:16 +0000327 case GenClangOpcodes:
328 EmitClangOpcodes(Records, OS);
329 break;
Sean Silvaf85f39d2012-10-03 21:29:30 +0000330 case GenClangSACheckers:
331 EmitClangSACheckers(Records, OS);
332 break;
333 case GenClangCommentHTMLTags:
334 EmitClangCommentHTMLTags(Records, OS);
335 break;
336 case GenClangCommentHTMLTagsProperties:
337 EmitClangCommentHTMLTagsProperties(Records, OS);
338 break;
Dmitri Gribenko28800da2013-01-30 14:29:28 +0000339 case GenClangCommentHTMLNamedCharacterReferences:
340 EmitClangCommentHTMLNamedCharacterReferences(Records, OS);
341 break;
Sean Silvaf85f39d2012-10-03 21:29:30 +0000342 case GenClangCommentCommandInfo:
343 EmitClangCommentCommandInfo(Records, OS);
344 break;
Dmitri Gribenko2e72dd42013-02-01 20:23:57 +0000345 case GenClangCommentCommandList:
346 EmitClangCommentCommandList(Records, OS);
347 break;
Sven van Haastregt79a222f2019-06-03 09:39:11 +0000348 case GenClangOpenCLBuiltins:
349 EmitClangOpenCLBuiltins(Records, OS);
350 break;
Sean Silvaf85f39d2012-10-03 21:29:30 +0000351 case GenArmNeon:
352 EmitNeon(Records, OS);
353 break;
Abderrazek Zaafranice8746d2018-01-19 23:11:18 +0000354 case GenArmFP16:
355 EmitFP16(Records, OS);
356 break;
Sean Silvaf85f39d2012-10-03 21:29:30 +0000357 case GenArmNeonSema:
358 EmitNeonSema(Records, OS);
359 break;
360 case GenArmNeonTest:
361 EmitNeonTest(Records, OS);
362 break;
Simon Tatham08074cc2019-09-02 15:50:50 +0100363 case GenArmMveHeader:
364 EmitMveHeader(Records, OS);
365 break;
366 case GenArmMveBuiltinDef:
367 EmitMveBuiltinDef(Records, OS);
368 break;
369 case GenArmMveBuiltinSema:
370 EmitMveBuiltinSema(Records, OS);
371 break;
372 case GenArmMveBuiltinCG:
373 EmitMveBuiltinCG(Records, OS);
374 break;
375 case GenArmMveBuiltinAliases:
376 EmitMveBuiltinAliases(Records, OS);
377 break;
Sander de Smalen5087ace2020-03-15 14:29:45 +0000378 case GenArmSveHeader:
379 EmitSveHeader(Records, OS);
380 break;
Sander de Smalen8b409ea2020-03-16 10:14:05 +0000381 case GenArmSveBuiltins:
382 EmitSveBuiltins(Records, OS);
383 break;
384 case GenArmSveCodeGenMap:
385 EmitSveCodeGenMap(Records, OS);
386 break;
Mikhail Maltsev47edf5ba2020-03-10 14:01:42 +0000387 case GenArmCdeHeader:
388 EmitCdeHeader(Records, OS);
389 break;
390 case GenArmCdeBuiltinDef:
391 EmitCdeBuiltinDef(Records, OS);
392 break;
393 case GenArmCdeBuiltinSema:
394 EmitCdeBuiltinSema(Records, OS);
395 break;
396 case GenArmCdeBuiltinCG:
397 EmitCdeBuiltinCG(Records, OS);
398 break;
399 case GenArmCdeBuiltinAliases:
400 EmitCdeBuiltinAliases(Records, OS);
401 break;
Aaron Ballman97dba042014-02-17 15:27:10 +0000402 case GenAttrDocs:
403 EmitClangAttrDocs(Records, OS);
404 break;
Richard Smithb6a3b4b2016-09-12 05:58:29 +0000405 case GenDiagDocs:
406 EmitClangDiagDocs(Records, OS);
407 break;
Richard Smith081ad4d2017-01-24 19:39:46 +0000408 case GenOptDocs:
409 EmitClangOptDocs(Records, OS);
410 break;
Johannes Altmanninger1509da02017-09-06 13:20:51 +0000411 case GenDataCollectors:
412 EmitClangDataCollectors(Records, OS);
413 break;
Alex Lorenz9e7bf162017-04-18 14:33:39 +0000414 case GenTestPragmaAttributeSupportedAttributes:
415 EmitTestPragmaAttributeSupportedAttributes(Records, OS);
416 break;
Peter Collingbournebee583f2011-10-06 13:03:08 +0000417 }
Sean Silvaf85f39d2012-10-03 21:29:30 +0000418
419 return false;
420}
Alexander Kornienkoab9db512015-06-22 23:07:51 +0000421}
Peter Collingbournebee583f2011-10-06 13:03:08 +0000422
423int main(int argc, char **argv) {
Nico Weber6f773202019-11-25 21:06:56 -0500424 sys::PrintStackTraceOnErrorSignal(argv[0]);
425 PrettyStackTraceProgram X(argc, argv);
Peter Collingbournebee583f2011-10-06 13:03:08 +0000426 cl::ParseCommandLineOptions(argc, argv);
427
Craig Topperd3dfa14a2016-01-04 04:51:46 +0000428 llvm_shutdown_obj Y;
429
Sean Silvaf85f39d2012-10-03 21:29:30 +0000430 return TableGenMain(argv[0], &ClangTableGenMain);
Peter Collingbournebee583f2011-10-06 13:03:08 +0000431}
Kostya Serebryanya6afef72014-01-10 08:05:42 +0000432
Kostya Serebryany317e2c42014-01-15 07:59:37 +0000433#ifdef __has_feature
434#if __has_feature(address_sanitizer)
435#include <sanitizer/lsan_interface.h>
Kostya Serebryanya6afef72014-01-10 08:05:42 +0000436// Disable LeakSanitizer for this binary as it has too many leaks that are not
Kostya Serebryany317e2c42014-01-15 07:59:37 +0000437// very interesting to fix. See compiler-rt/include/sanitizer/lsan_interface.h .
438int __lsan_is_turned_off() { return 1; }
439#endif // __has_feature(address_sanitizer)
440#endif // defined(__has_feature)