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