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 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 ArraySectionExpr : 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 PackIndexingExpr : StmtNode<Expr>; 158def SubstNonTypeTemplateParmExpr : StmtNode<Expr>; 159def SubstNonTypeTemplateParmPackExpr : StmtNode<Expr>; 160def FunctionParmPackExpr : StmtNode<Expr>; 161def MaterializeTemporaryExpr : StmtNode<Expr>; 162def LambdaExpr : StmtNode<Expr>; 163def CXXFoldExpr : StmtNode<Expr>; 164def CXXParenListInitExpr: StmtNode<Expr>; 165 166// C++ Coroutines expressions 167def CoroutineSuspendExpr : StmtNode<Expr, 1>; 168def CoawaitExpr : StmtNode<CoroutineSuspendExpr>; 169def DependentCoawaitExpr : StmtNode<Expr>; 170def CoyieldExpr : StmtNode<CoroutineSuspendExpr>; 171 172// C++20 Concepts expressions 173def ConceptSpecializationExpr : StmtNode<Expr>; 174def RequiresExpr : StmtNode<Expr>; 175 176// Obj-C Expressions. 177def ObjCStringLiteral : StmtNode<Expr>; 178def ObjCBoxedExpr : StmtNode<Expr>; 179def ObjCArrayLiteral : StmtNode<Expr>; 180def ObjCDictionaryLiteral : StmtNode<Expr>; 181def ObjCEncodeExpr : StmtNode<Expr>; 182def ObjCMessageExpr : StmtNode<Expr>; 183def ObjCSelectorExpr : StmtNode<Expr>; 184def ObjCProtocolExpr : StmtNode<Expr>; 185def ObjCIvarRefExpr : StmtNode<Expr>; 186def ObjCPropertyRefExpr : StmtNode<Expr>; 187def ObjCIsaExpr : StmtNode<Expr>; 188def ObjCIndirectCopyRestoreExpr : StmtNode<Expr>; 189def ObjCBoolLiteralExpr : StmtNode<Expr>; 190def ObjCSubscriptRefExpr : StmtNode<Expr>; 191def ObjCAvailabilityCheckExpr : StmtNode<Expr>; 192 193// Obj-C ARC Expressions. 194def ObjCBridgedCastExpr : StmtNode<ExplicitCastExpr>; 195 196// CUDA Expressions. 197def CUDAKernelCallExpr : StmtNode<CallExpr>; 198 199// Clang Extensions. 200def ShuffleVectorExpr : StmtNode<Expr>; 201def ConvertVectorExpr : StmtNode<Expr>; 202def BlockExpr : StmtNode<Expr>; 203def OpaqueValueExpr : StmtNode<Expr>; 204def TypoExpr : StmtNode<Expr>; 205def RecoveryExpr : StmtNode<Expr>; 206def BuiltinBitCastExpr : StmtNode<ExplicitCastExpr>; 207def EmbedExpr : StmtNode<Expr>; 208 209// Microsoft Extensions. 210def MSPropertyRefExpr : StmtNode<Expr>; 211def MSPropertySubscriptExpr : StmtNode<Expr>; 212def CXXUuidofExpr : StmtNode<Expr>; 213def SEHTryStmt : StmtNode<Stmt>; 214def SEHExceptStmt : StmtNode<Stmt>; 215def SEHFinallyStmt : StmtNode<Stmt>; 216def SEHLeaveStmt : StmtNode<Stmt>; 217def MSDependentExistsStmt : StmtNode<Stmt>; 218 219// OpenCL Extensions. 220def AsTypeExpr : StmtNode<Expr>; 221 222// OpenMP Directives. 223def OMPCanonicalLoop : StmtNode<Stmt>; 224def OMPExecutableDirective : StmtNode<Stmt, 1>; 225def OMPMetaDirective : StmtNode<OMPExecutableDirective>; 226def OMPLoopBasedDirective : StmtNode<OMPExecutableDirective, 1>; 227def OMPLoopDirective : StmtNode<OMPLoopBasedDirective, 1>; 228def OMPParallelDirective : StmtNode<OMPExecutableDirective>; 229def OMPSimdDirective : StmtNode<OMPLoopDirective>; 230def OMPLoopTransformationDirective : StmtNode<OMPLoopBasedDirective, 1>; 231def OMPTileDirective : StmtNode<OMPLoopTransformationDirective>; 232def OMPUnrollDirective : StmtNode<OMPLoopTransformationDirective>; 233def OMPReverseDirective : StmtNode<OMPLoopTransformationDirective>; 234def OMPInterchangeDirective : StmtNode<OMPLoopTransformationDirective>; 235def OMPForDirective : StmtNode<OMPLoopDirective>; 236def OMPForSimdDirective : StmtNode<OMPLoopDirective>; 237def OMPSectionsDirective : StmtNode<OMPExecutableDirective>; 238def OMPSectionDirective : StmtNode<OMPExecutableDirective>; 239def OMPSingleDirective : StmtNode<OMPExecutableDirective>; 240def OMPMasterDirective : StmtNode<OMPExecutableDirective>; 241def OMPCriticalDirective : StmtNode<OMPExecutableDirective>; 242def OMPParallelForDirective : StmtNode<OMPLoopDirective>; 243def OMPParallelForSimdDirective : StmtNode<OMPLoopDirective>; 244def OMPParallelMasterDirective : StmtNode<OMPExecutableDirective>; 245def OMPParallelSectionsDirective : StmtNode<OMPExecutableDirective>; 246def OMPTaskDirective : StmtNode<OMPExecutableDirective>; 247def OMPTaskyieldDirective : StmtNode<OMPExecutableDirective>; 248def OMPBarrierDirective : StmtNode<OMPExecutableDirective>; 249def OMPTaskwaitDirective : StmtNode<OMPExecutableDirective>; 250def OMPTaskgroupDirective : StmtNode<OMPExecutableDirective>; 251def OMPFlushDirective : StmtNode<OMPExecutableDirective>; 252def OMPDepobjDirective : StmtNode<OMPExecutableDirective>; 253def OMPScanDirective : StmtNode<OMPExecutableDirective>; 254def OMPOrderedDirective : StmtNode<OMPExecutableDirective>; 255def OMPAtomicDirective : StmtNode<OMPExecutableDirective>; 256def OMPTargetDirective : StmtNode<OMPExecutableDirective>; 257def OMPTargetDataDirective : StmtNode<OMPExecutableDirective>; 258def OMPTargetEnterDataDirective : StmtNode<OMPExecutableDirective>; 259def OMPTargetExitDataDirective : StmtNode<OMPExecutableDirective>; 260def OMPTargetParallelDirective : StmtNode<OMPExecutableDirective>; 261def OMPTargetParallelForDirective : StmtNode<OMPExecutableDirective>; 262def OMPTargetUpdateDirective : StmtNode<OMPExecutableDirective>; 263def OMPTeamsDirective : StmtNode<OMPExecutableDirective>; 264def OMPCancellationPointDirective : StmtNode<OMPExecutableDirective>; 265def OMPCancelDirective : StmtNode<OMPExecutableDirective>; 266def OMPScopeDirective : StmtNode<OMPExecutableDirective>; 267def OMPTaskLoopDirective : StmtNode<OMPLoopDirective>; 268def OMPTaskLoopSimdDirective : StmtNode<OMPLoopDirective>; 269def OMPMasterTaskLoopDirective : StmtNode<OMPLoopDirective>; 270def OMPMasterTaskLoopSimdDirective : StmtNode<OMPLoopDirective>; 271def OMPParallelMasterTaskLoopDirective : StmtNode<OMPLoopDirective>; 272def OMPParallelMasterTaskLoopSimdDirective : StmtNode<OMPLoopDirective>; 273def OMPMaskedTaskLoopDirective : StmtNode<OMPLoopDirective>; 274def OMPMaskedTaskLoopSimdDirective : StmtNode<OMPLoopDirective>; 275def OMPParallelMaskedTaskLoopDirective : StmtNode<OMPLoopDirective>; 276def OMPParallelMaskedTaskLoopSimdDirective : StmtNode<OMPLoopDirective>; 277def OMPDistributeDirective : StmtNode<OMPLoopDirective>; 278def OMPDistributeParallelForDirective : StmtNode<OMPLoopDirective>; 279def OMPDistributeParallelForSimdDirective : StmtNode<OMPLoopDirective>; 280def OMPDistributeSimdDirective : StmtNode<OMPLoopDirective>; 281def OMPTargetParallelForSimdDirective : StmtNode<OMPLoopDirective>; 282def OMPTargetSimdDirective : StmtNode<OMPLoopDirective>; 283def OMPTeamsDistributeDirective : StmtNode<OMPLoopDirective>; 284def OMPTeamsDistributeSimdDirective : StmtNode<OMPLoopDirective>; 285def OMPTeamsDistributeParallelForSimdDirective : StmtNode<OMPLoopDirective>; 286def OMPTeamsDistributeParallelForDirective : StmtNode<OMPLoopDirective>; 287def OMPTargetTeamsDirective : StmtNode<OMPExecutableDirective>; 288def OMPTargetTeamsDistributeDirective : StmtNode<OMPLoopDirective>; 289def OMPTargetTeamsDistributeParallelForDirective : StmtNode<OMPLoopDirective>; 290def OMPTargetTeamsDistributeParallelForSimdDirective : StmtNode<OMPLoopDirective>; 291def OMPTargetTeamsDistributeSimdDirective : StmtNode<OMPLoopDirective>; 292def OMPInteropDirective : StmtNode<OMPExecutableDirective>; 293def OMPDispatchDirective : StmtNode<OMPExecutableDirective>; 294def OMPMaskedDirective : StmtNode<OMPExecutableDirective>; 295def OMPParallelMaskedDirective : StmtNode<OMPExecutableDirective>; 296def OMPGenericLoopDirective : StmtNode<OMPLoopDirective>; 297def OMPTeamsGenericLoopDirective : StmtNode<OMPLoopDirective>; 298def OMPTargetTeamsGenericLoopDirective : StmtNode<OMPLoopDirective>; 299def OMPParallelGenericLoopDirective : StmtNode<OMPLoopDirective>; 300def OMPTargetParallelGenericLoopDirective : StmtNode<OMPLoopDirective>; 301def OMPErrorDirective : StmtNode<OMPExecutableDirective>; 302 303// OpenACC Constructs. 304def OpenACCConstructStmt : StmtNode<Stmt, /*abstract=*/1>; 305def OpenACCAssociatedStmtConstruct 306 : StmtNode<OpenACCConstructStmt, /*abstract=*/1>; 307def OpenACCComputeConstruct : StmtNode<OpenACCAssociatedStmtConstruct>; 308def OpenACCLoopConstruct : StmtNode<OpenACCAssociatedStmtConstruct>; 309