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