23 #include "llvm/ADT/FoldingSet.h"
24 using namespace clang;
28 llvm::FoldingSetNodeID &
ID;
35 : ID(ID), Context(Context), Canonical(Canonical) { }
37 void VisitStmt(
const Stmt *
S);
39 #define STMT(Node, Base) void Visit##Node(const Node *S);
40 #include "clang/AST/StmtNodes.inc"
44 void VisitDecl(
const Decl *D);
71 void StmtProfiler::VisitStmt(
const Stmt *
S) {
72 assert(S &&
"Requires non-null Stmt pointer");
73 ID.AddInteger(S->getStmtClass());
74 for (
const Stmt *SubStmt : S->children()) {
82 void StmtProfiler::VisitDeclStmt(
const DeclStmt *S) {
84 for (
const auto *D : S->
decls())
88 void StmtProfiler::VisitNullStmt(
const NullStmt *S) {
92 void StmtProfiler::VisitCompoundStmt(
const CompoundStmt *S) {
96 void StmtProfiler::VisitSwitchCase(
const SwitchCase *S) {
100 void StmtProfiler::VisitCaseStmt(
const CaseStmt *S) {
104 void StmtProfiler::VisitDefaultStmt(
const DefaultStmt *S) {
108 void StmtProfiler::VisitLabelStmt(
const LabelStmt *S) {
118 void StmtProfiler::VisitIfStmt(
const IfStmt *S) {
123 void StmtProfiler::VisitSwitchStmt(
const SwitchStmt *S) {
128 void StmtProfiler::VisitWhileStmt(
const WhileStmt *S) {
133 void StmtProfiler::VisitDoStmt(
const DoStmt *S) {
137 void StmtProfiler::VisitForStmt(
const ForStmt *S) {
141 void StmtProfiler::VisitGotoStmt(
const GotoStmt *S) {
150 void StmtProfiler::VisitContinueStmt(
const ContinueStmt *S) {
154 void StmtProfiler::VisitBreakStmt(
const BreakStmt *S) {
158 void StmtProfiler::VisitReturnStmt(
const ReturnStmt *S) {
162 void StmtProfiler::VisitGCCAsmStmt(
const GCCAsmStmt *S) {
182 void StmtProfiler::VisitMSAsmStmt(
const MSAsmStmt *S) {
187 void StmtProfiler::VisitCXXCatchStmt(
const CXXCatchStmt *S) {
192 void StmtProfiler::VisitCXXTryStmt(
const CXXTryStmt *S) {
207 void StmtProfiler::VisitSEHTryStmt(
const SEHTryStmt *S) {
215 void StmtProfiler::VisitSEHExceptStmt(
const SEHExceptStmt *S) {
219 void StmtProfiler::VisitSEHLeaveStmt(
const SEHLeaveStmt *S) {
223 void StmtProfiler::VisitCapturedStmt(
const CapturedStmt *S) {
242 void StmtProfiler::VisitObjCAtTryStmt(
const ObjCAtTryStmt *S) {
262 StmtProfiler *Profiler;
264 template <
typename T>
265 void VisitOMPClauseList(T *
Node);
268 OMPClauseProfiler(StmtProfiler *
P) : Profiler(P) { }
269 #define OPENMP_CLAUSE(Name, Class) \
270 void Visit##Class(const Class *C);
271 #include "clang/Basic/OpenMPKinds.def"
276 void OMPClauseProfiler::VistOMPClauseWithPreInit(
279 Profiler->VisitStmt(S);
282 void OMPClauseProfiler::VistOMPClauseWithPostUpdate(
284 VistOMPClauseWithPreInit(C);
286 Profiler->VisitStmt(
E);
289 void OMPClauseProfiler::VisitOMPIfClause(
const OMPIfClause *C) {
294 void OMPClauseProfiler::VisitOMPFinalClause(
const OMPFinalClause *C) {
319 void OMPClauseProfiler::VisitOMPDefaultClause(
const OMPDefaultClause *C) { }
324 VistOMPClauseWithPreInit(C);
326 Profiler->VisitStmt(S);
331 Profiler->VisitStmt(Num);
334 void OMPClauseProfiler::VisitOMPNowaitClause(
const OMPNowaitClause *) {}
336 void OMPClauseProfiler::VisitOMPUntiedClause(
const OMPUntiedClause *) {}
340 void OMPClauseProfiler::VisitOMPReadClause(
const OMPReadClause *) {}
342 void OMPClauseProfiler::VisitOMPWriteClause(
const OMPWriteClause *) {}
344 void OMPClauseProfiler::VisitOMPUpdateClause(
const OMPUpdateClause *) {}
348 void OMPClauseProfiler::VisitOMPSeqCstClause(
const OMPSeqCstClause *) {}
352 void OMPClauseProfiler::VisitOMPSIMDClause(
const OMPSIMDClause *) {}
357 void OMPClauseProfiler::VisitOMPClauseList(T *
Node) {
358 for (
auto *
E : Node->varlists()) {
360 Profiler->VisitStmt(
E);
365 VisitOMPClauseList(C);
368 Profiler->VisitStmt(
E);
373 VisitOMPClauseList(C);
374 VistOMPClauseWithPreInit(C);
377 Profiler->VisitStmt(
E);
379 for (
auto *
E : C->
inits()) {
381 Profiler->VisitStmt(
E);
386 VisitOMPClauseList(C);
387 VistOMPClauseWithPostUpdate(C);
390 Profiler->VisitStmt(
E);
394 Profiler->VisitStmt(
E);
398 Profiler->VisitStmt(
E);
401 void OMPClauseProfiler::VisitOMPSharedClause(
const OMPSharedClause *C) {
402 VisitOMPClauseList(C);
404 void OMPClauseProfiler::VisitOMPReductionClause(
406 Profiler->VisitNestedNameSpecifier(
409 VisitOMPClauseList(C);
410 VistOMPClauseWithPostUpdate(C);
413 Profiler->VisitStmt(
E);
417 Profiler->VisitStmt(
E);
421 Profiler->VisitStmt(
E);
425 Profiler->VisitStmt(
E);
428 void OMPClauseProfiler::VisitOMPLinearClause(
const OMPLinearClause *C) {
429 VisitOMPClauseList(C);
430 VistOMPClauseWithPostUpdate(C);
431 for (
auto *
E : C->privates()) {
433 Profiler->VisitStmt(
E);
435 for (
auto *
E : C->inits()) {
437 Profiler->VisitStmt(
E);
439 for (
auto *
E : C->updates()) {
441 Profiler->VisitStmt(
E);
443 for (
auto *
E : C->finals()) {
445 Profiler->VisitStmt(
E);
448 Profiler->VisitStmt(C->getStep());
449 if (C->getCalcStep())
450 Profiler->VisitStmt(C->getCalcStep());
453 VisitOMPClauseList(C);
457 void OMPClauseProfiler::VisitOMPCopyinClause(
const OMPCopyinClause *C) {
458 VisitOMPClauseList(C);
461 Profiler->VisitStmt(
E);
465 Profiler->VisitStmt(
E);
469 Profiler->VisitStmt(
E);
474 VisitOMPClauseList(C);
477 Profiler->VisitStmt(
E);
481 Profiler->VisitStmt(
E);
485 Profiler->VisitStmt(
E);
488 void OMPClauseProfiler::VisitOMPFlushClause(
const OMPFlushClause *C) {
489 VisitOMPClauseList(C);
491 void OMPClauseProfiler::VisitOMPDependClause(
const OMPDependClause *C) {
492 VisitOMPClauseList(C);
494 void OMPClauseProfiler::VisitOMPDeviceClause(
const OMPDeviceClause *C) {
498 void OMPClauseProfiler::VisitOMPMapClause(
const OMPMapClause *C) {
499 VisitOMPClauseList(C);
505 void OMPClauseProfiler::VisitOMPThreadLimitClause(
522 void OMPClauseProfiler::VisitOMPHintClause(
const OMPHintClause *C) {
524 Profiler->VisitStmt(C->
getHint());
526 void OMPClauseProfiler::VisitOMPToClause(
const OMPToClause *C) {
527 VisitOMPClauseList(C);
529 void OMPClauseProfiler::VisitOMPFromClause(
const OMPFromClause *C) {
530 VisitOMPClauseList(C);
532 void OMPClauseProfiler::VisitOMPUseDevicePtrClause(
534 VisitOMPClauseList(C);
536 void OMPClauseProfiler::VisitOMPIsDevicePtrClause(
538 VisitOMPClauseList(C);
545 OMPClauseProfiler
P(
this);
554 VisitOMPExecutableDirective(S);
558 VisitOMPExecutableDirective(S);
562 VisitOMPLoopDirective(S);
566 VisitOMPLoopDirective(S);
570 VisitOMPLoopDirective(S);
574 VisitOMPExecutableDirective(S);
578 VisitOMPExecutableDirective(S);
582 VisitOMPExecutableDirective(S);
586 VisitOMPExecutableDirective(S);
590 VisitOMPExecutableDirective(S);
596 VisitOMPLoopDirective(S);
599 void StmtProfiler::VisitOMPParallelForSimdDirective(
601 VisitOMPLoopDirective(S);
604 void StmtProfiler::VisitOMPParallelSectionsDirective(
606 VisitOMPExecutableDirective(S);
610 VisitOMPExecutableDirective(S);
614 VisitOMPExecutableDirective(S);
618 VisitOMPExecutableDirective(S);
622 VisitOMPExecutableDirective(S);
626 VisitOMPExecutableDirective(S);
630 VisitOMPExecutableDirective(S);
634 VisitOMPExecutableDirective(S);
638 VisitOMPExecutableDirective(S);
642 VisitOMPExecutableDirective(S);
646 VisitOMPExecutableDirective(S);
649 void StmtProfiler::VisitOMPTargetEnterDataDirective(
651 VisitOMPExecutableDirective(S);
654 void StmtProfiler::VisitOMPTargetExitDataDirective(
656 VisitOMPExecutableDirective(S);
659 void StmtProfiler::VisitOMPTargetParallelDirective(
661 VisitOMPExecutableDirective(S);
664 void StmtProfiler::VisitOMPTargetParallelForDirective(
666 VisitOMPExecutableDirective(S);
670 VisitOMPExecutableDirective(S);
673 void StmtProfiler::VisitOMPCancellationPointDirective(
675 VisitOMPExecutableDirective(S);
679 VisitOMPExecutableDirective(S);
683 VisitOMPLoopDirective(S);
686 void StmtProfiler::VisitOMPTaskLoopSimdDirective(
688 VisitOMPLoopDirective(S);
691 void StmtProfiler::VisitOMPDistributeDirective(
693 VisitOMPLoopDirective(S);
696 void OMPClauseProfiler::VisitOMPDistScheduleClause(
698 VistOMPClauseWithPreInit(C);
700 Profiler->VisitStmt(S);
705 void StmtProfiler::VisitOMPTargetUpdateDirective(
707 VisitOMPExecutableDirective(S);
710 void StmtProfiler::VisitOMPDistributeParallelForDirective(
712 VisitOMPLoopDirective(S);
715 void StmtProfiler::VisitOMPDistributeParallelForSimdDirective(
717 VisitOMPLoopDirective(S);
720 void StmtProfiler::VisitOMPDistributeSimdDirective(
722 VisitOMPLoopDirective(S);
725 void StmtProfiler::VisitOMPTargetParallelForSimdDirective(
727 VisitOMPLoopDirective(S);
730 void StmtProfiler::VisitExpr(
const Expr *S) {
734 void StmtProfiler::VisitDeclRefExpr(
const DeclRefExpr *S) {
771 void StmtProfiler::VisitStringLiteral(
const StringLiteral *S) {
777 void StmtProfiler::VisitParenExpr(
const ParenExpr *S) {
781 void StmtProfiler::VisitParenListExpr(
const ParenListExpr *S) {
785 void StmtProfiler::VisitUnaryOperator(
const UnaryOperator *S) {
790 void StmtProfiler::VisitOffsetOfExpr(
const OffsetOfExpr *S) {
793 for (
unsigned i = 0; i < n; ++i) {
834 void StmtProfiler::VisitCallExpr(
const CallExpr *S) {
838 void StmtProfiler::VisitMemberExpr(
const MemberExpr *S) {
851 void StmtProfiler::VisitCastExpr(
const CastExpr *S) {
866 VisitExplicitCastExpr(S);
876 VisitBinaryOperator(S);
883 void StmtProfiler::VisitBinaryConditionalOperator(
888 void StmtProfiler::VisitAddrLabelExpr(
const AddrLabelExpr *S) {
893 void StmtProfiler::VisitStmtExpr(
const StmtExpr *S) {
905 void StmtProfiler::VisitChooseExpr(
const ChooseExpr *S) {
909 void StmtProfiler::VisitGNUNullExpr(
const GNUNullExpr *S) {
913 void StmtProfiler::VisitVAArgExpr(
const VAArgExpr *S) {
917 void StmtProfiler::VisitInitListExpr(
const InitListExpr *S) {
930 if (D.isFieldDesignator()) {
932 VisitName(D.getFieldName());
936 if (D.isArrayDesignator()) {
939 assert(D.isArrayRangeDesignator());
942 ID.AddInteger(D.getFirstExprIndex());
948 void StmtProfiler::VisitDesignatedInitUpdateExpr(
950 llvm_unreachable(
"Unexpected DesignatedInitUpdateExpr in syntactic form of "
954 void StmtProfiler::VisitNoInitExpr(
const NoInitExpr *S) {
955 llvm_unreachable(
"Unexpected NoInitExpr in syntactic form of initializer");
967 void StmtProfiler::VisitBlockExpr(
const BlockExpr *S) {
977 ID.AddPointer(
nullptr);
990 Visit(OVE->getSourceExpr());
993 void StmtProfiler::VisitAtomicExpr(
const AtomicExpr *S) {
1006 case OO_Array_Delete:
1009 case OO_Conditional:
1012 llvm_unreachable(
"Invalid operator call kind");
1017 return Stmt::UnaryOperatorClass;
1021 return Stmt::BinaryOperatorClass;
1026 return Stmt::UnaryOperatorClass;
1030 return Stmt::BinaryOperatorClass;
1035 return Stmt::UnaryOperatorClass;
1039 return Stmt::BinaryOperatorClass;
1043 return Stmt::BinaryOperatorClass;
1047 return Stmt::BinaryOperatorClass;
1051 return Stmt::BinaryOperatorClass;
1055 UnaryOp = UO_AddrOf;
1056 return Stmt::UnaryOperatorClass;
1060 return Stmt::BinaryOperatorClass;
1064 return Stmt::BinaryOperatorClass;
1068 return Stmt::UnaryOperatorClass;
1072 return Stmt::UnaryOperatorClass;
1075 BinaryOp = BO_Assign;
1076 return Stmt::BinaryOperatorClass;
1080 return Stmt::BinaryOperatorClass;
1084 return Stmt::BinaryOperatorClass;
1087 BinaryOp = BO_AddAssign;
1088 return Stmt::CompoundAssignOperatorClass;
1091 BinaryOp = BO_SubAssign;
1092 return Stmt::CompoundAssignOperatorClass;
1095 BinaryOp = BO_MulAssign;
1096 return Stmt::CompoundAssignOperatorClass;
1099 BinaryOp = BO_DivAssign;
1100 return Stmt::CompoundAssignOperatorClass;
1102 case OO_PercentEqual:
1103 BinaryOp = BO_RemAssign;
1104 return Stmt::CompoundAssignOperatorClass;
1107 BinaryOp = BO_XorAssign;
1108 return Stmt::CompoundAssignOperatorClass;
1111 BinaryOp = BO_AndAssign;
1112 return Stmt::CompoundAssignOperatorClass;
1115 BinaryOp = BO_OrAssign;
1116 return Stmt::CompoundAssignOperatorClass;
1120 return Stmt::BinaryOperatorClass;
1122 case OO_GreaterGreater:
1124 return Stmt::BinaryOperatorClass;
1126 case OO_LessLessEqual:
1127 BinaryOp = BO_ShlAssign;
1128 return Stmt::CompoundAssignOperatorClass;
1130 case OO_GreaterGreaterEqual:
1131 BinaryOp = BO_ShrAssign;
1132 return Stmt::CompoundAssignOperatorClass;
1136 return Stmt::BinaryOperatorClass;
1138 case OO_ExclaimEqual:
1140 return Stmt::BinaryOperatorClass;
1144 return Stmt::BinaryOperatorClass;
1146 case OO_GreaterEqual:
1148 return Stmt::BinaryOperatorClass;
1152 return Stmt::BinaryOperatorClass;
1156 return Stmt::BinaryOperatorClass;
1161 return Stmt::UnaryOperatorClass;
1166 return Stmt::UnaryOperatorClass;
1169 BinaryOp = BO_Comma;
1170 return Stmt::BinaryOperatorClass;
1173 BinaryOp = BO_PtrMemI;
1174 return Stmt::BinaryOperatorClass;
1177 return Stmt::ArraySubscriptExprClass;
1180 llvm_unreachable(
"Invalid overloaded operator expression");
1194 if (SC == Stmt::UnaryOperatorClass)
1195 ID.AddInteger(UnaryOp);
1196 else if (SC == Stmt::BinaryOperatorClass ||
1197 SC == Stmt::CompoundAssignOperatorClass)
1198 ID.AddInteger(BinaryOp);
1200 assert(SC == Stmt::ArraySubscriptExprClass);
1217 void StmtProfiler::VisitAsTypeExpr(
const AsTypeExpr *S) {
1222 VisitExplicitCastExpr(S);
1226 VisitCXXNamedCastExpr(S);
1230 VisitCXXNamedCastExpr(S);
1235 VisitCXXNamedCastExpr(S);
1239 VisitCXXNamedCastExpr(S);
1255 void StmtProfiler::VisitCXXStdInitializerListExpr(
1260 void StmtProfiler::VisitCXXTypeidExpr(
const CXXTypeidExpr *S) {
1266 void StmtProfiler::VisitCXXUuidofExpr(
const CXXUuidofExpr *S) {
1277 void StmtProfiler::VisitMSPropertySubscriptExpr(
1282 void StmtProfiler::VisitCXXThisExpr(
const CXXThisExpr *S) {
1287 void StmtProfiler::VisitCXXThrowExpr(
const CXXThrowExpr *S) {
1313 void StmtProfiler::VisitCXXInheritedCtorInitExpr(
1320 VisitExplicitCastExpr(S);
1325 VisitCXXConstructExpr(S);
1329 StmtProfiler::VisitLambdaExpr(
const LambdaExpr *S) {
1334 ID.AddInteger(C->getCaptureKind());
1335 switch (C->getCaptureKind()) {
1341 VisitDecl(C->getCapturedVar());
1342 ID.AddBoolean(C->isPackExpansion());
1345 llvm_unreachable(
"VLA type in explicit captures.");
1359 void StmtProfiler::VisitCXXDeleteExpr(
const CXXDeleteExpr *S) {
1366 void StmtProfiler::VisitCXXNewExpr(
const CXXNewExpr *S) {
1393 void StmtProfiler::VisitOverloadExpr(
const OverloadExpr *S) {
1404 VisitOverloadExpr(S);
1407 void StmtProfiler::VisitTypeTraitExpr(
const TypeTraitExpr *S) {
1427 void StmtProfiler::VisitDependentScopeDeclRefExpr(
1441 void StmtProfiler::VisitCXXUnresolvedConstructExpr(
1447 void StmtProfiler::VisitCXXDependentScopeMemberExpr(
1482 void StmtProfiler::VisitSizeOfPackExpr(
const SizeOfPackExpr *S) {
1487 ID.AddInteger(Args.size());
1488 for (
const auto &TA : Args)
1489 VisitTemplateArgument(TA);
1495 void StmtProfiler::VisitSubstNonTypeTemplateParmPackExpr(
1502 void StmtProfiler::VisitSubstNonTypeTemplateParmExpr(
1516 void StmtProfiler::VisitMaterializeTemporaryExpr(
1521 void StmtProfiler::VisitCXXFoldExpr(
const CXXFoldExpr *S) {
1530 void StmtProfiler::VisitCoreturnStmt(
const CoreturnStmt *S) {
1534 void StmtProfiler::VisitCoawaitExpr(
const CoawaitExpr *S) {
1538 void StmtProfiler::VisitCoyieldExpr(
const CoyieldExpr *S) {
1546 void StmtProfiler::VisitTypoExpr(
const TypoExpr *E) {
1554 void StmtProfiler::VisitObjCBoxedExpr(
const ObjCBoxedExpr *E) {
1566 void StmtProfiler::VisitObjCEncodeExpr(
const ObjCEncodeExpr *S) {
1614 void StmtProfiler::VisitObjCIsaExpr(
const ObjCIsaExpr *S) {
1624 void StmtProfiler::VisitObjCIndirectCopyRestoreExpr(
1631 VisitExplicitCastExpr(S);
1635 void StmtProfiler::VisitObjCAvailabilityCheckExpr(
1640 void StmtProfiler::VisitDecl(
const Decl *D) {
1641 ID.AddInteger(D? D->getKind() : 0);
1643 if (Canonical && D) {
1645 dyn_cast<NonTypeTemplateParmDecl>(D)) {
1646 ID.AddInteger(NTTP->getDepth());
1647 ID.AddInteger(NTTP->getIndex());
1648 ID.AddBoolean(NTTP->isParameterPack());
1649 VisitType(NTTP->getType());
1653 if (
const ParmVarDecl *Parm = dyn_cast<ParmVarDecl>(D)) {
1661 VisitType(Parm->getType());
1662 ID.AddInteger(Parm->getFunctionScopeDepth());
1663 ID.AddInteger(Parm->getFunctionScopeIndex());
1668 dyn_cast<TemplateTypeParmDecl>(D)) {
1669 ID.AddInteger(TTP->getDepth());
1670 ID.AddInteger(TTP->getIndex());
1671 ID.AddBoolean(TTP->isParameterPack());
1676 dyn_cast<TemplateTemplateParmDecl>(D)) {
1677 ID.AddInteger(TTP->getDepth());
1678 ID.AddInteger(TTP->getIndex());
1679 ID.AddBoolean(TTP->isParameterPack());
1684 ID.AddPointer(D? D->getCanonicalDecl() :
nullptr);
1687 void StmtProfiler::VisitType(
QualType T) {
1704 void StmtProfiler::VisitTemplateName(
TemplateName Name) {
1713 ID.AddInteger(NumArgs);
1715 VisitTemplateArgument(Args[
I].getArgument());
1753 VisitTemplateArgument(
P);
1759 bool Canonical)
const {
1760 StmtProfiler Profiler(ID, Context, Canonical);
1761 Profiler.Visit(
this);
ObjCPropertyRefExpr - A dot-syntax expression to access an ObjC property.
ObjCIndirectCopyRestoreExpr - Represents the passing of a function argument by indirect copy-restore ...
A call to an overloaded operator written using operator syntax.
Represents a single C99 designator.
ValueDecl * getMemberDecl() const
Retrieve the member declaration to which this expression refers.
Defines the clang::ASTContext interface.
This represents '#pragma omp distribute simd' composite directive.
This represents '#pragma omp master' directive.
DeclarationName getMember() const
Retrieve the name of the member that this expression refers to.
unsigned getNumTemplateArgs() const
Retrieve the number of template arguments provided as part of this template-id.
ParmVarDecl *const * iterator
Iterators over the parameters which the parameter pack expanded into.
The null pointer literal (C++11 [lex.nullptr])
This represents '#pragma omp task' directive.
This represents a GCC inline-assembly statement extension.
IdentifierInfo * getFieldName() const
For a field or identifier offsetof node, returns the name of the field.
TypeSourceInfo * getDestroyedTypeInfo() const
Retrieve the source location information for the type being destroyed.
unsigned getNumOutputs() const
This represents 'thread_limit' clause in the '#pragma omp ...' directive.
llvm::iterator_range< pack_iterator > pack_elements() const
Iterator range referencing all of the elements of a template argument pack.
This represents clause 'copyin' in the '#pragma omp ...' directives.
A (possibly-)qualified type.
bool hasExplicitTemplateArgs() const
Determines whether this expression had explicit template arguments.
helper_expr_const_range source_exprs() const
ArrayRef< OMPClause * > clauses()
llvm::APSInt getAsIntegral() const
Retrieve the template argument as an integral value.
Expr * getArg(unsigned Arg)
getArg - Return the specified argument.
NestedNameSpecifier * getCanonicalNestedNameSpecifier(NestedNameSpecifier *NNS) const
Retrieves the "canonical" nested name specifier for a given nested name specifier.
bool isElidable() const
Whether this construction is elidable.
ConstStmtVisitor - This class implements a simple visitor for Stmt subclasses.
A type trait used in the implementation of various C++11 and Library TR1 trait templates.
Expr * getSimdlen() const
Return safe iteration space distance.
private_copies_range private_copies()
CharacterKind getKind() const
Represents a 'co_return' statement in the C++ Coroutines TS.
TypeSourceInfo * getScopeTypeInfo() const
Retrieve the scope type in a qualified pseudo-destructor expression.
bool isArgumentType() const
IfStmt - This represents an if/then/else.
Class that handles pre-initialization statement for some clauses, like 'shedule', 'firstprivate' etc...
bool isGlobalDelete() const
This represents '#pragma omp for simd' directive.
The template argument is an expression, and we've not resolved it to one of the other forms yet...
TypeSourceInfo * getTypeSourceInfo() const
NestedNameSpecifier * getQualifier() const
If the member name was qualified, retrieves the nested-name-specifier that precedes the member name...
This represents 'grainsize' clause in the '#pragma omp ...' directive.
ObjCMethodDecl * getAtIndexMethodDecl() const
A reference to a name which we were able to look up during parsing but could not resolve to a specifi...
This represents 'if' clause in the '#pragma omp ...' directive.
Defines the C++ template declaration subclasses.
Represents an attribute applied to a statement.
TypeSourceInfo * getArg(unsigned I) const
Retrieve the Ith argument.
ParenExpr - This represents a parethesized expression, e.g.
This represents 'priority' clause in the '#pragma omp ...' directive.
Represents Objective-C's @throw statement.
InitListExpr * getSyntacticForm() const
The template argument is a declaration that was provided for a pointer, reference, or pointer to member non-type template parameter.
Represents a call to a C++ constructor.
ObjCSubscriptRefExpr - used for array and dictionary subscripting.
bool hasExplicitTemplateArgs() const
Determines whether this lookup had explicit template arguments.
An Embarcadero array type trait, as used in the implementation of __array_rank and __array_extent...
This represents 'update' clause in the '#pragma omp atomic' directive.
This represents '#pragma omp parallel for' directive.
MS property subscript expression.
Expr * getAsExpr() const
Retrieve the template argument as an expression.
Describes the capture of a variable or of this, or of a C++1y init-capture.
Represents a prvalue temporary that is written into memory so that a reference can bind to it...
unsigned getNumTemplateArgs() const
Expr * getAlignment()
Returns alignment.
IdentType getIdentType() const
void * getAsOpaquePtr() const
This represents '#pragma omp target exit data' directive.
This represents 'read' clause in the '#pragma omp atomic' directive.
ArrayRef< TemplateArgument > getPartialArguments() const
Get.
This represents clause 'private' in the '#pragma omp ...' directives.
const Expr * getPostUpdateExpr() const
Get post-update expression for the clause.
ObjCIsaExpr - Represent X->isa and X.isa when X is an ObjC 'id' type.
CompoundLiteralExpr - [C99 6.5.2.5].
This represents 'num_threads' clause in the '#pragma omp ...' directive.
Represents an empty template argument, e.g., one that has not been deduced.
This represents 'defaultmap' clause in the '#pragma omp ...' directive.
Implicit construction of a std::initializer_list<T> object from an array temporary within list-initia...
UnaryExprOrTypeTrait getKind() const
This represents implicit clause 'flush' for the '#pragma omp flush' directive.
const ParmVarDecl * getParam() const
unsigned getValue() const
A C++ throw-expression (C++ [except.throw]).
Represents an expression – generally a full-expression – that introduces cleanups to be run at the en...
Expr * getNumForLoops() const
Return the number of associated for-loops.
ParmVarDecl - Represents a parameter to a function.
Defines the clang::Expr interface and subclasses for C++ expressions.
ArrayTypeTrait getTrait() const
This represents 'nogroup' clause in the '#pragma omp ...' directive.
This represents 'safelen' clause in the '#pragma omp ...' directive.
A C++ static_cast expression (C++ [expr.static.cast]).
LabelStmt - Represents a label, which has a substatement.
Represents a C99 designated initializer expression.
Expr * getNumThreads() const
Returns number of threads.
DeclarationName getMemberName() const
Retrieve the name of the member that this expression refers to.
DeclarationName getName() const
getName - Returns the embedded declaration name.
ObjCProtocolDecl * getProtocol() const
This represents '#pragma omp parallel' directive.
unsigned getNumInputs() const
ShuffleVectorExpr - clang-specific builtin-in function __builtin_shufflevector.
class LLVM_ALIGNAS(8) DependentTemplateSpecializationType const IdentifierInfo * Name
Represents a template specialization type whose template cannot be resolved, e.g. ...
Holds long-lived AST nodes (such as types and decls) that can be referred to throughout the semantic ...
This represents 'simd' clause in the '#pragma omp ...' directive.
The template argument is an integral value stored in an llvm::APSInt that was provided for an integra...
unsigned getNumAssocs() const
This represents clause 'lastprivate' in the '#pragma omp ...' directives.
Represents a place-holder for an object not to be initialized by anything.
Expr * getChunkSize()
Get chunk size.
GNUNullExpr - Implements the GNU __null extension, which is a name for a null pointer constant that h...
This represents clause 'map' in the '#pragma omp ...' directives.
This represents clause 'to' in the '#pragma omp ...' directives.
DeclarationNameInfo getNameInfo() const
Retrieve the name of the entity we're testing for, along with location information.
Represents a C++ member access expression for which lookup produced a set of overloaded functions...
IdentifierInfo & getAccessor() const
ExtVectorElementExpr - This represents access to specific elements of a vector, and may occur on the ...
QualType getQueriedType() const
This represents '#pragma omp barrier' directive.
const DeclarationNameInfo & getNameInfo() const
Gets the name info for specified reduction identifier.
ObjCArrayLiteral - used for objective-c array containers; as in: @["Hello", NSApp, [NSNumber numberWithInt:42]];.
This is a common base class for loop directives ('omp simd', 'omp for', 'omp for simd' etc...
Expr * getNumTeams()
Return NumTeams number.
Represents a reference to a non-type template parameter pack that has been substituted with a non-tem...
This represents '#pragma omp critical' directive.
bool shouldCopy() const
shouldCopy - True if we should do the 'copy' part of the copy-restore.
const Expr *const * const_semantics_iterator
const VarDecl * getCatchParamDecl() const
Represents Objective-C's @catch statement.
This represents clause 'copyprivate' in the '#pragma omp ...' directives.
IndirectGotoStmt - This represents an indirect goto.
Describes an C or C++ initializer list.
A C++ typeid expression (C++ [expr.typeid]), which gets the type_info that corresponds to the supplie...
This represents '#pragma omp distribute parallel for' composite directive.
ForStmt - This represents a 'for (init;cond;inc)' stmt.
ObjCBridgeCastKind getBridgeKind() const
Determine which kind of bridge is being performed via this cast.
IdentifierInfo * getDestroyedTypeIdentifier() const
In a dependent pseudo-destructor expression for which we do not have full type information on the des...
< Capturing the *this object by copy
bool isSuperReceiver() const
helper_expr_const_range source_exprs() const
semantics_iterator semantics_end()
static Stmt::StmtClass DecodeOperatorCall(const CXXOperatorCallExpr *S, UnaryOperatorKind &UnaryOp, BinaryOperatorKind &BinaryOp)
A builtin binary operation expression such as "x + y" or "x <= y".
Selector getSelector() const
InitializationStyle getInitializationStyle() const
The kind of initializer this new-expression has.
CXXForRangeStmt - This represents C++0x [stmt.ranged]'s ranged for statement, represented as 'for (ra...
Class that handles post-update expression for some clauses, like 'lastprivate', 'reduction' etc...
NestedNameSpecifier * getQualifier() const
Retrieve the nested-name-specifier that qualifies this declaration.
This represents '#pragma omp cancellation point' directive.
This represents 'default' clause in the '#pragma omp ...' directive.
ObjCStringLiteral, used for Objective-C string literals i.e.
QualType getTypeAsWritten() const
getTypeAsWritten - Returns the type that this expression is casting to, as written in the source code...
TypoExpr - Internal placeholder for expressions where typo correction still needs to be performed and...
This represents 'final' clause in the '#pragma omp ...' directive.
This represents 'mergeable' clause in the '#pragma omp ...' directive.
This represents '#pragma omp teams' directive.
CastExpr - Base class for type casts, including both implicit casts (ImplicitCastExpr) and explicit c...
This represents clause 'reduction' in the '#pragma omp ...' directives.
FieldDecl * getField()
Get the field whose initializer will be used.
Helper class for OffsetOfExpr.
Represents binding an expression to a temporary.
StringLiteral * getClobberStringLiteral(unsigned i)
CompoundStmt * getBody() const
Retrieve the body of the lambda.
CXXTemporary * getTemporary()
A C++ lambda expression, which produces a function object (of unspecified type) that can be invoked l...
Represents a C++ member access expression where the actual member referenced could not be resolved be...
This represents clause 'is_device_ptr' in the '#pragma omp ...' directives.
bool isArrow() const
Determine whether this pseudo-destructor expression was written using an '->' (otherwise, it used a '.
Expr * getHint() const
Returns number of threads.
ObjCMethodDecl * setAtIndexMethodDecl() const
detail::InMemoryDirectory::const_iterator I
A default argument (C++ [dcl.fct.default]).
ExpressionTrait getTrait() const
NestedNameSpecifier * getQualifier() const
If the name was qualified, retrieves the nested-name-specifier that precedes the name.
This represents clause 'from' in the '#pragma omp ...' directives.
Represents the this expression in C++.
MSPropertyDecl * getPropertyDecl() const
QualType getTypeAsWritten() const
Retrieve the type that is being constructed, as specified in the source code.
This represents '#pragma omp target parallel for simd' directive.
OpenMP 4.0 [2.4, Array Sections].
FunctionDecl * getOperatorDelete() const
ConditionalOperator - The ?: ternary operator.
llvm::APInt getValue() const
Represents a C++ pseudo-destructor (C++ [expr.pseudo]).
CompoundStmt - This represents a group of statements like { stmt stmt }.
NestedNameSpecifier * getQualifier() const
Retrieve the nested-name-specifier that qualifies the member name.
This represents 'threads' clause in the '#pragma omp ...' directive.
const TemplateArgumentLoc * getTemplateArgs() const
Retrieve the template arguments provided as part of this template-id.
This represents '#pragma omp taskgroup' directive.
unsigned getNumArgs() const
Determine the number of arguments to this type trait.
unsigned getNumExpansions() const
Get the number of parameters in this parameter pack.
This represents clause 'aligned' in the '#pragma omp ...' directives.
Expr * getQueriedExpression() const
UnaryExprOrTypeTraitExpr - expression with either a type or (unevaluated) expression operand...
Represents a call to the builtin function __builtin_va_arg.
FunctionDecl * getOperatorDelete() const
This represents '#pragma omp distribute' directive.
This represents implicit clause 'depend' for the '#pragma omp task' directive.
const ObjCMethodDecl * getMethodDecl() const
LabelDecl * getDecl() const
An expression "T()" which creates a value-initialized rvalue of type T, which is a non-class type...
llvm::MutableArrayRef< Designator > designators()
This represents 'proc_bind' clause in the '#pragma omp ...' directive.
This represents 'capture' clause in the '#pragma omp atomic' directive.
Expr - This represents one expression.
unsigned getNumTemplateArgs() const
Retrieve the number of template arguments provided as part of this template-id.
helper_expr_const_range assignment_ops() const
This represents 'simdlen' clause in the '#pragma omp ...' directive.
Declaration of a template type parameter.
VarDecl * getConditionVariable() const
Retrieve the variable declared in this "while" statement, if any.
Expr * getCondition() const
Returns condition.
Represents a C++ functional cast expression that builds a temporary object.
The template argument is a null pointer or null pointer to member that was provided for a non-type te...
A C++ const_cast expression (C++ [expr.const.cast]).
BlockExpr - Adaptor class for mixing a BlockDecl with expressions.
bool hasExplicitTemplateArgs() const
Determines whether this member expression actually had a C++ template argument list explicitly specif...
ObjCMethodDecl * getImplicitPropertyGetter() const
ArgKind getKind() const
Return the kind of stored template argument.
ObjCDictionaryLiteral - AST node to represent objective-c dictionary literals; as in:"name" : NSUserN...
Represents Objective-C's @synchronized statement.
ObjCSelectorExpr used for @selector in Objective-C.
bool isImplicitAccess() const
True if this is an implicit access, i.e., one in which the member being accessed was not written in t...
Represents an expression that computes the length of a parameter pack.
CXXTryStmt - A C++ try block, including all handlers.
AsTypeExpr - Clang builtin function __builtin_astype [OpenCL 6.2.4.2] This AST node provides support ...
NonTypeTemplateParmDecl - Declares a non-type template parameter, e.g., "Size" in.
Represents a C++ template name within the type system.
This represents 'ordered' clause in the '#pragma omp ...' directive.
Selector getSelector() const
NonTypeTemplateParmDecl * getParameterPack() const
Retrieve the non-type template parameter pack being substituted.
QualType getAllocatedType() const
StringRef getInputName(unsigned i) const
This represents '#pragma omp for' directive.
Represents a folding of a pack over an operator.
TemplateName getAsTemplateOrTemplatePattern() const
Retrieve the template argument as a template name; if the argument is a pack expansion, return the pattern as a template name.
ReturnStmt - This represents a return, optionally of an expression: return; return 4;...
An expression that sends a message to the given Objective-C object or class.
unsigned getNumComponents() const
This represents a Microsoft inline-assembly statement extension.
UnaryOperator - This represents the unary-expression's (except sizeof and alignof), the postinc/postdec operators from postfix-expression, and various extensions.
A member reference to an MSPropertyDecl.
TemplateTemplateParmDecl - Declares a template template parameter, e.g., "T" in.
Represents a reference to a non-type template parameter that has been substituted with a template arg...
Expr * getDevice()
Return device number.
class LLVM_ALIGNAS(8) TemplateSpecializationType unsigned NumArgs
Represents a type template specialization; the template must be a class template, a type alias templa...
This represents '#pragma omp cancel' directive.
This represents 'collapse' clause in the '#pragma omp ...' directive.
This represents clause 'firstprivate' in the '#pragma omp ...' directives.
NestedNameSpecifier * getQualifier() const
If the member name was qualified, retrieves the nested-name-specifier that precedes the member name...
CStyleCastExpr - An explicit cast in C (C99 6.5.4) or a C-style cast in C++ (C++ [expr.cast]), which uses the syntax (Type)expr.
NestedNameSpecifierLoc getQualifierLoc() const
Gets the nested name specifier.
helper_expr_const_range privates() const
ImaginaryLiteral - We support imaginary integer and floating point literals, like "1...
This represents '#pragma omp flush' directive.
helper_expr_const_range destination_exprs() const
This represents '#pragma omp parallel for simd' directive.
CXXConstructorDecl * getConstructor() const
Get the constructor that this expression will call.
DoStmt - This represents a 'do/while' stmt.
This represents 'seq_cst' clause in the '#pragma omp atomic' directive.
This represents 'untied' clause in the '#pragma omp ...' directive.
LabelDecl * getLabel() const
unsigned getNumTemplateArgs() const
This represents '#pragma omp target enter data' directive.
const TemplateArgumentLoc * getTemplateArgs() const
Retrieve the template arguments provided as part of this template-id.
This represents 'num_teams' clause in the '#pragma omp ...' directive.
A C++ dynamic_cast expression (C++ [expr.dynamic.cast]).
OpaqueValueExpr - An expression referring to an opaque object of a fixed type and value class...
ConvertVectorExpr - Clang builtin function __builtin_convertvector This AST node provides support for...
const StringLiteral * getAsmString() const
A reference to an overloaded function set, either an UnresolvedLookupExpr or an UnresolvedMemberExpr...
A field in a dependent type, known only by its name.
This captures a statement into a function.
Represents a call to an inherited base class constructor from an inheriting constructor.
PseudoObjectExpr - An expression which accesses a pseudo-object l-value.
Expr * getNumForLoops() const
Return the number of associated for-loops.
This represents '#pragma omp single' directive.
This represents 'hint' clause in the '#pragma omp ...' directive.
TemplateArgumentLoc const * getTemplateArgs() const
helper_expr_const_range reduction_ops() const
This is a basic class for representing single OpenMP executable directive.
private_copies_range private_copies()
NestedNameSpecifierLoc getQualifierLoc() const
Retrieve the nested-name-specifier that qualifies this name, if any.
Represents a new-expression for memory allocation and constructor calls, e.g: "new CXXNewExpr(foo)"...
A call to a literal operator (C++11 [over.literal]) written as a user-defined literal (C++11 [lit...
Expr * getCondition() const
Returns condition.
helper_expr_const_range lhs_exprs() const
This represents 'schedule' clause in the '#pragma omp ...' directive.
Represents a call to a member function that may be written either with member call syntax (e...
DeclStmt - Adaptor class for mixing declarations with statements and expressions. ...
This represents clause 'shared' in the '#pragma omp ...' directives.
TemplateArgument getArgumentPack() const
Retrieve the template argument pack containing the substituted template arguments.
Expr * getPriority()
Return Priority number.
Represents a C++ nested name specifier, such as "\::std::vector<int>::".
This represents '#pragma omp taskwait' directive.
bool isImplicitAccess() const
True if this is an implicit access, i.e.
void Profile(llvm::FoldingSetNodeID &ID, const ASTContext &Ctx)
NamedDecl * getPack() const
Retrieve the parameter pack.
AtomicExpr - Variadic atomic builtins: __atomic_exchange, __atomic_fetch_*, __atomic_load, __atomic_store, and __atomic_compare_exchange_*, for the similarly-named C++11 instructions, and __c11 variants for <stdatomic.h>.
void Profile(llvm::FoldingSetNodeID &ID)
ObjCProtocolExpr used for protocol expression in Objective-C.
VarDecl * getConditionVariable() const
Retrieve the variable declared in this "switch" statement, if any.
ImplicitCastExpr - Allows us to explicitly represent implicit type conversions, which have no direct ...
capture_iterator explicit_capture_end() const
Retrieve an iterator pointing past the end of the sequence of explicit lambda captures.
QualType getAssocType(unsigned i) const
ParmVarDecl * getParameterPack() const
Get the parameter pack which this expression refers to.
This represents '#pragma omp target' directive.
TypeTrait getTrait() const
Determine which type trait this expression uses.
bool isTypeDependent() const
isTypeDependent - Determines whether this expression is type-dependent (C++ [temp.dep.expr]), which means that its type could change from one template instantiation to the next.
const T * castAs() const
Member-template castAs<specific type>.
StringRef getOutputName(unsigned i) const
bool isArrow() const
Determine whether this member expression used the '->' operator; otherwise, it used the '...
An expression trait intrinsic.
TypeSourceInfo * getTypeOperandSourceInfo() const
Retrieve source information for the type operand.
This represents '#pragma omp ordered' directive.
StmtExpr - This is the GNU Statement Expression extension: ({int X=4; X;}).
This represents '#pragma omp target update' directive.
ObjCBoxedExpr - used for generalized expression boxing.
Expr * getGrainsize() const
Return safe iteration space distance.
const BlockDecl * getBlockDecl() const
bool isParenTypeId() const
QualType getType() const
Return the type wrapped by this type source info.
ValueDecl * getAsDecl() const
Retrieve the declaration for a declaration non-type template argument.
Representation of a Microsoft __if_exists or __if_not_exists statement with a dependent name...
const OffsetOfNode & getComponent(unsigned Idx) const
A qualified reference to a name whose declaration cannot yet be resolved.
CompoundAssignOperator - For compound assignments (e.g.
bool isPartiallySubstituted() const
Determine whether this represents a partially-substituted sizeof...
Represents a C11 generic selection.
DeclarationName getDeclName() const
Retrieve the name that this expression refers to.
AddrLabelExpr - The GNU address of label extension, representing &&label.
An Objective-C "bridged" cast expression, which casts between Objective-C pointers and C pointers...
ast_type_traits::DynTypedNode Node
Represents a reference to a function parameter pack that has been substituted but not yet expanded...
Represents a template argument.
Expr * getReplacement() const
QualType getAsType() const
Retrieve the type for a type template argument.
VarDecl * getConditionVariable() const
Retrieve the variable declared in this "if" statement, if any.
NullStmt - This is the null statement ";": C99 6.8.3p3.
bool isImplicitProperty() const
This represents 'device' clause in the '#pragma omp ...' directive.
const Expr * getAssocExpr(unsigned i) const
helper_expr_const_range rhs_exprs() const
[C99 6.4.2.2] - A predefined identifier such as func.
Represents a delete expression for memory deallocation and destructor calls, e.g. ...
TypeSourceInfo * getTypeOperandSourceInfo() const
Retrieve source information for the type operand.
TemplateArgumentLoc const * getTemplateArgs() const
The template argument is a pack expansion of a template name that was provided for a template templat...
TemplateName getCanonicalTemplateName(TemplateName Name) const
Retrieves the "canonical" template name that refers to a given template.
This represents '#pragma omp section' directive.
A runtime availability query.
A C++ reinterpret_cast expression (C++ [expr.reinterpret.cast]).
This represents '#pragma omp simd' directive.
Represents a 'co_yield' expression.
DeclarationName - The name of a declaration.
Expr * getNumTasks() const
Return safe iteration space distance.
const StringLiteral * getOutputConstraintLiteral(unsigned i) const
Represents a C++11 pack expansion that produces a sequence of expressions.
QualType getCaughtType() const
unsigned getNumPlacementArgs() const
StringRef getBytes() const
Allow access to clients that need the byte representation, such as ASTWriterStmt::VisitStringLiteral(...
This represents clause 'linear' in the '#pragma omp ...' directives.
DeclarationNameInfo getDirectiveName() const
Return name of the directive.
StringKind getKind() const
bool isTypeOperand() const
detail::InMemoryDirectory::const_iterator E
bool usesGNUSyntax() const
Determines whether this designated initializer used the deprecated GNU syntax for designated initiali...
semantics_iterator semantics_begin()
unsigned getNumArgs() const
getNumArgs - Return the number of actual arguments to this call.
CanQualType getCanonicalType(QualType T) const
Return the canonical (structural) type corresponding to the specified potentially non-canonical type ...
ExplicitCastExpr - An explicit cast written in the source code.
This represents '#pragma omp atomic' directive.
llvm::APFloat getValue() const
Represents a __leave statement.
Represents a C++11 noexcept expression (C++ [expr.unary.noexcept]).
SwitchStmt - This represents a 'switch' stmt.
Capturing variable-length array type.
Not an overloaded operator.
void * getAsOpaquePtr() const
getAsOpaquePtr - Get the representation of this declaration name as an opaque pointer.
Expr * getSafelen() const
Return safe iteration space distance.
Represents the body of a coroutine.
Location wrapper for a TemplateArgument.
FunctionDecl * getOperatorNew() const
ArraySubscriptExpr - [C99 6.5.2.1] Array Subscripting.
capture_iterator explicit_capture_begin() const
Retrieve an iterator pointing to the first explicit lambda capture.
Represents Objective-C's collection statement.
ObjCEncodeExpr, used for @encode in Objective-C.
An implicit indirection through a C++ base class, when the field found is in a base class...
QualType getIntegralType() const
Retrieve the type of the integral value.
Represents a call to a CUDA kernel function.
Represents a 'co_await' expression.
CXXConstructorDecl * getConstructor() const
Get the constructor that this expression will (ultimately) call.
Represents Objective-C's @finally statement.
The template argument is a type.
QualType getSuperReceiverType() const
The template argument is actually a parameter pack.
LabelDecl * getLabel() const
Capturing the *this object by reference.
This represents 'write' clause in the '#pragma omp atomic' directive.
ObjCPropertyDecl * getExplicitProperty() const
ObjCIvarRefExpr - A reference to an ObjC instance variable.
Describes an explicit type conversion that uses functional notion but could not be resolved because o...
GotoStmt - This represents a direct goto.
A use of a default initializer in a constructor or in aggregate initialization.
QualType getNullPtrType() const
Retrieve the type for null non-type template argument.
helper_expr_const_range destination_exprs() const
Defines the C++ Decl subclasses, other than those for templates (found in DeclTemplate.h) and friends (in DeclFriend.h).
const StringLiteral * getInputConstraintLiteral(unsigned i) const
MemberExpr - [C99 6.5.2.3] Structure and Union Members.
OverloadedOperatorKind getOperator() const
Returns the kind of overloaded operator that this expression refers to.
This represents '#pragma omp target parallel' directive.
This represents 'nowait' clause in the '#pragma omp ...' directive.
ContinueStmt - This represents a continue.
This represents 'num_tasks' clause in the '#pragma omp ...' directive.
The template argument is a template name that was provided for a template template parameter...
QualType getEncodedType() const
ChooseExpr - GNU builtin-in function __builtin_choose_expr.
BinaryConditionalOperator - The GNU extension to the conditional operator which allows the middle ope...
CXXCatchStmt - This represents a C++ catch block.
Represents an explicit C++ type conversion that uses "functional" notation (C++ [expr.type.conv]).
NestedNameSpecifier * getNestedNameSpecifier() const
Retrieve the nested-name-specifier to which this instance refers.
WhileStmt - This represents a 'while' stmt.
FieldDecl * getField() const
For a field offsetof node, returns the field.
helper_expr_const_range assignment_ops() const
Expr * getThreadLimit()
Return ThreadLimit number.
This class is used for builtin types like 'int'.
Represents Objective-C's @try ... @catch ... @finally statement.
This represents '#pragma omp taskloop simd' directive.
StringLiteral - This represents a string literal expression, e.g.
CallExpr - Represents a function call (C99 6.5.2.2, C++ [expr.call]).
DeclarationName getName() const
Gets the name looked up.
This represents 'dist_schedule' clause in the '#pragma omp ...' directive.
bool isIfExists() const
Determine whether this is an __if_exists statement.
static Decl::Kind getKind(const Decl *D)
Abstract class common to all of the C++ "named"/"keyword" casts.
This represents '#pragma omp sections' directive.
ObjCBoolLiteralExpr - Objective-C Boolean Literal.
This represents '#pragma omp target data' directive.
A reference to a declared variable, function, enum, etc.
ExprValueKind getValueKind() const
getValueKind - The value kind that this expression produces.
BreakStmt - This represents a break.
Expr * getChunkSize()
Get chunk size.
const Stmt * getPreInitStmt() const
Get pre-initialization statement for the clause.
BinaryOperatorKind getOperator() const
unsigned getNumClobbers() const
helper_expr_const_range destination_exprs() const
This represents '#pragma omp taskyield' directive.
This represents '#pragma omp distribute parallel for simd' composite directive.
A boolean literal, per ([C++ lex.bool] Boolean literals).
NestedNameSpecifier * getQualifier() const
Fetches the nested-name qualifier, if one was given.
OffsetOfExpr - [C99 7.17] - This represents an expression of the form offsetof(record-type, member-designator).
QualType getDestroyedType() const
Retrieve the type being destroyed.
This represents '#pragma omp parallel sections' directive.
A Microsoft C++ __uuidof expression, which gets the _GUID that corresponds to the supplied type or ex...
bool isNull() const
Return true if this QualType doesn't point to a type yet.
bool isTypeOperand() const
Represents Objective-C's @autoreleasepool Statement.
bool isArrow() const
Determine whether this member expression used the '->' operator; otherwise, it used the '...
const CXXDestructorDecl * getDestructor() const
Represents an implicitly-generated value initialization of an object of a given type.
ObjCMethodDecl * getImplicitPropertySetter() const
This represents '#pragma omp target parallel for' directive.
This represents clause 'use_device_ptr' in the '#pragma omp ...' directives.
Kind getKind() const
Determine what kind of offsetof node this is.
helper_expr_const_range assignment_ops() const
helper_expr_const_range source_exprs() const
QualType getArgumentType() const
This represents '#pragma omp taskloop' directive.