class AttrSubject; class Stmt : AttrSubject { bit Abstract = abstract; } class DStmt : Stmt { Stmt Base = base; } // Statements def NullStmt : Stmt; def CompoundStmt : Stmt; def IfStmt : Stmt; def SwitchStmt : Stmt; def WhileStmt : Stmt; def DoStmt : Stmt; def ForStmt : Stmt; def GotoStmt : Stmt; def IndirectGotoStmt : Stmt; def ContinueStmt : Stmt; def BreakStmt : Stmt; def ReturnStmt : Stmt; def DeclStmt : Stmt; def SwitchCase : Stmt<1>; def CaseStmt : DStmt; def DefaultStmt : DStmt; def CapturedStmt : Stmt; // Statements that might produce a value (for example, as the last non-null // statement in a GNU statement-expression). def ValueStmt : Stmt<1>; def LabelStmt : DStmt; def AttributedStmt : DStmt; // Asm statements def AsmStmt : Stmt<1>; def GCCAsmStmt : DStmt; def MSAsmStmt : DStmt; // Obj-C statements def ObjCAtTryStmt : Stmt; def ObjCAtCatchStmt : Stmt; def ObjCAtFinallyStmt : Stmt; def ObjCAtThrowStmt : Stmt; def ObjCAtSynchronizedStmt : Stmt; def ObjCForCollectionStmt : Stmt; def ObjCAutoreleasePoolStmt : Stmt; // C++ statements def CXXCatchStmt : Stmt; def CXXTryStmt : Stmt; def CXXForRangeStmt : Stmt; // C++ Coroutines TS statements def CoroutineBodyStmt : Stmt; def CoreturnStmt : Stmt; // Expressions def Expr : DStmt; def PredefinedExpr : DStmt; def DeclRefExpr : DStmt; def IntegerLiteral : DStmt; def FixedPointLiteral : DStmt; def FloatingLiteral : DStmt; def ImaginaryLiteral : DStmt; def StringLiteral : DStmt; def CharacterLiteral : DStmt; def ParenExpr : DStmt; def UnaryOperator : DStmt; def OffsetOfExpr : DStmt; def UnaryExprOrTypeTraitExpr : DStmt; def ArraySubscriptExpr : DStmt; def OMPArraySectionExpr : DStmt; def CallExpr : DStmt; def MemberExpr : DStmt; def CastExpr : DStmt; def BinaryOperator : DStmt; def CompoundAssignOperator : DStmt; def AbstractConditionalOperator : DStmt; def ConditionalOperator : DStmt; def BinaryConditionalOperator : DStmt; def ImplicitCastExpr : DStmt; def ExplicitCastExpr : DStmt; def CStyleCastExpr : DStmt; def CompoundLiteralExpr : DStmt; def ExtVectorElementExpr : DStmt; def InitListExpr : DStmt; def DesignatedInitExpr : DStmt; def DesignatedInitUpdateExpr : DStmt; def ImplicitValueInitExpr : DStmt; def NoInitExpr : DStmt; def ArrayInitLoopExpr : DStmt; def ArrayInitIndexExpr : DStmt; def ParenListExpr : DStmt; def VAArgExpr : DStmt; def GenericSelectionExpr : DStmt; def PseudoObjectExpr : DStmt; def SourceLocExpr : DStmt; // Wrapper expressions def FullExpr : DStmt; def ConstantExpr : DStmt; // Atomic expressions def AtomicExpr : DStmt; // GNU Extensions. def AddrLabelExpr : DStmt; def StmtExpr : DStmt; def ChooseExpr : DStmt; def GNUNullExpr : DStmt; // C++ Expressions. def CXXOperatorCallExpr : DStmt; def CXXMemberCallExpr : DStmt; def CXXRewrittenBinaryOperator : DStmt; def CXXNamedCastExpr : DStmt; def CXXStaticCastExpr : DStmt; def CXXDynamicCastExpr : DStmt; def CXXReinterpretCastExpr : DStmt; def CXXConstCastExpr : DStmt; def CXXFunctionalCastExpr : DStmt; def CXXTypeidExpr : DStmt; def UserDefinedLiteral : DStmt; def CXXBoolLiteralExpr : DStmt; def CXXNullPtrLiteralExpr : DStmt; def CXXThisExpr : DStmt; def CXXThrowExpr : DStmt; def CXXDefaultArgExpr : DStmt; def CXXDefaultInitExpr : DStmt; def CXXScalarValueInitExpr : DStmt; def CXXStdInitializerListExpr : DStmt; def CXXNewExpr : DStmt; def CXXDeleteExpr : DStmt; def CXXPseudoDestructorExpr : DStmt; def TypeTraitExpr : DStmt; def ArrayTypeTraitExpr : DStmt; def ExpressionTraitExpr : DStmt; def DependentScopeDeclRefExpr : DStmt; def CXXConstructExpr : DStmt; def CXXInheritedCtorInitExpr : DStmt; def CXXBindTemporaryExpr : DStmt; def ExprWithCleanups : DStmt; def CXXTemporaryObjectExpr : DStmt; def CXXUnresolvedConstructExpr : DStmt; def CXXDependentScopeMemberExpr : DStmt; def OverloadExpr : DStmt; def UnresolvedLookupExpr : DStmt; def UnresolvedMemberExpr : DStmt; def CXXNoexceptExpr : DStmt; def PackExpansionExpr : DStmt; def SizeOfPackExpr : DStmt; def SubstNonTypeTemplateParmExpr : DStmt; def SubstNonTypeTemplateParmPackExpr : DStmt; def FunctionParmPackExpr : DStmt; def MaterializeTemporaryExpr : DStmt; def LambdaExpr : DStmt; def CXXFoldExpr : DStmt; // C++ Coroutines TS expressions def CoroutineSuspendExpr : DStmt; def CoawaitExpr : DStmt; def DependentCoawaitExpr : DStmt; def CoyieldExpr : DStmt; // C++2a Concepts expressions def ConceptSpecializationExpr : DStmt; // Obj-C Expressions. def ObjCStringLiteral : DStmt; def ObjCBoxedExpr : DStmt; def ObjCArrayLiteral : DStmt; def ObjCDictionaryLiteral : DStmt; def ObjCEncodeExpr : DStmt; def ObjCMessageExpr : DStmt; def ObjCSelectorExpr : DStmt; def ObjCProtocolExpr : DStmt; def ObjCIvarRefExpr : DStmt; def ObjCPropertyRefExpr : DStmt; def ObjCIsaExpr : DStmt; def ObjCIndirectCopyRestoreExpr : DStmt; def ObjCBoolLiteralExpr : DStmt; def ObjCSubscriptRefExpr : DStmt; def ObjCAvailabilityCheckExpr : DStmt; // Obj-C ARC Expressions. def ObjCBridgedCastExpr : DStmt; // CUDA Expressions. def CUDAKernelCallExpr : DStmt; // Clang Extensions. def ShuffleVectorExpr : DStmt; def ConvertVectorExpr : DStmt; def BlockExpr : DStmt; def OpaqueValueExpr : DStmt; def TypoExpr : DStmt; def BuiltinBitCastExpr : DStmt; // Microsoft Extensions. def MSPropertyRefExpr : DStmt; def MSPropertySubscriptExpr : DStmt; def CXXUuidofExpr : DStmt; def SEHTryStmt : Stmt; def SEHExceptStmt : Stmt; def SEHFinallyStmt : Stmt; def SEHLeaveStmt : Stmt; def MSDependentExistsStmt : Stmt; // OpenCL Extensions. def AsTypeExpr : DStmt; // OpenMP Directives. def OMPExecutableDirective : Stmt<1>; def OMPLoopDirective : DStmt; def OMPParallelDirective : DStmt; def OMPSimdDirective : DStmt; def OMPForDirective : DStmt; def OMPForSimdDirective : DStmt; def OMPSectionsDirective : DStmt; def OMPSectionDirective : DStmt; def OMPSingleDirective : DStmt; def OMPMasterDirective : DStmt; def OMPCriticalDirective : DStmt; def OMPParallelForDirective : DStmt; def OMPParallelForSimdDirective : DStmt; def OMPParallelSectionsDirective : DStmt; def OMPTaskDirective : DStmt; def OMPTaskyieldDirective : DStmt; def OMPBarrierDirective : DStmt; def OMPTaskwaitDirective : DStmt; def OMPTaskgroupDirective : DStmt; def OMPFlushDirective : DStmt; def OMPOrderedDirective : DStmt; def OMPAtomicDirective : DStmt; def OMPTargetDirective : DStmt; def OMPTargetDataDirective : DStmt; def OMPTargetEnterDataDirective : DStmt; def OMPTargetExitDataDirective : DStmt; def OMPTargetParallelDirective : DStmt; def OMPTargetParallelForDirective : DStmt; def OMPTargetUpdateDirective : DStmt; def OMPTeamsDirective : DStmt; def OMPCancellationPointDirective : DStmt; def OMPCancelDirective : DStmt; def OMPTaskLoopDirective : DStmt; def OMPTaskLoopSimdDirective : DStmt; def OMPMasterTaskLoopDirective : DStmt; def OMPMasterTaskLoopSimdDirective : DStmt; def OMPParallelMasterTaskLoopDirective : DStmt; def OMPDistributeDirective : DStmt; def OMPDistributeParallelForDirective : DStmt; def OMPDistributeParallelForSimdDirective : DStmt; def OMPDistributeSimdDirective : DStmt; def OMPTargetParallelForSimdDirective : DStmt; def OMPTargetSimdDirective : DStmt; def OMPTeamsDistributeDirective : DStmt; def OMPTeamsDistributeSimdDirective : DStmt; def OMPTeamsDistributeParallelForSimdDirective : DStmt; def OMPTeamsDistributeParallelForDirective : DStmt; def OMPTargetTeamsDirective : DStmt; def OMPTargetTeamsDistributeDirective : DStmt; def OMPTargetTeamsDistributeParallelForDirective : DStmt; def OMPTargetTeamsDistributeParallelForSimdDirective : DStmt; def OMPTargetTeamsDistributeSimdDirective : DStmt;