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