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 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>;
163def CXXParenListInitExpr: StmtNode<Expr>;
164
165// C++ Coroutines expressions
166def CoroutineSuspendExpr : StmtNode<Expr, 1>;
167def CoawaitExpr : StmtNode<CoroutineSuspendExpr>;
168def DependentCoawaitExpr : StmtNode<Expr>;
169def CoyieldExpr : StmtNode<CoroutineSuspendExpr>;
170
171// C++20 Concepts expressions
172def ConceptSpecializationExpr : StmtNode<Expr>;
173def RequiresExpr : StmtNode<Expr>;
174
175// Obj-C Expressions.
176def ObjCStringLiteral : StmtNode<Expr>;
177def ObjCBoxedExpr : StmtNode<Expr>;
178def ObjCArrayLiteral : StmtNode<Expr>;
179def ObjCDictionaryLiteral : StmtNode<Expr>;
180def ObjCEncodeExpr : StmtNode<Expr>;
181def ObjCMessageExpr : StmtNode<Expr>;
182def ObjCSelectorExpr : StmtNode<Expr>;
183def ObjCProtocolExpr : StmtNode<Expr>;
184def ObjCIvarRefExpr : StmtNode<Expr>;
185def ObjCPropertyRefExpr : StmtNode<Expr>;
186def ObjCIsaExpr : StmtNode<Expr>;
187def ObjCIndirectCopyRestoreExpr : StmtNode<Expr>;
188def ObjCBoolLiteralExpr : StmtNode<Expr>;
189def ObjCSubscriptRefExpr : StmtNode<Expr>;
190def ObjCAvailabilityCheckExpr : StmtNode<Expr>;
191
192// Obj-C ARC Expressions.
193def ObjCBridgedCastExpr : StmtNode<ExplicitCastExpr>;
194
195// CUDA Expressions.
196def CUDAKernelCallExpr : StmtNode<CallExpr>;
197
198// Clang Extensions.
199def ShuffleVectorExpr : StmtNode<Expr>;
200def ConvertVectorExpr : StmtNode<Expr>;
201def BlockExpr : StmtNode<Expr>;
202def OpaqueValueExpr : StmtNode<Expr>;
203def TypoExpr : StmtNode<Expr>;
204def RecoveryExpr : StmtNode<Expr>;
205def BuiltinBitCastExpr : StmtNode<ExplicitCastExpr>;
206
207// Microsoft Extensions.
208def MSPropertyRefExpr : StmtNode<Expr>;
209def MSPropertySubscriptExpr : StmtNode<Expr>;
210def CXXUuidofExpr : StmtNode<Expr>;
211def SEHTryStmt : StmtNode<Stmt>;
212def SEHExceptStmt : StmtNode<Stmt>;
213def SEHFinallyStmt : StmtNode<Stmt>;
214def SEHLeaveStmt : StmtNode<Stmt>;
215def MSDependentExistsStmt : StmtNode<Stmt>;
216
217// OpenCL Extensions.
218def AsTypeExpr : StmtNode<Expr>;
219
220// OpenMP Directives.
221def OMPCanonicalLoop : StmtNode<Stmt>;
222def OMPExecutableDirective : StmtNode<Stmt, 1>;
223def OMPMetaDirective : StmtNode<OMPExecutableDirective>;
224def OMPLoopBasedDirective : StmtNode<OMPExecutableDirective, 1>;
225def OMPLoopDirective : StmtNode<OMPLoopBasedDirective, 1>;
226def OMPParallelDirective : StmtNode<OMPExecutableDirective>;
227def OMPSimdDirective : StmtNode<OMPLoopDirective>;
228def OMPLoopTransformationDirective : StmtNode<OMPLoopBasedDirective, 1>;
229def OMPTileDirective : StmtNode<OMPLoopTransformationDirective>;
230def OMPUnrollDirective : StmtNode<OMPLoopTransformationDirective>;
231def OMPForDirective : StmtNode<OMPLoopDirective>;
232def OMPForSimdDirective : StmtNode<OMPLoopDirective>;
233def OMPSectionsDirective : StmtNode<OMPExecutableDirective>;
234def OMPSectionDirective : StmtNode<OMPExecutableDirective>;
235def OMPSingleDirective : StmtNode<OMPExecutableDirective>;
236def OMPMasterDirective : StmtNode<OMPExecutableDirective>;
237def OMPCriticalDirective : StmtNode<OMPExecutableDirective>;
238def OMPParallelForDirective : StmtNode<OMPLoopDirective>;
239def OMPParallelForSimdDirective : StmtNode<OMPLoopDirective>;
240def OMPParallelMasterDirective : StmtNode<OMPExecutableDirective>;
241def OMPParallelSectionsDirective : StmtNode<OMPExecutableDirective>;
242def OMPTaskDirective : StmtNode<OMPExecutableDirective>;
243def OMPTaskyieldDirective : StmtNode<OMPExecutableDirective>;
244def OMPBarrierDirective : StmtNode<OMPExecutableDirective>;
245def OMPTaskwaitDirective : StmtNode<OMPExecutableDirective>;
246def OMPTaskgroupDirective : StmtNode<OMPExecutableDirective>;
247def OMPFlushDirective : StmtNode<OMPExecutableDirective>;
248def OMPDepobjDirective : StmtNode<OMPExecutableDirective>;
249def OMPScanDirective : StmtNode<OMPExecutableDirective>;
250def OMPOrderedDirective : StmtNode<OMPExecutableDirective>;
251def OMPAtomicDirective : StmtNode<OMPExecutableDirective>;
252def OMPTargetDirective : StmtNode<OMPExecutableDirective>;
253def OMPTargetDataDirective : StmtNode<OMPExecutableDirective>;
254def OMPTargetEnterDataDirective : StmtNode<OMPExecutableDirective>;
255def OMPTargetExitDataDirective : StmtNode<OMPExecutableDirective>;
256def OMPTargetParallelDirective : StmtNode<OMPExecutableDirective>;
257def OMPTargetParallelForDirective : StmtNode<OMPExecutableDirective>;
258def OMPTargetUpdateDirective : StmtNode<OMPExecutableDirective>;
259def OMPTeamsDirective : StmtNode<OMPExecutableDirective>;
260def OMPCancellationPointDirective : StmtNode<OMPExecutableDirective>;
261def OMPCancelDirective : StmtNode<OMPExecutableDirective>;
262def OMPScopeDirective : StmtNode<OMPExecutableDirective>;
263def OMPTaskLoopDirective : StmtNode<OMPLoopDirective>;
264def OMPTaskLoopSimdDirective : StmtNode<OMPLoopDirective>;
265def OMPMasterTaskLoopDirective : StmtNode<OMPLoopDirective>;
266def OMPMasterTaskLoopSimdDirective : StmtNode<OMPLoopDirective>;
267def OMPParallelMasterTaskLoopDirective : StmtNode<OMPLoopDirective>;
268def OMPParallelMasterTaskLoopSimdDirective : StmtNode<OMPLoopDirective>;
269def OMPMaskedTaskLoopDirective : StmtNode<OMPLoopDirective>;
270def OMPMaskedTaskLoopSimdDirective : StmtNode<OMPLoopDirective>;
271def OMPParallelMaskedTaskLoopDirective : StmtNode<OMPLoopDirective>;
272def OMPParallelMaskedTaskLoopSimdDirective : StmtNode<OMPLoopDirective>;
273def OMPDistributeDirective : StmtNode<OMPLoopDirective>;
274def OMPDistributeParallelForDirective : StmtNode<OMPLoopDirective>;
275def OMPDistributeParallelForSimdDirective : StmtNode<OMPLoopDirective>;
276def OMPDistributeSimdDirective : StmtNode<OMPLoopDirective>;
277def OMPTargetParallelForSimdDirective : StmtNode<OMPLoopDirective>;
278def OMPTargetSimdDirective : StmtNode<OMPLoopDirective>;
279def OMPTeamsDistributeDirective : StmtNode<OMPLoopDirective>;
280def OMPTeamsDistributeSimdDirective : StmtNode<OMPLoopDirective>;
281def OMPTeamsDistributeParallelForSimdDirective : StmtNode<OMPLoopDirective>;
282def OMPTeamsDistributeParallelForDirective : StmtNode<OMPLoopDirective>;
283def OMPTargetTeamsDirective : StmtNode<OMPExecutableDirective>;
284def OMPTargetTeamsDistributeDirective : StmtNode<OMPLoopDirective>;
285def OMPTargetTeamsDistributeParallelForDirective : StmtNode<OMPLoopDirective>;
286def OMPTargetTeamsDistributeParallelForSimdDirective : StmtNode<OMPLoopDirective>;
287def OMPTargetTeamsDistributeSimdDirective : StmtNode<OMPLoopDirective>;
288def OMPInteropDirective : StmtNode<OMPExecutableDirective>;
289def OMPDispatchDirective : StmtNode<OMPExecutableDirective>;
290def OMPMaskedDirective : StmtNode<OMPExecutableDirective>;
291def OMPParallelMaskedDirective : StmtNode<OMPExecutableDirective>;
292def OMPGenericLoopDirective : StmtNode<OMPLoopDirective>;
293def OMPTeamsGenericLoopDirective : StmtNode<OMPLoopDirective>;
294def OMPTargetTeamsGenericLoopDirective : StmtNode<OMPLoopDirective>;
295def OMPParallelGenericLoopDirective : StmtNode<OMPLoopDirective>;
296def OMPTargetParallelGenericLoopDirective : StmtNode<OMPLoopDirective>;
297def OMPErrorDirective : StmtNode<OMPExecutableDirective>;
298