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