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