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 DeclRefExpr : StmtNode<Expr>;
61def IntegerLiteral : StmtNode<Expr>;
62def FixedPointLiteral : StmtNode<Expr>;
63def FloatingLiteral : StmtNode<Expr>;
64def ImaginaryLiteral : StmtNode<Expr>;
65def StringLiteral : StmtNode<Expr>;
66def CharacterLiteral : StmtNode<Expr>;
67def ParenExpr : StmtNode<Expr>;
68def UnaryOperator : StmtNode<Expr>;
69def OffsetOfExpr : StmtNode<Expr>;
70def UnaryExprOrTypeTraitExpr : StmtNode<Expr>;
71def ArraySubscriptExpr : StmtNode<Expr>;
72def MatrixSubscriptExpr : StmtNode<Expr>;
73def OMPArraySectionExpr : StmtNode<Expr>;
74def OMPIteratorExpr : StmtNode<Expr>;
75def CallExpr : StmtNode<Expr>;
76def MemberExpr : StmtNode<Expr>;
77def CastExpr : StmtNode<Expr, 1>;
78def BinaryOperator : StmtNode<Expr>;
79def CompoundAssignOperator : StmtNode<BinaryOperator>;
80def AbstractConditionalOperator : StmtNode<Expr, 1>;
81def ConditionalOperator : StmtNode<AbstractConditionalOperator>;
82def BinaryConditionalOperator : StmtNode<AbstractConditionalOperator>;
83def ImplicitCastExpr : StmtNode<CastExpr>;
84def ExplicitCastExpr : StmtNode<CastExpr, 1>;
85def CStyleCastExpr : StmtNode<ExplicitCastExpr>;
86def OMPArrayShapingExpr : StmtNode<Expr>;
87def CompoundLiteralExpr : StmtNode<Expr>;
88def ExtVectorElementExpr : StmtNode<Expr>;
89def InitListExpr : StmtNode<Expr>;
90def DesignatedInitExpr : StmtNode<Expr>;
91def DesignatedInitUpdateExpr : StmtNode<Expr>;
92def ImplicitValueInitExpr : StmtNode<Expr>;
93def NoInitExpr : StmtNode<Expr>;
94def ArrayInitLoopExpr : StmtNode<Expr>;
95def ArrayInitIndexExpr : StmtNode<Expr>;
96def ParenListExpr : StmtNode<Expr>;
97def VAArgExpr : StmtNode<Expr>;
98def GenericSelectionExpr : StmtNode<Expr>;
99def PseudoObjectExpr : StmtNode<Expr>;
100def SourceLocExpr : StmtNode<Expr>;
101
102// Wrapper expressions
103def FullExpr : StmtNode<Expr, 1>;
104def ConstantExpr : StmtNode<FullExpr>;
105
106// Atomic expressions
107def AtomicExpr : StmtNode<Expr>;
108
109// GNU Extensions.
110def AddrLabelExpr : StmtNode<Expr>;
111def StmtExpr : StmtNode<Expr>;
112def ChooseExpr : StmtNode<Expr>;
113def GNUNullExpr : StmtNode<Expr>;
114
115// C++ Expressions.
116def CXXOperatorCallExpr : StmtNode<CallExpr>;
117def CXXMemberCallExpr : StmtNode<CallExpr>;
118def CXXRewrittenBinaryOperator : StmtNode<Expr>;
119def CXXNamedCastExpr : StmtNode<ExplicitCastExpr, 1>;
120def CXXStaticCastExpr : StmtNode<CXXNamedCastExpr>;
121def CXXDynamicCastExpr : StmtNode<CXXNamedCastExpr>;
122def CXXReinterpretCastExpr : StmtNode<CXXNamedCastExpr>;
123def CXXConstCastExpr : StmtNode<CXXNamedCastExpr>;
124def CXXAddrspaceCastExpr : StmtNode<CXXNamedCastExpr>;
125def CXXFunctionalCastExpr : StmtNode<ExplicitCastExpr>;
126def CXXTypeidExpr : StmtNode<Expr>;
127def UserDefinedLiteral : StmtNode<CallExpr>;
128def CXXBoolLiteralExpr : StmtNode<Expr>;
129def CXXNullPtrLiteralExpr : StmtNode<Expr>;
130def CXXThisExpr : StmtNode<Expr>;
131def CXXThrowExpr : StmtNode<Expr>;
132def CXXDefaultArgExpr : StmtNode<Expr>;
133def CXXDefaultInitExpr : StmtNode<Expr>;
134def CXXScalarValueInitExpr : StmtNode<Expr>;
135def CXXStdInitializerListExpr : StmtNode<Expr>;
136def CXXNewExpr : StmtNode<Expr>;
137def CXXDeleteExpr : StmtNode<Expr>;
138def CXXPseudoDestructorExpr : StmtNode<Expr>;
139def TypeTraitExpr : StmtNode<Expr>;
140def ArrayTypeTraitExpr : StmtNode<Expr>;
141def ExpressionTraitExpr : StmtNode<Expr>;
142def DependentScopeDeclRefExpr : StmtNode<Expr>;
143def CXXConstructExpr : StmtNode<Expr>;
144def CXXInheritedCtorInitExpr : StmtNode<Expr>;
145def CXXBindTemporaryExpr : StmtNode<Expr>;
146def ExprWithCleanups : StmtNode<FullExpr>;
147def CXXTemporaryObjectExpr : StmtNode<CXXConstructExpr>;
148def CXXUnresolvedConstructExpr : StmtNode<Expr>;
149def CXXDependentScopeMemberExpr : StmtNode<Expr>;
150def OverloadExpr : StmtNode<Expr, 1>;
151def UnresolvedLookupExpr : StmtNode<OverloadExpr>;
152def UnresolvedMemberExpr : StmtNode<OverloadExpr>;
153def CXXNoexceptExpr : StmtNode<Expr>;
154def PackExpansionExpr : StmtNode<Expr>;
155def SizeOfPackExpr : StmtNode<Expr>;
156def SubstNonTypeTemplateParmExpr : StmtNode<Expr>;
157def SubstNonTypeTemplateParmPackExpr : StmtNode<Expr>;
158def FunctionParmPackExpr : StmtNode<Expr>;
159def MaterializeTemporaryExpr : StmtNode<Expr>;
160def LambdaExpr : StmtNode<Expr>;
161def CXXFoldExpr : StmtNode<Expr>;
162
163// C++ Coroutines TS expressions
164def CoroutineSuspendExpr : StmtNode<Expr, 1>;
165def CoawaitExpr : StmtNode<CoroutineSuspendExpr>;
166def DependentCoawaitExpr : StmtNode<Expr>;
167def CoyieldExpr : StmtNode<CoroutineSuspendExpr>;
168
169// C++20 Concepts expressions
170def ConceptSpecializationExpr : StmtNode<Expr>;
171def RequiresExpr : StmtNode<Expr>;
172
173// Obj-C Expressions.
174def ObjCStringLiteral : StmtNode<Expr>;
175def ObjCBoxedExpr : StmtNode<Expr>;
176def ObjCArrayLiteral : StmtNode<Expr>;
177def ObjCDictionaryLiteral : StmtNode<Expr>;
178def ObjCEncodeExpr : StmtNode<Expr>;
179def ObjCMessageExpr : StmtNode<Expr>;
180def ObjCSelectorExpr : StmtNode<Expr>;
181def ObjCProtocolExpr : StmtNode<Expr>;
182def ObjCIvarRefExpr : StmtNode<Expr>;
183def ObjCPropertyRefExpr : StmtNode<Expr>;
184def ObjCIsaExpr : StmtNode<Expr>;
185def ObjCIndirectCopyRestoreExpr : StmtNode<Expr>;
186def ObjCBoolLiteralExpr : StmtNode<Expr>;
187def ObjCSubscriptRefExpr : StmtNode<Expr>;
188def ObjCAvailabilityCheckExpr : StmtNode<Expr>;
189
190// Obj-C ARC Expressions.
191def ObjCBridgedCastExpr : StmtNode<ExplicitCastExpr>;
192
193// CUDA Expressions.
194def CUDAKernelCallExpr : StmtNode<CallExpr>;
195
196// Clang Extensions.
197def ShuffleVectorExpr : StmtNode<Expr>;
198def ConvertVectorExpr : StmtNode<Expr>;
199def BlockExpr : StmtNode<Expr>;
200def OpaqueValueExpr : StmtNode<Expr>;
201def TypoExpr : StmtNode<Expr>;
202def RecoveryExpr : StmtNode<Expr>;
203def BuiltinBitCastExpr : StmtNode<ExplicitCastExpr>;
204
205// Microsoft Extensions.
206def MSPropertyRefExpr : StmtNode<Expr>;
207def MSPropertySubscriptExpr : StmtNode<Expr>;
208def CXXUuidofExpr : StmtNode<Expr>;
209def SEHTryStmt : StmtNode<Stmt>;
210def SEHExceptStmt : StmtNode<Stmt>;
211def SEHFinallyStmt : StmtNode<Stmt>;
212def SEHLeaveStmt : StmtNode<Stmt>;
213def MSDependentExistsStmt : StmtNode<Stmt>;
214
215// OpenCL Extensions.
216def AsTypeExpr : StmtNode<Expr>;
217
218// OpenMP Directives.
219def OMPExecutableDirective : StmtNode<Stmt, 1>;
220def OMPLoopDirective : StmtNode<OMPExecutableDirective, 1>;
221def OMPParallelDirective : StmtNode<OMPExecutableDirective>;
222def OMPSimdDirective : StmtNode<OMPLoopDirective>;
223def OMPForDirective : StmtNode<OMPLoopDirective>;
224def OMPForSimdDirective : StmtNode<OMPLoopDirective>;
225def OMPSectionsDirective : StmtNode<OMPExecutableDirective>;
226def OMPSectionDirective : StmtNode<OMPExecutableDirective>;
227def OMPSingleDirective : StmtNode<OMPExecutableDirective>;
228def OMPMasterDirective : StmtNode<OMPExecutableDirective>;
229def OMPCriticalDirective : StmtNode<OMPExecutableDirective>;
230def OMPParallelForDirective : StmtNode<OMPLoopDirective>;
231def OMPParallelForSimdDirective : StmtNode<OMPLoopDirective>;
232def OMPParallelMasterDirective : StmtNode<OMPExecutableDirective>;
233def OMPParallelSectionsDirective : StmtNode<OMPExecutableDirective>;
234def OMPTaskDirective : StmtNode<OMPExecutableDirective>;
235def OMPTaskyieldDirective : StmtNode<OMPExecutableDirective>;
236def OMPBarrierDirective : StmtNode<OMPExecutableDirective>;
237def OMPTaskwaitDirective : StmtNode<OMPExecutableDirective>;
238def OMPTaskgroupDirective : StmtNode<OMPExecutableDirective>;
239def OMPFlushDirective : StmtNode<OMPExecutableDirective>;
240def OMPDepobjDirective : StmtNode<OMPExecutableDirective>;
241def OMPScanDirective : StmtNode<OMPExecutableDirective>;
242def OMPOrderedDirective : StmtNode<OMPExecutableDirective>;
243def OMPAtomicDirective : StmtNode<OMPExecutableDirective>;
244def OMPTargetDirective : StmtNode<OMPExecutableDirective>;
245def OMPTargetDataDirective : StmtNode<OMPExecutableDirective>;
246def OMPTargetEnterDataDirective : StmtNode<OMPExecutableDirective>;
247def OMPTargetExitDataDirective : StmtNode<OMPExecutableDirective>;
248def OMPTargetParallelDirective : StmtNode<OMPExecutableDirective>;
249def OMPTargetParallelForDirective : StmtNode<OMPExecutableDirective>;
250def OMPTargetUpdateDirective : StmtNode<OMPExecutableDirective>;
251def OMPTeamsDirective : StmtNode<OMPExecutableDirective>;
252def OMPCancellationPointDirective : StmtNode<OMPExecutableDirective>;
253def OMPCancelDirective : StmtNode<OMPExecutableDirective>;
254def OMPTaskLoopDirective : StmtNode<OMPLoopDirective>;
255def OMPTaskLoopSimdDirective : StmtNode<OMPLoopDirective>;
256def OMPMasterTaskLoopDirective : StmtNode<OMPLoopDirective>;
257def OMPMasterTaskLoopSimdDirective : StmtNode<OMPLoopDirective>;
258def OMPParallelMasterTaskLoopDirective : StmtNode<OMPLoopDirective>;
259def OMPParallelMasterTaskLoopSimdDirective : StmtNode<OMPLoopDirective>;
260def OMPDistributeDirective : StmtNode<OMPLoopDirective>;
261def OMPDistributeParallelForDirective : StmtNode<OMPLoopDirective>;
262def OMPDistributeParallelForSimdDirective : StmtNode<OMPLoopDirective>;
263def OMPDistributeSimdDirective : StmtNode<OMPLoopDirective>;
264def OMPTargetParallelForSimdDirective : StmtNode<OMPLoopDirective>;
265def OMPTargetSimdDirective : StmtNode<OMPLoopDirective>;
266def OMPTeamsDistributeDirective : StmtNode<OMPLoopDirective>;
267def OMPTeamsDistributeSimdDirective : StmtNode<OMPLoopDirective>;
268def OMPTeamsDistributeParallelForSimdDirective : StmtNode<OMPLoopDirective>;
269def OMPTeamsDistributeParallelForDirective : StmtNode<OMPLoopDirective>;
270def OMPTargetTeamsDirective : StmtNode<OMPExecutableDirective>;
271def OMPTargetTeamsDistributeDirective : StmtNode<OMPLoopDirective>;
272def OMPTargetTeamsDistributeParallelForDirective : StmtNode<OMPLoopDirective>;
273def OMPTargetTeamsDistributeParallelForSimdDirective : StmtNode<OMPLoopDirective>;
274def OMPTargetTeamsDistributeSimdDirective : StmtNode<OMPLoopDirective>;
275