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++ statments
47def CXXCatchStmt : Stmt;
48def CXXTryStmt : Stmt;
49def CXXForRangeStmt : Stmt;
50
51// Expressions
52def Expr : Stmt<1>;
53def PredefinedExpr : DStmt<Expr>;
54def DeclRefExpr : DStmt<Expr>;
55def IntegerLiteral : DStmt<Expr>;
56def FloatingLiteral : DStmt<Expr>;
57def ImaginaryLiteral : DStmt<Expr>;
58def StringLiteral : DStmt<Expr>;
59def CharacterLiteral : DStmt<Expr>;
60def ParenExpr : DStmt<Expr>;
61def UnaryOperator : DStmt<Expr>;
62def OffsetOfExpr : DStmt<Expr>;
63def UnaryExprOrTypeTraitExpr : DStmt<Expr>;
64def ArraySubscriptExpr : DStmt<Expr>;
65def CallExpr : DStmt<Expr>;
66def MemberExpr : DStmt<Expr>;
67def CastExpr : DStmt<Expr, 1>;
68def BinaryOperator : DStmt<Expr>;
69def CompoundAssignOperator : DStmt<BinaryOperator>;
70def AbstractConditionalOperator : DStmt<Expr, 1>;
71def ConditionalOperator : DStmt<AbstractConditionalOperator>;
72def BinaryConditionalOperator : DStmt<AbstractConditionalOperator>;
73def ImplicitCastExpr : DStmt<CastExpr>;
74def ExplicitCastExpr : DStmt<CastExpr, 1>;
75def CStyleCastExpr : DStmt<ExplicitCastExpr>;
76def CompoundLiteralExpr : DStmt<Expr>;
77def ExtVectorElementExpr : DStmt<Expr>;
78def InitListExpr : DStmt<Expr>;
79def DesignatedInitExpr : DStmt<Expr>;
80def ImplicitValueInitExpr : DStmt<Expr>;
81def ParenListExpr : DStmt<Expr>;
82def VAArgExpr : DStmt<Expr>;
83def GenericSelectionExpr : DStmt<Expr>;
84def PseudoObjectExpr : DStmt<Expr>;
85
86// Atomic expressions
87def AtomicExpr : DStmt<Expr>;
88
89// GNU Extensions.
90def AddrLabelExpr : DStmt<Expr>;
91def StmtExpr : DStmt<Expr>;
92def ChooseExpr : DStmt<Expr>;
93def GNUNullExpr : DStmt<Expr>;
94
95// C++ Expressions.
96def CXXOperatorCallExpr : DStmt<CallExpr>;
97def CXXMemberCallExpr : DStmt<CallExpr>;
98def CXXNamedCastExpr : DStmt<ExplicitCastExpr, 1>;
99def CXXStaticCastExpr : DStmt<CXXNamedCastExpr>;
100def CXXDynamicCastExpr : DStmt<CXXNamedCastExpr>;
101def CXXReinterpretCastExpr : DStmt<CXXNamedCastExpr>;
102def CXXConstCastExpr : DStmt<CXXNamedCastExpr>;
103def CXXFunctionalCastExpr : DStmt<ExplicitCastExpr>;
104def CXXTypeidExpr : DStmt<Expr>;
105def UserDefinedLiteral : DStmt<CallExpr>;
106def CXXBoolLiteralExpr : DStmt<Expr>;
107def CXXNullPtrLiteralExpr : DStmt<Expr>;
108def CXXThisExpr : DStmt<Expr>;
109def CXXThrowExpr : DStmt<Expr>;
110def CXXDefaultArgExpr : DStmt<Expr>;
111def CXXDefaultInitExpr : DStmt<Expr>;
112def CXXScalarValueInitExpr : DStmt<Expr>;
113def CXXStdInitializerListExpr : DStmt<Expr>;
114def CXXNewExpr : DStmt<Expr>;
115def CXXDeleteExpr : DStmt<Expr>;
116def CXXPseudoDestructorExpr : DStmt<Expr>;
117def TypeTraitExpr : DStmt<Expr>;
118def ArrayTypeTraitExpr : DStmt<Expr>;
119def ExpressionTraitExpr : DStmt<Expr>;
120def DependentScopeDeclRefExpr : DStmt<Expr>;
121def CXXConstructExpr : DStmt<Expr>;
122def CXXBindTemporaryExpr : DStmt<Expr>;
123def ExprWithCleanups : DStmt<Expr>;
124def CXXTemporaryObjectExpr : DStmt<CXXConstructExpr>;
125def CXXUnresolvedConstructExpr : DStmt<Expr>;
126def CXXDependentScopeMemberExpr : DStmt<Expr>;
127def OverloadExpr : DStmt<Expr, 1>;
128def UnresolvedLookupExpr : DStmt<OverloadExpr>;
129def UnresolvedMemberExpr : DStmt<OverloadExpr>;
130def CXXNoexceptExpr : DStmt<Expr>;
131def PackExpansionExpr : DStmt<Expr>;
132def SizeOfPackExpr : DStmt<Expr>;
133def SubstNonTypeTemplateParmExpr : DStmt<Expr>;
134def SubstNonTypeTemplateParmPackExpr : DStmt<Expr>;
135def FunctionParmPackExpr : DStmt<Expr>;
136def MaterializeTemporaryExpr : DStmt<Expr>;
137def LambdaExpr : DStmt<Expr>;
138def CXXFoldExpr : DStmt<Expr>;
139
140// Obj-C Expressions.
141def ObjCStringLiteral : DStmt<Expr>;
142def ObjCBoxedExpr : DStmt<Expr>;
143def ObjCArrayLiteral : DStmt<Expr>;
144def ObjCDictionaryLiteral : DStmt<Expr>;
145def ObjCEncodeExpr : DStmt<Expr>;
146def ObjCMessageExpr : DStmt<Expr>;
147def ObjCSelectorExpr : DStmt<Expr>;
148def ObjCProtocolExpr : DStmt<Expr>;
149def ObjCIvarRefExpr : DStmt<Expr>;
150def ObjCPropertyRefExpr : DStmt<Expr>;
151def ObjCIsaExpr : DStmt<Expr>;
152def ObjCIndirectCopyRestoreExpr : DStmt<Expr>;
153def ObjCBoolLiteralExpr : DStmt<Expr>;
154def ObjCSubscriptRefExpr : DStmt<Expr>;
155
156// Obj-C ARC Expressions.
157def ObjCBridgedCastExpr : DStmt<ExplicitCastExpr>;
158
159// CUDA Expressions.
160def CUDAKernelCallExpr : DStmt<CallExpr>;
161
162// Clang Extensions.
163def ShuffleVectorExpr : DStmt<Expr>;
164def ConvertVectorExpr : DStmt<Expr>;
165def BlockExpr : DStmt<Expr>;
166def OpaqueValueExpr : DStmt<Expr>;
167def TypoExpr : DStmt<Expr>;
168
169// Microsoft Extensions.
170def MSPropertyRefExpr : DStmt<Expr>;
171def CXXUuidofExpr : DStmt<Expr>;
172def SEHTryStmt : Stmt;
173def SEHExceptStmt : Stmt;
174def SEHFinallyStmt : Stmt;
175def SEHLeaveStmt : Stmt;
176def MSDependentExistsStmt : Stmt;
177
178// OpenCL Extensions.
179def AsTypeExpr : DStmt<Expr>;
180
181// OpenMP Directives.
182def OMPExecutableDirective : Stmt<1>;
183def OMPLoopDirective : DStmt<OMPExecutableDirective, 1>;
184def OMPParallelDirective : DStmt<OMPExecutableDirective>;
185def OMPSimdDirective : DStmt<OMPLoopDirective>;
186def OMPForDirective : DStmt<OMPLoopDirective>;
187def OMPForSimdDirective : DStmt<OMPLoopDirective>;
188def OMPSectionsDirective : DStmt<OMPExecutableDirective>;
189def OMPSectionDirective : DStmt<OMPExecutableDirective>;
190def OMPSingleDirective : DStmt<OMPExecutableDirective>;
191def OMPMasterDirective : DStmt<OMPExecutableDirective>;
192def OMPCriticalDirective : DStmt<OMPExecutableDirective>;
193def OMPParallelForDirective : DStmt<OMPLoopDirective>;
194def OMPParallelForSimdDirective : DStmt<OMPLoopDirective>;
195def OMPParallelSectionsDirective : DStmt<OMPExecutableDirective>;
196def OMPTaskDirective : DStmt<OMPExecutableDirective>;
197def OMPTaskyieldDirective : DStmt<OMPExecutableDirective>;
198def OMPBarrierDirective : DStmt<OMPExecutableDirective>;
199def OMPTaskwaitDirective : DStmt<OMPExecutableDirective>;
200def OMPFlushDirective : DStmt<OMPExecutableDirective>;
201def OMPOrderedDirective : DStmt<OMPExecutableDirective>;
202def OMPAtomicDirective : DStmt<OMPExecutableDirective>;
203def OMPTargetDirective : DStmt<OMPExecutableDirective>;
204def OMPTeamsDirective : DStmt<OMPExecutableDirective>;
205