1include "clang/Basic/ASTNode.td"
2
3class StmtNode<StmtNode base, bit abstract = 0> : ASTNode, AttrSubject {
4	StmtNode Base = base;
5  bit Abstract = abstract;
6}
7
8// Statements
9def Stmt : StmtNode<?, 1>;
10def NullStmt : StmtNode<Stmt>;
11def CompoundStmt : StmtNode<Stmt>;
12def IfStmt : StmtNode<Stmt>;
13def SwitchStmt : StmtNode<Stmt>;
14def WhileStmt : StmtNode<Stmt>;
15def DoStmt : StmtNode<Stmt>;
16def ForStmt : StmtNode<Stmt>;
17def GotoStmt : StmtNode<Stmt>;
18def IndirectGotoStmt : StmtNode<Stmt>;
19def ContinueStmt : StmtNode<Stmt>;
20def BreakStmt : StmtNode<Stmt>;
21def ReturnStmt : StmtNode<Stmt>;
22def DeclStmt  : StmtNode<Stmt>;
23def SwitchCase : StmtNode<Stmt, 1>;
24def CaseStmt : StmtNode<SwitchCase>;
25def DefaultStmt : StmtNode<SwitchCase>;
26def CapturedStmt : StmtNode<Stmt>;
27
28// Statements that might produce a value (for example, as the last non-null
29// statement in a GNU statement-expression).
30def ValueStmt : StmtNode<Stmt, 1>;
31def LabelStmt : StmtNode<ValueStmt>;
32def AttributedStmt : StmtNode<ValueStmt>;
33
34// Asm statements
35def AsmStmt : StmtNode<Stmt, 1>;
36def GCCAsmStmt : StmtNode<AsmStmt>;
37def MSAsmStmt : StmtNode<AsmStmt>;
38
39// Obj-C statements
40def ObjCAtTryStmt : StmtNode<Stmt>;
41def ObjCAtCatchStmt : StmtNode<Stmt>;
42def ObjCAtFinallyStmt : StmtNode<Stmt>;
43def ObjCAtThrowStmt : StmtNode<Stmt>;
44def ObjCAtSynchronizedStmt : StmtNode<Stmt>;
45def ObjCForCollectionStmt : StmtNode<Stmt>;
46def ObjCAutoreleasePoolStmt : StmtNode<Stmt>;
47
48// C++ statements
49def CXXCatchStmt : StmtNode<Stmt>;
50def CXXTryStmt : StmtNode<Stmt>;
51def CXXForRangeStmt : StmtNode<Stmt>;
52
53// C++ Coroutines TS statements
54def CoroutineBodyStmt : StmtNode<Stmt>;
55def CoreturnStmt : StmtNode<Stmt>;
56
57// Expressions
58def Expr : StmtNode<ValueStmt, 1>;
59def PredefinedExpr : StmtNode<Expr>;
60def SYCLUniqueStableNameExpr : StmtNode<Expr>;
61def DeclRefExpr : StmtNode<Expr>;
62def IntegerLiteral : StmtNode<Expr>;
63def FixedPointLiteral : StmtNode<Expr>;
64def FloatingLiteral : StmtNode<Expr>;
65def ImaginaryLiteral : StmtNode<Expr>;
66def StringLiteral : StmtNode<Expr>;
67def CharacterLiteral : StmtNode<Expr>;
68def ParenExpr : StmtNode<Expr>;
69def UnaryOperator : StmtNode<Expr>;
70def OffsetOfExpr : StmtNode<Expr>;
71def UnaryExprOrTypeTraitExpr : StmtNode<Expr>;
72def ArraySubscriptExpr : StmtNode<Expr>;
73def MatrixSubscriptExpr : StmtNode<Expr>;
74def OMPArraySectionExpr : StmtNode<Expr>;
75def OMPIteratorExpr : StmtNode<Expr>;
76def CallExpr : StmtNode<Expr>;
77def MemberExpr : StmtNode<Expr>;
78def CastExpr : StmtNode<Expr, 1>;
79def BinaryOperator : StmtNode<Expr>;
80def CompoundAssignOperator : StmtNode<BinaryOperator>;
81def AbstractConditionalOperator : StmtNode<Expr, 1>;
82def ConditionalOperator : StmtNode<AbstractConditionalOperator>;
83def BinaryConditionalOperator : StmtNode<AbstractConditionalOperator>;
84def ImplicitCastExpr : StmtNode<CastExpr>;
85def ExplicitCastExpr : StmtNode<CastExpr, 1>;
86def CStyleCastExpr : StmtNode<ExplicitCastExpr>;
87def OMPArrayShapingExpr : StmtNode<Expr>;
88def CompoundLiteralExpr : StmtNode<Expr>;
89def ExtVectorElementExpr : StmtNode<Expr>;
90def InitListExpr : StmtNode<Expr>;
91def DesignatedInitExpr : StmtNode<Expr>;
92def DesignatedInitUpdateExpr : StmtNode<Expr>;
93def ImplicitValueInitExpr : StmtNode<Expr>;
94def NoInitExpr : StmtNode<Expr>;
95def ArrayInitLoopExpr : StmtNode<Expr>;
96def ArrayInitIndexExpr : StmtNode<Expr>;
97def ParenListExpr : StmtNode<Expr>;
98def VAArgExpr : StmtNode<Expr>;
99def GenericSelectionExpr : StmtNode<Expr>;
100def PseudoObjectExpr : StmtNode<Expr>;
101def SourceLocExpr : StmtNode<Expr>;
102
103// Wrapper expressions
104def FullExpr : StmtNode<Expr, 1>;
105def ConstantExpr : StmtNode<FullExpr>;
106
107// Atomic expressions
108def AtomicExpr : StmtNode<Expr>;
109
110// GNU Extensions.
111def AddrLabelExpr : StmtNode<Expr>;
112def StmtExpr : StmtNode<Expr>;
113def ChooseExpr : StmtNode<Expr>;
114def GNUNullExpr : StmtNode<Expr>;
115
116// C++ Expressions.
117def CXXOperatorCallExpr : StmtNode<CallExpr>;
118def CXXMemberCallExpr : StmtNode<CallExpr>;
119def CXXRewrittenBinaryOperator : StmtNode<Expr>;
120def CXXNamedCastExpr : StmtNode<ExplicitCastExpr, 1>;
121def CXXStaticCastExpr : StmtNode<CXXNamedCastExpr>;
122def CXXDynamicCastExpr : StmtNode<CXXNamedCastExpr>;
123def CXXReinterpretCastExpr : StmtNode<CXXNamedCastExpr>;
124def CXXConstCastExpr : StmtNode<CXXNamedCastExpr>;
125def CXXAddrspaceCastExpr : StmtNode<CXXNamedCastExpr>;
126def CXXFunctionalCastExpr : StmtNode<ExplicitCastExpr>;
127def CXXTypeidExpr : StmtNode<Expr>;
128def UserDefinedLiteral : StmtNode<CallExpr>;
129def CXXBoolLiteralExpr : StmtNode<Expr>;
130def CXXNullPtrLiteralExpr : StmtNode<Expr>;
131def CXXThisExpr : StmtNode<Expr>;
132def CXXThrowExpr : StmtNode<Expr>;
133def CXXDefaultArgExpr : StmtNode<Expr>;
134def CXXDefaultInitExpr : StmtNode<Expr>;
135def CXXScalarValueInitExpr : StmtNode<Expr>;
136def CXXStdInitializerListExpr : StmtNode<Expr>;
137def CXXNewExpr : StmtNode<Expr>;
138def CXXDeleteExpr : StmtNode<Expr>;
139def CXXPseudoDestructorExpr : StmtNode<Expr>;
140def TypeTraitExpr : StmtNode<Expr>;
141def ArrayTypeTraitExpr : StmtNode<Expr>;
142def ExpressionTraitExpr : StmtNode<Expr>;
143def DependentScopeDeclRefExpr : StmtNode<Expr>;
144def CXXConstructExpr : StmtNode<Expr>;
145def CXXInheritedCtorInitExpr : StmtNode<Expr>;
146def CXXBindTemporaryExpr : StmtNode<Expr>;
147def ExprWithCleanups : StmtNode<FullExpr>;
148def CXXTemporaryObjectExpr : StmtNode<CXXConstructExpr>;
149def CXXUnresolvedConstructExpr : StmtNode<Expr>;
150def CXXDependentScopeMemberExpr : StmtNode<Expr>;
151def OverloadExpr : StmtNode<Expr, 1>;
152def UnresolvedLookupExpr : StmtNode<OverloadExpr>;
153def UnresolvedMemberExpr : StmtNode<OverloadExpr>;
154def CXXNoexceptExpr : StmtNode<Expr>;
155def PackExpansionExpr : StmtNode<Expr>;
156def SizeOfPackExpr : StmtNode<Expr>;
157def SubstNonTypeTemplateParmExpr : StmtNode<Expr>;
158def SubstNonTypeTemplateParmPackExpr : StmtNode<Expr>;
159def FunctionParmPackExpr : StmtNode<Expr>;
160def MaterializeTemporaryExpr : StmtNode<Expr>;
161def LambdaExpr : StmtNode<Expr>;
162def CXXFoldExpr : StmtNode<Expr>;
163
164// C++ Coroutines TS expressions
165def CoroutineSuspendExpr : StmtNode<Expr, 1>;
166def CoawaitExpr : StmtNode<CoroutineSuspendExpr>;
167def DependentCoawaitExpr : StmtNode<Expr>;
168def CoyieldExpr : StmtNode<CoroutineSuspendExpr>;
169
170// C++20 Concepts expressions
171def ConceptSpecializationExpr : StmtNode<Expr>;
172def RequiresExpr : StmtNode<Expr>;
173
174// Obj-C Expressions.
175def ObjCStringLiteral : StmtNode<Expr>;
176def ObjCBoxedExpr : StmtNode<Expr>;
177def ObjCArrayLiteral : StmtNode<Expr>;
178def ObjCDictionaryLiteral : StmtNode<Expr>;
179def ObjCEncodeExpr : StmtNode<Expr>;
180def ObjCMessageExpr : StmtNode<Expr>;
181def ObjCSelectorExpr : StmtNode<Expr>;
182def ObjCProtocolExpr : StmtNode<Expr>;
183def ObjCIvarRefExpr : StmtNode<Expr>;
184def ObjCPropertyRefExpr : StmtNode<Expr>;
185def ObjCIsaExpr : StmtNode<Expr>;
186def ObjCIndirectCopyRestoreExpr : StmtNode<Expr>;
187def ObjCBoolLiteralExpr : StmtNode<Expr>;
188def ObjCSubscriptRefExpr : StmtNode<Expr>;
189def ObjCAvailabilityCheckExpr : StmtNode<Expr>;
190
191// Obj-C ARC Expressions.
192def ObjCBridgedCastExpr : StmtNode<ExplicitCastExpr>;
193
194// CUDA Expressions.
195def CUDAKernelCallExpr : StmtNode<CallExpr>;
196
197// Clang Extensions.
198def ShuffleVectorExpr : StmtNode<Expr>;
199def ConvertVectorExpr : StmtNode<Expr>;
200def BlockExpr : StmtNode<Expr>;
201def OpaqueValueExpr : StmtNode<Expr>;
202def TypoExpr : StmtNode<Expr>;
203def RecoveryExpr : StmtNode<Expr>;
204def BuiltinBitCastExpr : StmtNode<ExplicitCastExpr>;
205
206// Microsoft Extensions.
207def MSPropertyRefExpr : StmtNode<Expr>;
208def MSPropertySubscriptExpr : StmtNode<Expr>;
209def CXXUuidofExpr : StmtNode<Expr>;
210def SEHTryStmt : StmtNode<Stmt>;
211def SEHExceptStmt : StmtNode<Stmt>;
212def SEHFinallyStmt : StmtNode<Stmt>;
213def SEHLeaveStmt : StmtNode<Stmt>;
214def MSDependentExistsStmt : StmtNode<Stmt>;
215
216// OpenCL Extensions.
217def AsTypeExpr : StmtNode<Expr>;
218
219// OpenMP Directives.
220def OMPCanonicalLoop : StmtNode<Stmt>;
221def OMPExecutableDirective : StmtNode<Stmt, 1>;
222def OMPMetaDirective : StmtNode<OMPExecutableDirective>;
223def OMPLoopBasedDirective : StmtNode<OMPExecutableDirective, 1>;
224def OMPLoopDirective : StmtNode<OMPLoopBasedDirective, 1>;
225def OMPParallelDirective : StmtNode<OMPExecutableDirective>;
226def OMPSimdDirective : StmtNode<OMPLoopDirective>;
227def OMPLoopTransformationDirective : StmtNode<OMPLoopBasedDirective, 1>;
228def OMPTileDirective : StmtNode<OMPLoopTransformationDirective>;
229def OMPUnrollDirective : StmtNode<OMPLoopTransformationDirective>;
230def OMPForDirective : StmtNode<OMPLoopDirective>;
231def OMPForSimdDirective : StmtNode<OMPLoopDirective>;
232def OMPSectionsDirective : StmtNode<OMPExecutableDirective>;
233def OMPSectionDirective : StmtNode<OMPExecutableDirective>;
234def OMPSingleDirective : StmtNode<OMPExecutableDirective>;
235def OMPMasterDirective : StmtNode<OMPExecutableDirective>;
236def OMPCriticalDirective : StmtNode<OMPExecutableDirective>;
237def OMPParallelForDirective : StmtNode<OMPLoopDirective>;
238def OMPParallelForSimdDirective : StmtNode<OMPLoopDirective>;
239def OMPParallelMasterDirective : StmtNode<OMPExecutableDirective>;
240def OMPParallelSectionsDirective : StmtNode<OMPExecutableDirective>;
241def OMPTaskDirective : StmtNode<OMPExecutableDirective>;
242def OMPTaskyieldDirective : StmtNode<OMPExecutableDirective>;
243def OMPBarrierDirective : StmtNode<OMPExecutableDirective>;
244def OMPTaskwaitDirective : StmtNode<OMPExecutableDirective>;
245def OMPTaskgroupDirective : StmtNode<OMPExecutableDirective>;
246def OMPFlushDirective : StmtNode<OMPExecutableDirective>;
247def OMPDepobjDirective : StmtNode<OMPExecutableDirective>;
248def OMPScanDirective : StmtNode<OMPExecutableDirective>;
249def OMPOrderedDirective : StmtNode<OMPExecutableDirective>;
250def OMPAtomicDirective : StmtNode<OMPExecutableDirective>;
251def OMPTargetDirective : StmtNode<OMPExecutableDirective>;
252def OMPTargetDataDirective : StmtNode<OMPExecutableDirective>;
253def OMPTargetEnterDataDirective : StmtNode<OMPExecutableDirective>;
254def OMPTargetExitDataDirective : StmtNode<OMPExecutableDirective>;
255def OMPTargetParallelDirective : StmtNode<OMPExecutableDirective>;
256def OMPTargetParallelForDirective : StmtNode<OMPExecutableDirective>;
257def OMPTargetUpdateDirective : StmtNode<OMPExecutableDirective>;
258def OMPTeamsDirective : StmtNode<OMPExecutableDirective>;
259def OMPCancellationPointDirective : StmtNode<OMPExecutableDirective>;
260def OMPCancelDirective : StmtNode<OMPExecutableDirective>;
261def OMPTaskLoopDirective : StmtNode<OMPLoopDirective>;
262def OMPTaskLoopSimdDirective : StmtNode<OMPLoopDirective>;
263def OMPMasterTaskLoopDirective : StmtNode<OMPLoopDirective>;
264def OMPMasterTaskLoopSimdDirective : StmtNode<OMPLoopDirective>;
265def OMPParallelMasterTaskLoopDirective : StmtNode<OMPLoopDirective>;
266def OMPParallelMasterTaskLoopSimdDirective : StmtNode<OMPLoopDirective>;
267def OMPMaskedTaskLoopDirective : StmtNode<OMPLoopDirective>;
268def OMPMaskedTaskLoopSimdDirective : StmtNode<OMPLoopDirective>;
269def OMPParallelMaskedTaskLoopDirective : StmtNode<OMPLoopDirective>;
270def OMPParallelMaskedTaskLoopSimdDirective : StmtNode<OMPLoopDirective>;
271def OMPDistributeDirective : StmtNode<OMPLoopDirective>;
272def OMPDistributeParallelForDirective : StmtNode<OMPLoopDirective>;
273def OMPDistributeParallelForSimdDirective : StmtNode<OMPLoopDirective>;
274def OMPDistributeSimdDirective : StmtNode<OMPLoopDirective>;
275def OMPTargetParallelForSimdDirective : StmtNode<OMPLoopDirective>;
276def OMPTargetSimdDirective : StmtNode<OMPLoopDirective>;
277def OMPTeamsDistributeDirective : StmtNode<OMPLoopDirective>;
278def OMPTeamsDistributeSimdDirective : StmtNode<OMPLoopDirective>;
279def OMPTeamsDistributeParallelForSimdDirective : StmtNode<OMPLoopDirective>;
280def OMPTeamsDistributeParallelForDirective : StmtNode<OMPLoopDirective>;
281def OMPTargetTeamsDirective : StmtNode<OMPExecutableDirective>;
282def OMPTargetTeamsDistributeDirective : StmtNode<OMPLoopDirective>;
283def OMPTargetTeamsDistributeParallelForDirective : StmtNode<OMPLoopDirective>;
284def OMPTargetTeamsDistributeParallelForSimdDirective : StmtNode<OMPLoopDirective>;
285def OMPTargetTeamsDistributeSimdDirective : StmtNode<OMPLoopDirective>;
286def OMPInteropDirective : StmtNode<OMPExecutableDirective>;
287def OMPDispatchDirective : StmtNode<OMPExecutableDirective>;
288def OMPMaskedDirective : StmtNode<OMPExecutableDirective>;
289def OMPParallelMaskedDirective : StmtNode<OMPExecutableDirective>;
290def OMPGenericLoopDirective : StmtNode<OMPLoopDirective>;
291def OMPTeamsGenericLoopDirective : StmtNode<OMPLoopDirective>;
292def OMPTargetTeamsGenericLoopDirective : StmtNode<OMPLoopDirective>;
293def OMPParallelGenericLoopDirective : StmtNode<OMPLoopDirective>;
294def OMPTargetParallelGenericLoopDirective : StmtNode<OMPLoopDirective>;
295