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// Wrapper expressions
97def FullExpr : DStmt<Expr, 1>;
98def ConstantExpr : DStmt<FullExpr>;
99
100// Atomic expressions
101def AtomicExpr : DStmt<Expr>;
102
103// GNU Extensions.
104def AddrLabelExpr : DStmt<Expr>;
105def StmtExpr : DStmt<Expr>;
106def ChooseExpr : DStmt<Expr>;
107def GNUNullExpr : DStmt<Expr>;
108
109// C++ Expressions.
110def CXXOperatorCallExpr : DStmt<CallExpr>;
111def CXXMemberCallExpr : DStmt<CallExpr>;
112def CXXNamedCastExpr : DStmt<ExplicitCastExpr, 1>;
113def CXXStaticCastExpr : DStmt<CXXNamedCastExpr>;
114def CXXDynamicCastExpr : DStmt<CXXNamedCastExpr>;
115def CXXReinterpretCastExpr : DStmt<CXXNamedCastExpr>;
116def CXXConstCastExpr : DStmt<CXXNamedCastExpr>;
117def CXXFunctionalCastExpr : DStmt<ExplicitCastExpr>;
118def CXXTypeidExpr : DStmt<Expr>;
119def UserDefinedLiteral : DStmt<CallExpr>;
120def CXXBoolLiteralExpr : DStmt<Expr>;
121def CXXNullPtrLiteralExpr : DStmt<Expr>;
122def CXXThisExpr : DStmt<Expr>;
123def CXXThrowExpr : DStmt<Expr>;
124def CXXDefaultArgExpr : DStmt<Expr>;
125def CXXDefaultInitExpr : DStmt<Expr>;
126def CXXScalarValueInitExpr : DStmt<Expr>;
127def CXXStdInitializerListExpr : DStmt<Expr>;
128def CXXNewExpr : DStmt<Expr>;
129def CXXDeleteExpr : DStmt<Expr>;
130def CXXPseudoDestructorExpr : DStmt<Expr>;
131def TypeTraitExpr : DStmt<Expr>;
132def ArrayTypeTraitExpr : DStmt<Expr>;
133def ExpressionTraitExpr : DStmt<Expr>;
134def DependentScopeDeclRefExpr : DStmt<Expr>;
135def CXXConstructExpr : DStmt<Expr>;
136def CXXInheritedCtorInitExpr : DStmt<Expr>;
137def CXXBindTemporaryExpr : DStmt<Expr>;
138def ExprWithCleanups : DStmt<FullExpr>;
139def CXXTemporaryObjectExpr : DStmt<CXXConstructExpr>;
140def CXXUnresolvedConstructExpr : DStmt<Expr>;
141def CXXDependentScopeMemberExpr : DStmt<Expr>;
142def OverloadExpr : DStmt<Expr, 1>;
143def UnresolvedLookupExpr : DStmt<OverloadExpr>;
144def UnresolvedMemberExpr : DStmt<OverloadExpr>;
145def CXXNoexceptExpr : DStmt<Expr>;
146def PackExpansionExpr : DStmt<Expr>;
147def SizeOfPackExpr : DStmt<Expr>;
148def SubstNonTypeTemplateParmExpr : DStmt<Expr>;
149def SubstNonTypeTemplateParmPackExpr : DStmt<Expr>;
150def FunctionParmPackExpr : DStmt<Expr>;
151def MaterializeTemporaryExpr : DStmt<Expr>;
152def LambdaExpr : DStmt<Expr>;
153def CXXFoldExpr : DStmt<Expr>;
154
155// C++ Coroutines TS expressions
156def CoroutineSuspendExpr : DStmt<Expr, 1>;
157def CoawaitExpr : DStmt<CoroutineSuspendExpr>;
158def DependentCoawaitExpr : DStmt<Expr>;
159def CoyieldExpr : DStmt<CoroutineSuspendExpr>;
160
161// Obj-C Expressions.
162def ObjCStringLiteral : DStmt<Expr>;
163def ObjCBoxedExpr : DStmt<Expr>;
164def ObjCArrayLiteral : DStmt<Expr>;
165def ObjCDictionaryLiteral : DStmt<Expr>;
166def ObjCEncodeExpr : DStmt<Expr>;
167def ObjCMessageExpr : DStmt<Expr>;
168def ObjCSelectorExpr : DStmt<Expr>;
169def ObjCProtocolExpr : DStmt<Expr>;
170def ObjCIvarRefExpr : DStmt<Expr>;
171def ObjCPropertyRefExpr : DStmt<Expr>;
172def ObjCIsaExpr : DStmt<Expr>;
173def ObjCIndirectCopyRestoreExpr : DStmt<Expr>;
174def ObjCBoolLiteralExpr : DStmt<Expr>;
175def ObjCSubscriptRefExpr : DStmt<Expr>;
176def ObjCAvailabilityCheckExpr : DStmt<Expr>;
177
178// Obj-C ARC Expressions.
179def ObjCBridgedCastExpr : DStmt<ExplicitCastExpr>;
180
181// CUDA Expressions.
182def CUDAKernelCallExpr : DStmt<CallExpr>;
183
184// Clang Extensions.
185def ShuffleVectorExpr : DStmt<Expr>;
186def ConvertVectorExpr : DStmt<Expr>;
187def BlockExpr : DStmt<Expr>;
188def OpaqueValueExpr : DStmt<Expr>;
189def TypoExpr : DStmt<Expr>;
190
191// Microsoft Extensions.
192def MSPropertyRefExpr : DStmt<Expr>;
193def MSPropertySubscriptExpr : DStmt<Expr>;
194def CXXUuidofExpr : DStmt<Expr>;
195def SEHTryStmt : Stmt;
196def SEHExceptStmt : Stmt;
197def SEHFinallyStmt : Stmt;
198def SEHLeaveStmt : Stmt;
199def MSDependentExistsStmt : Stmt;
200
201// OpenCL Extensions.
202def AsTypeExpr : DStmt<Expr>;
203
204// OpenMP Directives.
205def OMPExecutableDirective : Stmt<1>;
206def OMPLoopDirective : DStmt<OMPExecutableDirective, 1>;
207def OMPParallelDirective : DStmt<OMPExecutableDirective>;
208def OMPSimdDirective : DStmt<OMPLoopDirective>;
209def OMPForDirective : DStmt<OMPLoopDirective>;
210def OMPForSimdDirective : DStmt<OMPLoopDirective>;
211def OMPSectionsDirective : DStmt<OMPExecutableDirective>;
212def OMPSectionDirective : DStmt<OMPExecutableDirective>;
213def OMPSingleDirective : DStmt<OMPExecutableDirective>;
214def OMPMasterDirective : DStmt<OMPExecutableDirective>;
215def OMPCriticalDirective : DStmt<OMPExecutableDirective>;
216def OMPParallelForDirective : DStmt<OMPLoopDirective>;
217def OMPParallelForSimdDirective : DStmt<OMPLoopDirective>;
218def OMPParallelSectionsDirective : DStmt<OMPExecutableDirective>;
219def OMPTaskDirective : DStmt<OMPExecutableDirective>;
220def OMPTaskyieldDirective : DStmt<OMPExecutableDirective>;
221def OMPBarrierDirective : DStmt<OMPExecutableDirective>;
222def OMPTaskwaitDirective : DStmt<OMPExecutableDirective>;
223def OMPTaskgroupDirective : DStmt<OMPExecutableDirective>;
224def OMPFlushDirective : DStmt<OMPExecutableDirective>;
225def OMPOrderedDirective : DStmt<OMPExecutableDirective>;
226def OMPAtomicDirective : DStmt<OMPExecutableDirective>;
227def OMPTargetDirective : DStmt<OMPExecutableDirective>;
228def OMPTargetDataDirective : DStmt<OMPExecutableDirective>;
229def OMPTargetEnterDataDirective : DStmt<OMPExecutableDirective>;
230def OMPTargetExitDataDirective : DStmt<OMPExecutableDirective>;
231def OMPTargetParallelDirective : DStmt<OMPExecutableDirective>;
232def OMPTargetParallelForDirective : DStmt<OMPExecutableDirective>;
233def OMPTargetUpdateDirective : DStmt<OMPExecutableDirective>;
234def OMPTeamsDirective : DStmt<OMPExecutableDirective>;
235def OMPCancellationPointDirective : DStmt<OMPExecutableDirective>;
236def OMPCancelDirective : DStmt<OMPExecutableDirective>;
237def OMPTaskLoopDirective : DStmt<OMPLoopDirective>;
238def OMPTaskLoopSimdDirective : DStmt<OMPLoopDirective>;
239def OMPDistributeDirective : DStmt<OMPLoopDirective>;
240def OMPDistributeParallelForDirective : DStmt<OMPLoopDirective>;
241def OMPDistributeParallelForSimdDirective : DStmt<OMPLoopDirective>;
242def OMPDistributeSimdDirective : DStmt<OMPLoopDirective>;
243def OMPTargetParallelForSimdDirective : DStmt<OMPLoopDirective>;
244def OMPTargetSimdDirective : DStmt<OMPLoopDirective>;
245def OMPTeamsDistributeDirective : DStmt<OMPLoopDirective>;
246def OMPTeamsDistributeSimdDirective : DStmt<OMPLoopDirective>;
247def OMPTeamsDistributeParallelForSimdDirective : DStmt<OMPLoopDirective>;
248def OMPTeamsDistributeParallelForDirective : DStmt<OMPLoopDirective>;
249def OMPTargetTeamsDirective : DStmt<OMPExecutableDirective>;
250def OMPTargetTeamsDistributeDirective : DStmt<OMPLoopDirective>;
251def OMPTargetTeamsDistributeParallelForDirective : DStmt<OMPLoopDirective>;
252def OMPTargetTeamsDistributeParallelForSimdDirective : DStmt<OMPLoopDirective>;
253def OMPTargetTeamsDistributeSimdDirective : DStmt<OMPLoopDirective>;
254