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