26#include "llvm/ADT/StringExtras.h"
27#include "llvm/Frontend/HLSL/HLSLRootSignature.h"
38 const T *
First =
D->getFirstDecl();
40 OS <<
" first " <<
First;
47 OS <<
" prev " << Prev;
54#define DECL(DERIVED, BASE) \
56 return dumpPreviousDeclImpl(OS, cast<DERIVED##Decl>(D));
57#define ABSTRACT_DECL(DECL)
58#include "clang/AST/DeclNodes.inc"
60 llvm_unreachable(
"Decl that isn't part of DeclNodes.inc!");
66 Context(&Context),
SM(&Context.getSourceManager()),
67 PrintPolicy(Context.getPrintingPolicy()),
68 Traits(&Context.getCommentCommandTraits()) {}
83 OS <<
C->getCommentKindName();
101#include "clang/Basic/AttrList.inc"
117 OS <<
"TemplateArgument";
135 OS <<
Node->getStmtClassName();
140 if (
const auto *
E = dyn_cast<Expr>(
Node)) {
145 OS <<
" contains-errors";
171 OS <<
" objcproperty";
174 OS <<
" objcsubscript";
177 OS <<
" vectorcomponent";
180 OS <<
" matrixcomponent";
195 if (isa<LocInfoType>(
T)) {
198 OS <<
"LocInfo Type";
219 OS <<
" contains-errors";
225 OS <<
" instantiation_dependent";
228 OS <<
" variably_modified";
230 OS <<
" contains_unexpanded_pack";
242 OS <<
" " <<
T.split().Quals.getAsString();
287 OS <<
" in " << M->getFullModuleName();
288 if (
auto *ND = dyn_cast<NamedDecl>(
D))
291 AddChild([=] { OS <<
"also in " << M->getFullModuleName(); });
292 if (
const NamedDecl *ND = dyn_cast<NamedDecl>(
D))
293 if (!ND->isUnconditionallyVisible())
306 if (FD->isConstexprSpecified())
308 if (FD->isConsteval())
310 else if (FD->isImmediateFunction())
312 if (FD->isMultiVersion())
313 OS <<
" multiversion";
316 if (!isa<FunctionDecl>(*
D)) {
317 const auto *MD = dyn_cast<ObjCMethodDecl>(
D);
318 if (!MD || !MD->isThisDeclarationADefinition()) {
319 const auto *DC = dyn_cast<DeclContext>(
D);
320 if (DC && DC->hasExternalLexicalStorage()) {
322 OS <<
" <undeserialized declarations>";
334 OS <<
" friend_undeclared";
342 OS <<
"CXXCtorInitializer";
343 if (
Init->isAnyMemberInitializer()) {
346 }
else if (
Init->isBaseInitializer()) {
348 }
else if (
Init->isDelegatingInitializer()) {
351 llvm_unreachable(
"Unknown initializer type");
361 if (
C.getVariable()) {
370 OS <<
"<<<NULL>>> OMPClause";
375 StringRef ClauseName(llvm::omp::getOpenMPClauseName(
C->getClauseKind()));
376 OS <<
"OMP" << ClauseName.substr(0, 1).upper()
377 << ClauseName.drop_front() <<
"Clause";
393 OS <<
"<<<NULL>>> OpenACCClause";
398 OS <<
C->getClauseKind();
402 switch (
C->getClauseKind()) {
404 OS << '(' << cast<OpenACCDefaultClause>(
C)->getDefaultClauseKind() <<
')';
446 auto *GC = cast<OpenACCGangClause>(
C);
448 for (
unsigned I = 0; I < GC->getNumExprs(); ++I) {
449 OS <<
" " << GC->getExpr(I).first;
455 if (cast<OpenACCCollapseClause>(
C)->hasForce())
463 if (cast<OpenACCCopyClause>(
C)->getModifierList() !=
465 OS <<
" modifiers: " << cast<OpenACCCopyClause>(
C)->getModifierList();
471 if (cast<OpenACCCopyInClause>(
C)->getModifierList() !=
473 OS <<
" modifiers: " << cast<OpenACCCopyInClause>(
C)->getModifierList();
479 if (cast<OpenACCCopyOutClause>(
C)->getModifierList() !=
482 << cast<OpenACCCopyOutClause>(
C)->getModifierList();
488 if (cast<OpenACCCreateClause>(
C)->getModifierList() !=
490 OS <<
" modifiers: " << cast<OpenACCCreateClause>(
C)->getModifierList();
494 if (cast<OpenACCWaitClause>(
C)->hasDevNumExpr())
496 if (cast<OpenACCWaitClause>(
C)->hasQueuesTag())
497 OS <<
" has queues tag";
502 llvm::interleaveComma(
503 cast<OpenACCDeviceTypeClause>(
C)->getArchitectures(), OS,
505 if (
Arch.getIdentifierInfo() ==
nullptr)
508 OS <<
Arch.getIdentifierInfo()->getName();
513 OS <<
" clause Operator: "
514 << cast<OpenACCReductionClause>(
C)->getReductionOp();
518 if (cast<OpenACCBindClause>(
C)->isIdentifierArgument())
519 OS <<
" identifier '"
520 << cast<OpenACCBindClause>(
C)->getIdentifierArgument()->getName()
524 [=] {
Visit(cast<OpenACCBindClause>(
C)->getStringArgument()); });
547 OS <<
"<<<NULL>>> ConceptReference";
551 OS <<
"ConceptReference";
561 OS <<
"<<<NULL>>> Requirement";
569 OS <<
"TypeRequirement";
572 OS <<
"SimpleRequirement";
575 OS <<
"CompoundRequirement";
578 OS <<
"NestedRequirement";
585 if (
auto *ER = dyn_cast<concepts::ExprRequirement>(R)) {
586 if (ER->hasNoexceptRequirement())
593 OS << (R->
isSatisfied() ?
" satisfied" :
" unsatisfied");
595 OS <<
" contains_unexpanded_pack";
601 V.convert(llvm::APFloat::IEEEdouble(), llvm::APFloat::rmNearestTiesToEven,
603 return V.convertToDouble();
627 llvm_unreachable(
"unexpected APValue kind!");
643void TextNodeDumper::dumpAPValueChildren(
646 unsigned NumChildren, StringRef LabelSingular, StringRef LabelPlurial) {
649 constexpr unsigned MaxChildrenPerLine = 4;
651 while (I < NumChildren) {
653 while (J < NumChildren) {
655 (J - I < MaxChildrenPerLine)) {
662 J = std::max(I + 1, J);
665 AddChild(J - I > 1 ? LabelPlurial : LabelSingular, [=]() {
666 for (
unsigned X = I;
X < J; ++
X) {
683 OS <<
"Indeterminate";
689 OS <<
Value.getInt();
703 OS <<
Value.getFixedPoint();
713 return Value.getVectorElt(Index);
722 OS <<
Value.getComplexIntReal() <<
" + " <<
Value.getComplexIntImag()
727 OS <<
"ComplexFloat ";
736 OS <<
"LValue Base=";
741 OS << BE->getStmtClassName() <<
' ';
744 OS <<
"TypeInfoLValue ";
746 BTI.print(OS, PrintPolicy);
748 OS <<
"DynamicAllocLValue";
753 OS << VDB->getDeclKindName() <<
"Decl";
756 OS <<
", Null=" <<
Value.isNullPointer()
757 <<
", Offset=" <<
Value.getLValueOffset().getQuantity()
758 <<
", HasPath=" <<
Value.hasLValuePath();
759 if (
Value.hasLValuePath()) {
760 OS <<
", PathLength=" <<
Value.getLValuePath().size();
762 llvm::ListSeparator Sep;
763 for (
const auto &PathEntry :
Value.getLValuePath()) {
766 OS << Sep << PathEntry.getAsArrayIndex();
773 unsigned ArraySize =
Value.getArraySize();
774 unsigned NumInitializedElements =
Value.getArrayInitializedElts();
775 OS <<
"Array size=" << ArraySize;
780 return Value.getArrayInitializedElt(Index);
782 NumInitializedElements,
"element",
"elements");
784 if (
Value.hasArrayFiller()) {
788 OS << ArraySize - NumInitializedElements <<
" x ";
802 return Value.getStructBase(Index);
804 Value.getStructNumBases(),
"base",
"bases");
809 return Value.getStructField(Index);
811 Value.getStructNumFields(),
"field",
"fields");
820 OS <<
" ." << *cast<NamedDecl>(FD);
827 Visit(UnionValue, Ty);
835 OS <<
"MemberPointer ";
836 auto Path =
Value.getMemberPointerPath();
840 OS <<
D->getDeclName();
847 OS << MemDecl->getDeclName();
853 OS <<
"AddrLabelDiff <todo>";
856 llvm_unreachable(
"Unknown APValue kind!");
876 OS <<
"<invalid sloc>";
880 if (strcmp(PLoc.
getFilename(), LastLocFilename) != 0) {
885 }
else if (PLoc.
getLine() != LastLocLine) {
914 OS <<
"'" << T_str <<
"'";
916 if (Desugar && !
T.isNull()) {
920 if (T_split != D_split) {
946 if (
const NamedDecl *ND = dyn_cast<NamedDecl>(
D)) {
949 OS <<
" '" << Name <<
'\'';
951 switch (ND->getKind()) {
952 case Decl::Decomposition: {
953 auto *DD = cast<DecompositionDecl>(ND);
954 OS <<
" first_binding '" << DD->bindings()[0]->getDeclName() <<
'\'';
958 auto *FD = cast<FieldDecl>(ND);
959 OS <<
" field_index " << FD->getFieldIndex();
962 case Decl::ParmVar: {
963 auto *PD = cast<ParmVarDecl>(ND);
964 OS <<
" depth " << PD->getFunctionScopeDepth() <<
" index "
965 << PD->getFunctionScopeIndex();
968 case Decl::TemplateTypeParm: {
969 auto *TD = cast<TemplateTypeParmDecl>(ND);
970 OS <<
" depth " << TD->getDepth() <<
" index " << TD->getIndex();
973 case Decl::NonTypeTemplateParm: {
974 auto *TD = cast<NonTypeTemplateParmDecl>(ND);
975 OS <<
" depth " << TD->getDepth() <<
" index " << TD->getIndex();
985 if (
const ValueDecl *VD = dyn_cast<ValueDecl>(
D))
998 if (AccessSpelling.empty())
1000 OS << AccessSpelling;
1005 if (
auto *BD = dyn_cast<BlockDecl *>(
C))
1007 else if (
auto *CLE = dyn_cast<CompoundLiteralExpr *>(
C))
1012 OS << CLE->getStmtClassName();
1017 llvm_unreachable(
"unexpected cleanup type");
1026 OS <<
" implicit_instantiation";
1029 OS <<
" explicit_specialization";
1032 OS <<
" explicit_instantiation_declaration";
1035 OS <<
" explicit_instantiation_definition";
1045 OS <<
"NestedNameSpecifier";
1048 case NestedNameSpecifier::Kind::Namespace: {
1049 auto [Namespace, Prefix] = NNS.getAsNamespaceAndPrefix();
1051 dumpBareDeclRef(Namespace);
1052 dumpNestedNameSpecifier(Prefix);
1066 llvm_unreachable(
"unexpected null nested name specifier");
1085 llvm::raw_svector_ostream SS(Str);
1086 TA.
print(PrintPolicy, SS,
true);
1088 OS <<
" '" << Str <<
"'";
1097 llvm::raw_svector_ostream SS(CanonStr);
1098 CanonTA.print(PrintPolicy, SS,
true);
1100 if (CanonStr != Str)
1101 OS <<
":'" << CanonStr <<
"'";
1105const char *TextNodeDumper::getCommandName(
unsigned CommandID) {
1112 return "<not a builtin command>";
1116#define FP_OPTION(NAME, TYPE, WIDTH, PREVIOUS) \
1117 if (FPO.has##NAME##Override()) \
1118 OS << " " #NAME "=" << FPO.get##NAME##Override();
1119#include "clang/Basic/FPOptions.def"
1124 OS <<
" Text=\"" <<
C->getText() <<
"\"";
1129 OS <<
" Name=\"" << getCommandName(
C->getCommandID()) <<
"\"";
1130 switch (
C->getRenderKind()) {
1132 OS <<
" RenderNormal";
1135 OS <<
" RenderBold";
1138 OS <<
" RenderMonospaced";
1141 OS <<
" RenderEmphasized";
1144 OS <<
" RenderAnchor";
1148 for (
unsigned i = 0, e =
C->getNumArgs(); i != e; ++i)
1149 OS <<
" Arg[" << i <<
"]=\"" <<
C->getArgText(i) <<
"\"";
1154 OS <<
" Name=\"" <<
C->getTagName() <<
"\"";
1155 if (
C->getNumAttrs() != 0) {
1157 for (
unsigned i = 0, e =
C->getNumAttrs(); i != e; ++i) {
1159 OS <<
" \"" <<
Attr.Name <<
"=\"" <<
Attr.Value <<
"\"";
1162 if (
C->isSelfClosing())
1163 OS <<
" SelfClosing";
1168 OS <<
" Name=\"" <<
C->getTagName() <<
"\"";
1173 OS <<
" Name=\"" << getCommandName(
C->getCommandID()) <<
"\"";
1174 for (
unsigned i = 0, e =
C->getNumArgs(); i != e; ++i)
1175 OS <<
" Arg[" << i <<
"]=\"" <<
C->getArgText(i) <<
"\"";
1183 if (
C->isDirectionExplicit())
1184 OS <<
" explicitly";
1186 OS <<
" implicitly";
1188 if (
C->hasParamName()) {
1189 if (
C->isParamIndexValid())
1190 OS <<
" Param=\"" <<
C->getParamName(FC) <<
"\"";
1192 OS <<
" Param=\"" <<
C->getParamNameAsWritten() <<
"\"";
1195 if (
C->isParamIndexValid() && !
C->isVarArgParam())
1196 OS <<
" ParamIndex=" <<
C->getParamIndex();
1201 if (
C->hasParamName()) {
1202 if (
C->isPositionValid())
1203 OS <<
" Param=\"" <<
C->getParamName(FC) <<
"\"";
1205 OS <<
" Param=\"" <<
C->getParamNameAsWritten() <<
"\"";
1208 if (
C->isPositionValid()) {
1209 OS <<
" Position=<";
1210 for (
unsigned i = 0, e =
C->getDepth(); i != e; ++i) {
1211 OS <<
C->getIndex(i);
1221 OS <<
" Name=\"" << getCommandName(
C->getCommandID())
1224 <<
C->getCloseName() <<
"\"";
1230 OS <<
" Text=\"" <<
C->getText() <<
"\"";
1235 OS <<
" Text=\"" <<
C->getText() <<
"\"";
1266 OS <<
" structural value";
1275 llvm::raw_svector_ostream SS(Str);
1276 TN.
print(SS, PrintPolicy);
1278 OS <<
"'" << Str <<
"'";
1285 llvm::raw_svector_ostream SS(CanonStr);
1286 CanonTN.print(SS, PrintPolicy);
1288 if (CanonStr != Str)
1289 OS <<
":'" << CanonStr <<
"'";
1327 OS <<
" index " << STS->
getIndex();
1329 OS <<
" pack_index " << *PackIndex;
1344 OS <<
" start " << StartPos;
1352 OS <<
" overloaded";
1358 OS <<
" subst_pack";
1361 llvm_unreachable(
"Unexpected TemplateName Kind");
1372 OS <<
" template expansion";
1391 if (
Node->path_empty())
1397 E =
Node->path_end();
1403 const auto *RD = cast<CXXRecordDecl>(
1406 if (
Base->isVirtual())
1408 OS << RD->getName();
1416 if (!
Node->hasLabelTarget())
1419 OS <<
" '" <<
Node->getLabelDecl()->getIdentifier()->getName() <<
"' (";
1428 OS <<
Target->getStmtClassName();
1436 if (
Node->hasInitStorage())
1438 if (
Node->hasVarStorage())
1440 if (
Node->hasElseStorage())
1442 if (
Node->isConstexpr())
1444 if (
Node->isConsteval()) {
1446 if (
Node->isNegatedConsteval())
1453 if (
Node->hasInitStorage())
1455 if (
Node->hasVarStorage())
1460 if (
Node->hasVarStorage())
1465 OS <<
" '" <<
Node->getName() <<
"'";
1466 if (
Node->isSideEntry())
1467 OS <<
" side_entry";
1471 OS <<
" '" <<
Node->getLabel()->getName() <<
"'";
1476 if (
Node->caseStmtIsGNURange())
1481 if (
const VarDecl *Cand =
Node->getNRVOCandidate()) {
1482 OS <<
" nrvo_candidate(";
1483 dumpBareDeclRef(Cand);
1489 if (
Node->isImplicit())
1494 if (
Node->isImplicit())
1499 if (
Node->hasAPValueResult())
1505 if (
Node->usesADL())
1507 if (
Node->hasStoredFPFeatures())
1508 printFPOptions(
Node->getFPFeatures());
1513 if (OperatorSpelling)
1514 OS <<
" '" << OperatorSpelling <<
"'";
1523 OS <<
Node->getCastKindName();
1527 if (
Node->hasStoredFPFeatures())
1528 printFPOptions(
Node->getFPFeatures());
1533 if (
Node->isPartOfExplicitCast())
1534 OS <<
" part_of_explicit_cast";
1541 if (
Node->getDecl() !=
Node->getFoundDecl()) {
1546 switch (
Node->isNonOdrUse()) {
1552 if (
Node->isCapturedByCopyInLambdaWithExplicitObjectParameter())
1553 OS <<
" dependent_capture";
1554 else if (
Node->refersToEnclosingVariableOrCapture())
1555 OS <<
" refers_to_enclosing_variable_or_capture";
1557 if (
Node->isImmediateEscalating())
1558 OS <<
" immediate-escalating";
1564 dumpNestedNameSpecifier(
Node->getQualifier());
1570 if (!
Node->requiresADL())
1572 OS <<
"ADL) = '" <<
Node->getName() <<
'\'';
1575 E =
Node->decls_end();
1585 OS <<
" " <<
Node->getDecl()->getDeclKindName() <<
"Decl";
1587 OS <<
"='" << *
Node->getDecl() <<
"'";
1589 if (
Node->isFreeIvar())
1590 OS <<
" isFreeIvar";
1604 OS <<
" " <<
Node->getValue();
1608 bool isSigned =
Node->getType()->isSignedIntegerType();
1615 OS <<
" " <<
Node->getValueAsString(10);
1620 OS <<
" " <<
Node->getValueAsApproximateDouble();
1637 if (
E->isResultDependent())
1638 OS <<
" result_dependent";
1642 OS <<
" " << (
Node->isPostfix() ?
"postfix" :
"prefix") <<
" '"
1644 if (!
Node->canOverflow())
1645 OS <<
" cannot overflow";
1646 if (
Node->hasStoredFPFeatures())
1647 printFPOptions(
Node->getStoredFPFeatures());
1654 if (
Node->isArgumentType())
1659 OS <<
" " << (
Node->isArrow() ?
"->" :
".") << *
Node->getMemberDecl();
1662 switch (
Node->isNonOdrUse()) {
1672 OS <<
" " <<
Node->getAccessor().getNameStart();
1677 if (
Node->hasStoredFPFeatures())
1678 printFPOptions(
Node->getStoredFPFeatures());
1684 <<
"' ComputeLHSTy=";
1686 OS <<
" ComputeResultTy=";
1688 if (
Node->hasStoredFPFeatures())
1689 printFPOptions(
Node->getStoredFPFeatures());
1693 OS <<
" " <<
Node->getLabel()->getName();
1698 OS <<
" " <<
Node->getCastName() <<
"<"
1699 <<
Node->getTypeAsWritten().getAsString() <<
">"
1700 <<
" <" <<
Node->getCastKindName();
1706 OS <<
" " << (
Node->getValue() ?
"true" :
"false");
1710 if (
Node->isImplicit())
1712 if (
Node->isCapturedByCopyInLambdaWithExplicitObjectParameter())
1713 OS <<
" dependent_capture";
1719 OS <<
" functional cast to " <<
Node->getTypeAsWritten().getAsString() <<
" <"
1720 <<
Node->getCastKindName() <<
">";
1721 if (
Node->hasStoredFPFeatures())
1722 printFPOptions(
Node->getFPFeatures());
1727 if (
Node->hasStoredFPFeatures())
1728 printFPOptions(
Node->getFPFeatures());
1734 if (
Node->isListInitialization())
1741 if (
Node->isElidable())
1743 if (
Node->isListInitialization())
1745 if (
Node->isStdInitListInitialization())
1746 OS <<
" std::initializer_list";
1747 if (
Node->requiresZeroInitialization())
1749 if (
Node->isImmediateEscalating())
1750 OS <<
" immediate-escalating";
1755 OS <<
" (CXXTemporary";
1761 if (
Node->isGlobalNew())
1763 if (
Node->isArray())
1765 if (
Node->getOperatorNew()) {
1774 if (
Node->isGlobalDelete())
1776 if (
Node->isArrayForm())
1778 if (
Node->getOperatorDelete()) {
1797 if (
Node->hasRewrittenInit())
1798 OS <<
" has rewritten init";
1802 if (
Node->hasRewrittenInit())
1803 OS <<
" has rewritten init";
1809 OS <<
" extended by ";
1815 for (
unsigned i = 0, e =
Node->getNumObjects(); i != e; ++i)
1826 OS <<
" " << (
Node->isArrow() ?
"->" :
".") <<
Node->getMember();
1832 switch (
Node->getReceiverKind()) {
1842 OS <<
" super (instance)";
1846 OS <<
" super (class)";
1852 if (
auto *BoxingMethod =
Node->getBoxingMethod()) {
1854 BoxingMethod->getSelector().print(OS);
1859 if (!
Node->getCatchParamDecl())
1873 OS <<
' ' << *
Node->getProtocol();
1877 if (
Node->isImplicitProperty()) {
1878 OS <<
" Kind=MethodRef Getter=\"";
1879 if (
Node->getImplicitPropertyGetter())
1880 Node->getImplicitPropertyGetter()->getSelector().
print(OS);
1884 OS <<
"\" Setter=\"";
1886 Setter->getSelector().print(OS);
1891 OS <<
" Kind=PropertyRef Property=\"" << *
Node->getExplicitProperty()
1895 if (
Node->isSuperReceiver())
1898 OS <<
" Messaging=";
1899 if (
Node->isMessagingGetter() &&
Node->isMessagingSetter())
1900 OS <<
"Getter&Setter";
1901 else if (
Node->isMessagingGetter())
1903 else if (
Node->isMessagingSetter())
1909 if (
Node->isArraySubscriptRefExpr())
1910 OS <<
" Kind=ArraySubscript GetterForArray=\"";
1912 OS <<
" Kind=DictionarySubscript GetterForDictionary=\"";
1913 if (
Node->getAtIndexMethodDecl())
1914 Node->getAtIndexMethodDecl()->getSelector().
print(OS);
1918 if (
Node->isArraySubscriptRefExpr())
1919 OS <<
"\" SetterForArray=\"";
1921 OS <<
"\" SetterForDictionary=\"";
1922 if (
Node->setAtIndexMethodDecl())
1923 Node->setAtIndexMethodDecl()->getSelector().
print(OS);
1929 OS <<
" " << (
Node->getValue() ?
"__objc_yes" :
"__objc_no");
1934 for (
unsigned I = 0,
E =
Node->numOfIterators(); I <
E; ++I) {
1957 if (!
Node->isValueDependent())
1958 OS << (
Node->isSatisfied() ?
" satisfied" :
" unsatisfied");
1962 if (
T->isSpelledAsLValue())
1963 OS <<
" written as lvalue reference";
1967 switch (
T->getSizeModifier()) {
1977 OS <<
" " <<
T->getIndexTypeQualifiers().getAsString();
1981 OS <<
" " <<
T->getSize();
2001 switch (
T->getVectorKind()) {
2008 OS <<
" altivec pixel";
2011 OS <<
" altivec bool";
2020 OS <<
" fixed-length sve data vector";
2023 OS <<
" fixed-length sve predicate vector";
2026 OS <<
" fixed-length rvv data vector";
2032 OS <<
" fixed-length rvv mask vector";
2035 OS <<
" " <<
T->getNumElements();
2040 if (EI.getNoReturn())
2042 if (EI.getProducesResult())
2043 OS <<
" produces_result";
2044 if (EI.getHasRegParm())
2045 OS <<
" regparm " << EI.getRegParm();
2051 if (EPI.HasTrailingReturn)
2052 OS <<
" trailing_return";
2061 switch (EPI.RefQualifier) {
2072 switch (EPI.ExceptionSpec.Type) {
2076 OS <<
" exceptionspec_dynamic_none";
2079 OS <<
" exceptionspec_dynamic";
2082 OS <<
" exceptionspec_ms_any";
2085 OS <<
" exceptionspec_nothrow";
2088 OS <<
" exceptionspec_basic_noexcept";
2091 OS <<
" exceptionspec_dependent_noexcept";
2094 OS <<
" exceptionspec_noexcept_false";
2097 OS <<
" exceptionspec_noexcept_true";
2100 OS <<
" exceptionspec_unevaluated";
2103 OS <<
" exceptionspec_uninstantiated";
2106 OS <<
" exceptionspec_unparsed";
2109 if (!EPI.ExceptionSpec.Exceptions.empty()) {
2111 OS <<
"Exceptions:";
2112 for (
unsigned I = 0, N = EPI.ExceptionSpec.Exceptions.size(); I != N;
2116 dumpType(EPI.ExceptionSpec.Exceptions[I]);
2120 if (EPI.ExceptionSpec.NoexceptExpr) {
2122 OS <<
"NoexceptExpr: ";
2123 Visit(EPI.ExceptionSpec.NoexceptExpr);
2126 dumpDeclRef(EPI.ExceptionSpec.SourceDecl,
"ExceptionSourceDecl");
2127 dumpDeclRef(EPI.ExceptionSpec.SourceTemplate,
"ExceptionSourceTemplate");
2156 if (!
T->typeMatchesDecl()) {
2163 switch (
T->getUTTKind()) {
2164#define TRANSFORM_TYPE_TRAIT_DEF(Enum, Trait) \
2165 case UnaryTransformType::Enum: \
2168#include "clang/Basic/TransformTypeTraits.def"
2175 if (
T->isTagOwned())
2177 if (
T->isInjected())
2187 OS <<
" depth " <<
T->getDepth() <<
" index " <<
T->getIndex();
2188 if (
T->isParameterPack())
2197 if (
auto PackIndex =
T->getPackIndex())
2198 OS <<
" pack_index " << *PackIndex;
2210 if (
T->isDecltypeAuto())
2211 OS <<
" decltype(auto)";
2212 if (!
T->isDeduced())
2214 if (
T->isConstrained())
2225 if (
T->isTypeAlias())
2243 if (
auto N =
T->getNumExpansions())
2244 OS <<
" expansions " << *N;
2260 OS <<
" __module_private__";
2264 if (
D->isScoped()) {
2265 if (
D->isScopedUsingClassTag())
2272 OS <<
" __module_private__";
2276 if (
const auto *Instance =
D->getInstantiatedFromMemberEnum()) {
2277 OS <<
" instantiated_from";
2283 OS <<
' ' <<
D->getKindName();
2286 OS <<
" __module_private__";
2287 if (
D->isCompleteDefinition())
2288 OS <<
" definition";
2300 for (
const auto *Child :
D->chain())
2312 if (
D->isInlineSpecified())
2314 if (
D->isVirtualAsWritten())
2317 OS <<
" __module_private__";
2319 if (
D->isPureVirtual())
2321 if (
D->isDefaulted()) {
2326 if (
D->isDeletedAsWritten())
2334 if (
D->isIneligibleOrNotSelected())
2335 OS << (isa<CXXDestructorDecl>(
D) ?
" not_selected" :
" ineligible");
2351 if (
const auto *MD = dyn_cast<CXXMethodDecl>(
D)) {
2352 if (MD->size_overridden_methods() != 0) {
2355 OS <<
D <<
" " <<
D->getParent()->getName() <<
"::" <<
D->getDeclName()
2360 auto Overrides = MD->overridden_methods();
2361 OS <<
"Overrides: [ ";
2362 dumpOverride(*Overrides.begin());
2363 for (
const auto *
Override : llvm::drop_begin(Overrides)) {
2372 if (!
D->isInlineSpecified() &&
D->isInlined()) {
2373 OS <<
" implicit-inline";
2379 if (!
D->param_empty() && !
D->param_begin())
2380 OS <<
" <<<NULL params x " <<
D->getNumParams() <<
">>>";
2382 if (
const auto *Instance =
D->getInstantiatedFromMemberFunction()) {
2383 OS <<
" instantiated_from";
2391 switch (
D->getDeductionCandidateKind()) {
2396 OS <<
" aggregate ";
2403 OS <<
" extended by ";
2408 OS <<
D->getManglingNumber();
2418 OS <<
" __module_private__";
2424 if (
const auto *
P = dyn_cast<ParmVarDecl>(
D);
2425 P &&
P->isExplicitObjectParameter())
2433 switch (
D->getTLSKind()) {
2440 OS <<
" tls_dynamic";
2444 OS <<
" __module_private__";
2445 if (
D->isNRVOVariable())
2449 if (
D->isConstexpr())
2452 switch (
D->getInitStyle()) {
2463 OS <<
" parenlistinit";
2472 const Expr *
E =
D->getInit();
2475 !
D->getType()->isDependentType()) {
2494 OS <<
' ' <<
D->getImportedModule()->getFullModuleName();
2503 switch (
D->getCommentKind()) {
2505 llvm_unreachable(
"unexpected pragma comment kind");
2522 StringRef Arg =
D->getArg();
2524 OS <<
" \"" << Arg <<
"\"";
2529 OS <<
" \"" <<
D->getName() <<
"\" \"" <<
D->getValue() <<
"\"";
2534 if (
D->isStandaloneDirective())
2535 OS <<
" openmp_standalone_directive";
2545 OS <<
" initializer";
2547 switch (
D->getInitializerKind()) {
2549 OS <<
" omp_priv = ";
2552 OS <<
" omp_priv ()";
2561 for (
const auto *
C :
D->clauselists()) {
2565 OS <<
"<<<NULL>>> OMPClause";
2570 StringRef ClauseName(
2571 llvm::omp::getOpenMPClauseName(
C->getClauseKind()));
2572 OS <<
"OMP" << ClauseName.substr(0, 1).upper()
2573 << ClauseName.drop_front() <<
"Clause";
2618 if (
const auto *Instance =
D->getInstantiatedFromMemberClass()) {
2619 OS <<
" instantiated_from";
2622 if (
const auto *CTSD = dyn_cast<ClassTemplateSpecializationDecl>(
D)) {
2624 if (CTSD->hasStrictPackMatch())
2625 OS <<
" strict-pack-match";
2630 if (!
D->isCompleteDefinition())
2636 OS <<
"DefinitionData";
2638#define FLAG(fn, name) \
2641 FLAG(isParsingBaseSpecifiers, parsing_base_specifiers);
2643 FLAG(isGenericLambda, generic);
2644 FLAG(isLambda, lambda);
2646 FLAG(isAnonymousStructOrUnion, is_anonymous);
2648 FLAG(isEmpty, empty);
2649 FLAG(isAggregate, aggregate);
2650 FLAG(isStandardLayout, standard_layout);
2651 FLAG(isTriviallyCopyable, trivially_copyable);
2654 FLAG(isPolymorphic, polymorphic);
2655 FLAG(isAbstract, abstract);
2656 FLAG(isLiteral, literal);
2658 FLAG(hasUserDeclaredConstructor, has_user_declared_ctor);
2659 FLAG(hasConstexprNonCopyMoveConstructor, has_constexpr_non_copy_move_ctor);
2660 FLAG(hasMutableFields, has_mutable_fields);
2661 FLAG(hasVariantMembers, has_variant_members);
2662 FLAG(allowConstDefaultInit, can_const_default_init);
2667 OS <<
"DefaultConstructor";
2669 FLAG(hasDefaultConstructor, exists);
2670 FLAG(hasTrivialDefaultConstructor, trivial);
2671 FLAG(hasNonTrivialDefaultConstructor, non_trivial);
2672 FLAG(hasUserProvidedDefaultConstructor, user_provided);
2673 FLAG(hasConstexprDefaultConstructor,
constexpr);
2674 FLAG(needsImplicitDefaultConstructor, needs_implicit);
2675 FLAG(defaultedDefaultConstructorIsConstexpr, defaulted_is_constexpr);
2681 OS <<
"CopyConstructor";
2683 FLAG(hasSimpleCopyConstructor, simple);
2684 FLAG(hasTrivialCopyConstructor, trivial);
2685 FLAG(hasNonTrivialCopyConstructor, non_trivial);
2686 FLAG(hasUserDeclaredCopyConstructor, user_declared);
2687 FLAG(hasCopyConstructorWithConstParam, has_const_param);
2688 FLAG(needsImplicitCopyConstructor, needs_implicit);
2689 FLAG(needsOverloadResolutionForCopyConstructor,
2690 needs_overload_resolution);
2691 if (!
D->needsOverloadResolutionForCopyConstructor())
2692 FLAG(defaultedCopyConstructorIsDeleted, defaulted_is_deleted);
2693 FLAG(implicitCopyConstructorHasConstParam, implicit_has_const_param);
2699 OS <<
"MoveConstructor";
2701 FLAG(hasMoveConstructor, exists);
2702 FLAG(hasSimpleMoveConstructor, simple);
2703 FLAG(hasTrivialMoveConstructor, trivial);
2704 FLAG(hasNonTrivialMoveConstructor, non_trivial);
2705 FLAG(hasUserDeclaredMoveConstructor, user_declared);
2706 FLAG(needsImplicitMoveConstructor, needs_implicit);
2707 FLAG(needsOverloadResolutionForMoveConstructor,
2708 needs_overload_resolution);
2709 if (!
D->needsOverloadResolutionForMoveConstructor())
2710 FLAG(defaultedMoveConstructorIsDeleted, defaulted_is_deleted);
2716 OS <<
"CopyAssignment";
2718 FLAG(hasSimpleCopyAssignment, simple);
2719 FLAG(hasTrivialCopyAssignment, trivial);
2720 FLAG(hasNonTrivialCopyAssignment, non_trivial);
2721 FLAG(hasCopyAssignmentWithConstParam, has_const_param);
2722 FLAG(hasUserDeclaredCopyAssignment, user_declared);
2723 FLAG(needsImplicitCopyAssignment, needs_implicit);
2724 FLAG(needsOverloadResolutionForCopyAssignment, needs_overload_resolution);
2725 FLAG(implicitCopyAssignmentHasConstParam, implicit_has_const_param);
2731 OS <<
"MoveAssignment";
2733 FLAG(hasMoveAssignment, exists);
2734 FLAG(hasSimpleMoveAssignment, simple);
2735 FLAG(hasTrivialMoveAssignment, trivial);
2736 FLAG(hasNonTrivialMoveAssignment, non_trivial);
2737 FLAG(hasUserDeclaredMoveAssignment, user_declared);
2738 FLAG(needsImplicitMoveAssignment, needs_implicit);
2739 FLAG(needsOverloadResolutionForMoveAssignment, needs_overload_resolution);
2747 FLAG(hasSimpleDestructor, simple);
2748 FLAG(hasIrrelevantDestructor, irrelevant);
2749 FLAG(hasTrivialDestructor, trivial);
2750 FLAG(hasNonTrivialDestructor, non_trivial);
2751 FLAG(hasUserDeclaredDestructor, user_declared);
2752 FLAG(hasConstexprDestructor,
constexpr);
2753 FLAG(needsImplicitDestructor, needs_implicit);
2754 FLAG(needsOverloadResolutionForDestructor, needs_overload_resolution);
2755 if (!
D->needsOverloadResolutionForDestructor())
2756 FLAG(defaultedDestructorIsDeleted, defaulted_is_deleted);
2760 for (
const auto &I :
D->bases()) {
2766 if (I.isPackExpansion())
2789 if (
const auto *TC =
D->getTypeConstraint()) {
2792 if (TC->getNamedConcept() != TC->getFoundDecl()) {
2797 }
else if (
D->wasDeclaredWithTypename())
2801 OS <<
" depth " <<
D->getDepth() <<
" index " <<
D->getIndex();
2810 OS <<
" depth " <<
D->getDepth() <<
" index " <<
D->getIndex();
2818 OS <<
" depth " <<
D->getDepth() <<
" index " <<
D->getIndex();
2827 OS <<
D->getDeclName();
2840 OS <<
D->getDeclName();
2847 OS <<
D->getDeclName();
2858 if (
D->constructsVirtualBase())
2874 OS <<
"constructed ";
2882 switch (
D->getLanguage()) {
2900 if (
D->isPackExpansion())
2907 if (
D->getSynthesize())
2908 OS <<
" synthesize";
2910 switch (
D->getAccessControl()) {
2930 if (
D->isInstanceMethod())
2937 if (
D->isVariadic())
2943 switch (
D->getVariance()) {
2952 OS <<
" contravariant";
2956 if (
D->hasExplicitBound())
2965 for (
const auto *
P :
D->protocols())
2978 for (
const auto *Child :
D->protocols())
2987 for (
const auto *Child :
D->protocols())
3034 OS <<
" unsafe_unretained";
3049 OS <<
" synthesize";
3057 if (
D->isVariadic())
3060 if (
D->capturesCXXThis())
3061 OS <<
" captures_this";
3070 if (S->hasStoredFPFeatures())
3071 printFPOptions(S->getStoredFPFeatures());
3086 switch (
D->getVersion()) {
3087 case llvm::dxbc::RootSignatureVersion::V1_0:
3090 case llvm::dxbc::RootSignatureVersion::V1_1:
3095 llvm::hlsl::rootsig::dumpRootElements(OS,
D->getRootElements());
3099 OS << (
E->isInOut() ?
" inout" :
" out");
3103 OS <<
" " << S->getDirectiveKind();
3106 if (S->isOrphanedLoopConstruct())
3109 OS <<
" parent: " << S->getParentComputeConstructKind();
3142 if (S->hasReadOnly())
3163 OS <<
' ' << S->getAtomicKind();
3167 OS <<
" " <<
D->getDirectiveKind();
3172 for (
const Stmt *S :
C->children())
3177 OS <<
" " <<
D->getDirectiveKind();
3186 for (
const Stmt *S :
C->children())
3192 const OpenACCRoutineDeclAttr *A) {
3196 for (
const Stmt *S :
C->children())
3202 AddChild(
"begin", [=] { OS << S->getStartingElementPos(); });
3203 AddChild(
"number of elements", [=] { OS << S->getDataElementCount(); });
3212 if (S->hasStoredFPFeatures())
3213 printFPOptions(S->getStoredFPFeatures());
static double GetApproxValue(const llvm::APFloat &F)
static bool isTrivial(ASTContext &Ctx, const Expr *E)
Checks if the expression is constant or does not have non-trivial function calls.
This file defines OpenMP nodes for declarative directives.
Defines the C++ template declaration subclasses.
llvm::MachO::Target Target
Defines the clang::Module class, which describes a module in the source code.
static std::string toString(const clang::SanitizerSet &Sanitizers)
Produce a string containing comma-separated names of sanitizers in Sanitizers set.
static bool canPassInRegisters(Sema &S, CXXRecordDecl *D, TargetInfo::CallingConvKind CCK)
Determine whether a type is permitted to be passed or returned in registers, per C++ [class....
Defines the SourceManager interface.
Defines various enumerations that describe declaration and type specifiers.
static bool isSimpleAPValue(const APValue &Value)
True if the APValue Value can be folded onto the current line.
static void dumpBasePath(raw_ostream &OS, const CastExpr *Node)
static void dumpPreviousDeclImpl(raw_ostream &OS,...)
static void dumpPreviousDecl(raw_ostream &OS, const Decl *D)
Dump the previous declaration in the redeclaration chain for a declaration, if any.
Defines enumerations for the type traits support.
C Language Family Type Representation.
QualType getDynamicAllocType() const
APValue - This class implements a discriminated union of [uninitialized] [APSInt] [APFloat],...
@ Indeterminate
This object has an indeterminate value (C++ [basic.indet]).
@ None
There is no such object (it's outside its lifetime).
Holds long-lived AST nodes (such as types and decls) that can be referred to throughout the semantic ...
TemplateArgument getCanonicalTemplateArgument(const TemplateArgument &Arg) const
Retrieve the "canonical" template argument.
ArrayRef< Decl * > getModuleInitializers(Module *M)
Get the initializations to perform when importing a module, if any.
TemplateName getCanonicalTemplateName(TemplateName Name, bool IgnoreDeduced=false) const
Retrieves the "canonical" template name that refers to a given template.
const clang::PrintingPolicy & getPrintingPolicy() const
ArrayRef< Module * > getModulesWithMergedDefinition(const NamedDecl *Def)
Get the additional modules in which the definition Def has been merged.
Represents an access specifier followed by colon ':'.
AddrLabelExpr - The GNU address of label extension, representing &&label.
An Embarcadero array type trait, as used in the implementation of __array_rank and __array_extent.
Represents an array type, per C99 6.7.5.2 - Array Declarators.
AtomicExpr - Variadic atomic builtins: __atomic_exchange, __atomic_fetch_*, __atomic_load,...
StringRef getOpAsString() const
Attr - This represents one attribute.
attr::Kind getKind() const
bool isImplicit() const
Returns true if the attribute has been implicitly created instead of explicitly written by the user.
SourceRange getRange() const
Represents a C++11 auto or C++14 decltype(auto) type, possibly constrained by a type-constraint.
A builtin binary operation expression such as "x + y" or "x <= y".
StringRef getOpcodeStr() const
A binding in a decomposition declaration.
A class which contains all the information about a particular captured value.
Represents a block literal declaration, which is like an unnamed FunctionDecl.
Represents the builtin template declaration which is used to implement __make_integer_seq and other b...
Represents a base class of a C++ class.
Represents binding an expression to a temporary.
A boolean literal, per ([C++ lex.bool] Boolean literals).
Represents a call to a C++ constructor.
Represents a C++ constructor within a class.
Represents a C++ base or member initializer.
Represents a C++ deduction guide declaration.
A default argument (C++ [dcl.fct.default]).
A use of a default initializer in a constructor or in aggregate initialization.
Represents a delete expression for memory deallocation and destructor calls, e.g.
Represents a C++ member access expression where the actual member referenced could not be resolved be...
Represents an explicit C++ type conversion that uses "functional" notation (C++ [expr....
Represents a static or instance method of a struct/union/class.
Abstract class common to all of the C++ "named"/"keyword" casts.
Represents a new-expression for memory allocation and constructor calls, e.g: "new CXXNewExpr(foo)".
A call to an overloaded operator written using operator syntax.
Represents a C++ struct/union/class.
A C++ static_cast expression (C++ [expr.static.cast]).
Represents the this expression in C++.
Describes an explicit type conversion that uses functional notion but could not be resolved because o...
CallExpr - Represents a function call (C99 6.5.2.2, C++ [expr.call]).
Represents the body of a CapturedStmt, and serves as its DeclContext.
CaseStmt - Represent a case statement.
CastExpr - Base class for type casts, including both implicit casts (ImplicitCastExpr) and explicit c...
const CXXBaseSpecifier *const * path_const_iterator
Declaration of a class template.
Represents a 'co_await' expression.
CompoundAssignOperator - For compound assignments (e.g.
CompoundStmt - This represents a group of statements like { stmt stmt }.
Declaration of a C++20 concept.
A reference to a concept and its template args, as it appears in the code.
SourceRange getSourceRange() const LLVM_READONLY
TemplateDecl * getNamedConcept() const
Represents the specialization of a concept - evaluates to a prvalue of type bool.
Represents the canonical version of C arrays with a specified constant size.
ConstantExpr - An expression that occurs in a constant context and optionally the result of evaluatin...
Represents a shadow constructor declaration introduced into a class by a C++11 using-declaration that...
ConvertVectorExpr - Clang builtin function __builtin_convertvector This AST node provides support for...
Represents a 'co_return' statement in the C++ Coroutines TS.
A reference to a declared variable, function, enum, etc.
Decl - This represents one declaration (or definition), e.g.
Decl * getPreviousDecl()
Retrieve the previous declaration that declares the same entity as this declaration,...
bool isModulePrivate() const
Whether this declaration was marked as being private to the module in which it was defined.
FriendObjectKind getFriendObjectKind() const
Determines whether this declaration is the object of a friend declaration and, if so,...
ASTContext & getASTContext() const LLVM_READONLY
bool isImplicit() const
isImplicit - Indicates whether the declaration was implicitly generated by the implementation.
bool isParameterPack() const
Whether this declaration is a parameter pack.
@ FOK_Undeclared
A friend of a previously-undeclared entity.
@ FOK_None
Not a friend object.
@ FOK_Declared
A friend of a previously-declared entity.
Module * getOwningModule() const
Get the module that owns this declaration (for visibility purposes).
bool isFirstDecl() const
True if this is the first declaration in its redeclaration chain.
bool isFromASTFile() const
Determine whether this declaration came from an AST file (such as a precompiled header or module) rat...
bool isInvalidDecl() const
SourceLocation getLocation() const
const char * getDeclKindName() const
bool isThisDeclarationReferenced() const
Whether this declaration was referenced.
bool isUsed(bool CheckUsedAttr=true) const
Whether any (re-)declaration of the entity was used, meaning that a definition is required.
DeclContext * getDeclContext()
AccessSpecifier getAccess() const
void print(raw_ostream &Out, unsigned Indentation=0, bool PrintInstantiation=false) const
DeclContext * getLexicalDeclContext()
getLexicalDeclContext - The declaration context where this Decl was lexically declared (LexicalDC).
virtual SourceRange getSourceRange() const LLVM_READONLY
Source range that this declaration covers.
The name of a declaration.
Represents a C++17 deduced template specialization type.
TemplateName getUnderlying() const
DefaultArguments getDefaultArguments() const
A qualified reference to a name whose declaration cannot yet be resolved.
Represents an array type in C++ whose size is a value-dependent expression.
Represents an extended vector type where either the type or size is dependent.
NestedNameSpecifier getQualifier() const
Return the nested name specifier that qualifies this name.
SourceRange getSourceRange(bool IncludeQualifier=false) const
For nodes which represent textual entities in the source code, return their SourceRange.
void print(llvm::raw_ostream &OS, const PrintingPolicy &PP) const
Prints the node to the given output stream.
Symbolic representation of a dynamic allocation.
Represents a reference to #emded data.
An instance of this object exists for each enum constant that is defined.
Represents an expression – generally a full-expression – that introduces cleanups to be run at the en...
llvm::PointerUnion< BlockDecl *, CompoundLiteralExpr * > CleanupObject
The type of objects that are kept in the cleanup.
This represents one expression.
bool isValueDependent() const
Determines whether the value of this expression depends on.
ExprValueKind getValueKind() const
getValueKind - The value kind that this expression produces.
bool containsErrors() const
Whether this expression contains subexpressions which had errors.
ExprObjectKind getObjectKind() const
getObjectKind - The object kind that this expression produces.
An expression trait intrinsic.
ExtVectorElementExpr - This represents access to specific elements of a vector, and may occur on the ...
Represents difference between two FPOptions values.
Represents a member of a struct/union/class.
FriendDecl - Represents the declaration of a friend entity, which can be a function,...
Represents a function declaration or definition.
Represents a prototype with parameter type info, e.g.
ExtProtoInfo getExtProtoInfo() const
Declaration of a template function.
FunctionType - C99 6.7.5.3 - Function Declarators.
ExtInfo getExtInfo() const
static StringRef getNameForCallConv(CallingConv CC)
Represents a C11 generic selection.
AssociationTy< true > ConstAssociation
GotoStmt - This represents a direct goto.
HLSLBufferDecl - Represent a cbuffer or tbuffer declaration.
This class represents temporary values used to represent inout and out arguments in HLSL.
A simple pair of identifier info and location.
IfStmt - This represents an if/then/else.
ImplicitCastExpr - Allows us to explicitly represent implicit type conversions, which have no direct ...
Describes a module import declaration, which makes the contents of the named module visible in the cu...
Represents a field injected from an anonymous union/struct into the parent scope.
Describes an C or C++ initializer list.
FieldDecl * getInitializedFieldInUnion()
If this initializes a union, specifies which field in the union to initialize.
The injected class name of a C++ class template or class template partial specialization.
Represents the declaration of a label.
LabelStmt - Represents a label, which has a substatement.
Implicit declaration of a temporary that was materialized by a MaterializeTemporaryExpr and lifetime-...
Represents a linkage specification.
Base class for BreakStmt and ContinueStmt.
Represents a prvalue temporary that is written into memory so that a reference can bind to it.
MemberExpr - [C99 6.5.2.3] Structure and Union Members.
Provides common interface for the Decls that cannot be redeclared, but can be merged if the same decl...
Describes a module or submodule.
This represents a decl that may have a name.
DeclarationName getDeclName() const
Get the actual, stored name of the declaration, which may be a special name.
Represents a C++ namespace alias.
Represent a C++ namespace.
Represents a C++ nested name specifier, such as "\::std::vector<int>::".
const Type * getAsType() const
@ MicrosoftSuper
Microsoft's '__super' specifier, stored as a CXXRecordDecl* of the class it appeared in.
@ Global
The global specifier '::'. There is no stored value.
@ Type
A type, stored as a Type*.
NonTypeTemplateParmDecl - Declares a non-type template parameter, e.g., "Size" in.
Pseudo declaration for capturing expressions.
This is a basic class for representing single OpenMP clause.
This represents '#pragma omp declare reduction ...' directive.
This is a basic class for representing single OpenMP executable directive.
OpenMP 5.0 [2.1.6 Iterators] Iterators are identifiers that expand to multiple values in the clause o...
This represents '#pragma omp requires...' directive.
Represents Objective-C's @catch statement.
ObjCBoolLiteralExpr - Objective-C Boolean Literal.
ObjCBoxedExpr - used for generalized expression boxing.
ObjCCategoryDecl - Represents a category declaration.
ObjCCategoryImplDecl - An object of this class encapsulates a category @implementation declaration.
ObjCCompatibleAliasDecl - Represents alias of a class.
ObjCEncodeExpr, used for @encode in Objective-C.
ObjCImplementationDecl - Represents a class definition - this is where method definitions are specifi...
Represents an ObjC class declaration.
Interfaces are the core concept in Objective-C for object oriented design.
ObjCIvarDecl - Represents an ObjC instance variable.
ObjCIvarRefExpr - A reference to an ObjC instance variable.
An expression that sends a message to the given Objective-C object or class.
@ SuperInstance
The receiver is the instance of the superclass object.
@ Instance
The receiver is an object instance.
@ SuperClass
The receiver is a superclass.
@ Class
The receiver is a class.
ObjCMethodDecl - Represents an instance or class method declaration.
Represents one property declaration in an Objective-C interface.
ObjCPropertyImplDecl - Represents implementation declaration of a property in a class or category imp...
ObjCPropertyRefExpr - A dot-syntax expression to access an ObjC property.
Represents an Objective-C protocol declaration.
ObjCProtocolExpr used for protocol expression in Objective-C.
ObjCSelectorExpr used for @selector in Objective-C.
ObjCSubscriptRefExpr - used for array and dictionary subscripting.
Represents the declaration of an Objective-C type parameter.
This expression type represents an asterisk in an OpenACC Size-Expr, used in the 'tile' and 'gang' cl...
This is the base type for all OpenACC Clauses.
This is the base class for an OpenACC statement-level construct, other construct types are expected t...
This class represents a 'loop' construct.
Represents a pack expansion of types.
Represents a #pragma detect_mismatch line.
[C99 6.4.2.2] - A predefined identifier such as func.
StringRef getIdentKindName() const
Represents an unpacked "presumed" location which can be presented to the user.
unsigned getColumn() const
Return the presumed column number of this location.
const char * getFilename() const
Return the presumed filename of this location.
unsigned getLine() const
Return the presumed line number of this location.
bool isInvalid() const
Return true if this object is invalid or uninitialized.
A (possibly-)qualified type.
std::string getAsString() const
Represents a template name as written in source code.
NestedNameSpecifier getQualifier() const
Return the nested name specifier that qualifies this name.
TemplateName getUnderlyingTemplate() const
Return the underlying template name.
bool hasTemplateKeyword() const
Whether the template name was prefixed by the "template" keyword.
Represents a struct/union/class.
A helper class that allows the use of isa/cast/dyncast to detect TagType objects of structs/unions/cl...
RecordDecl * getOriginalDecl() const
Provides common interface for the Decls that can be redeclared.
Base for LValueReferenceType and RValueReferenceType.
C++2a [expr.prim.req]: A requires-expression provides a concise way to express requirements on templa...
ReturnStmt - This represents a return, optionally of an expression: return; return 4;.
Represents an expression that computes the length of a parameter pack.
Encodes a location in the source.
PresumedLoc getPresumedLoc(SourceLocation Loc, bool UseLineDirectives=true) const
Returns the "presumed" location of a SourceLocation specifies.
SourceLocation getSpellingLoc(SourceLocation Loc) const
Given a SourceLocation object, return the spelling location referenced by the ID.
A trivial tuple used to represent a source range.
SourceLocation getEnd() const
SourceLocation getBegin() const
RetTy Visit(PTR(Stmt) S, ParamTys... P)
Stmt - This represents one statement.
StringLiteral - This represents a string literal expression, e.g.
void outputString(raw_ostream &OS) const
A structure for storing the information associated with a substituted template template parameter.
TemplateName getReplacement() const
TemplateTemplateParmDecl * getParameter() const
UnsignedOrNone getPackIndex() const
unsigned getIndex() const
Returns the index of the replaced parameter in the associated declaration.
Decl * getAssociatedDecl() const
A template-like entity which owns the whole pattern being substituted.
Represents the result of substituting a set of types for a template type parameter pack.
Represents the result of substituting a type for a template type parameter.
SwitchStmt - This represents a 'switch' stmt.
Represents a template argument.
TemplateName getAsTemplate() const
Retrieve the template name for a template name argument.
bool structurallyEquals(const TemplateArgument &Other) const
Determines whether two template arguments are superficially the same.
void print(const PrintingPolicy &Policy, raw_ostream &Out, bool IncludeType) const
Print this template argument to the given output stream.
ValueDecl * getAsDecl() const
Retrieve the declaration for a declaration non-type template argument.
bool isCanonicalExpr() const
TemplateName getAsTemplateOrTemplatePattern() const
Retrieve the template argument as a template name; if the argument is a pack expansion,...
Represents a C++ template name within the type system.
TemplateDecl * getAsTemplateDecl(bool IgnoreDeduced=false) const
Retrieve the underlying template declaration that this template name refers to, if known.
DeducedTemplateStorage * getAsDeducedTemplateName() const
Retrieve the deduced template info, if any.
DependentTemplateName * getAsDependentTemplateName() const
Retrieve the underlying dependent template name structure, if any.
QualifiedTemplateName * getAsQualifiedTemplateName() const
Retrieve the underlying qualified template name structure, if any.
void print(raw_ostream &OS, const PrintingPolicy &Policy, Qualified Qual=Qualified::AsWritten) const
Print the template name.
@ UsingTemplate
A template name that refers to a template declaration found through a specific using shadow declarati...
@ OverloadedTemplate
A set of overloaded template declarations.
@ Template
A single template declaration.
@ DependentTemplate
A dependent template name that has not been resolved to a template (or set of templates).
@ SubstTemplateTemplateParm
A template template parameter that has been substituted for some other template name.
@ SubstTemplateTemplateParmPack
A template template parameter pack that has been substituted for a template template argument pack,...
@ DeducedTemplate
A template name that refers to another TemplateName with deduced default arguments.
@ QualifiedTemplate
A qualified template name, where the qualification is kept to describe the source code as written.
@ AssumedTemplate
An unqualified-id that has been assumed to name a function template that will be found by ADL.
UsingShadowDecl * getAsUsingShadowDecl() const
Retrieve the using shadow declaration through which the underlying template declaration is introduced...
SubstTemplateTemplateParmStorage * getAsSubstTemplateTemplateParm() const
Retrieve the substituted template template parameter, if known.
Represents a type template specialization; the template must be a class template, a type alias templa...
TemplateTemplateParmDecl - Declares a template template parameter, e.g., "T" in.
Declaration of a template type parameter.
void VisitCXXFunctionalCastExpr(const CXXFunctionalCastExpr *Node)
void VisitEnumDecl(const EnumDecl *D)
void VisitExprWithCleanups(const ExprWithCleanups *Node)
void visitInlineCommandComment(const comments::InlineCommandComment *C, const comments::FullComment *)
void VisitCXXStaticCastExpr(const CXXStaticCastExpr *Node)
void visitVerbatimBlockComment(const comments::VerbatimBlockComment *C, const comments::FullComment *)
void dumpPointer(const void *Ptr)
void VisitDeclarationTemplateArgument(const TemplateArgument &TA)
void VisitOpenACCLoopConstruct(const OpenACCLoopConstruct *S)
void VisitLinkageSpecDecl(const LinkageSpecDecl *D)
void VisitVectorType(const VectorType *T)
void VisitLoopControlStmt(const LoopControlStmt *L)
void VisitHLSLRootSignatureDecl(const HLSLRootSignatureDecl *D)
void VisitCoawaitExpr(const CoawaitExpr *Node)
void VisitUnaryOperator(const UnaryOperator *Node)
void dumpAccessSpecifier(AccessSpecifier AS)
void VisitHLSLOutArgExpr(const HLSLOutArgExpr *E)
void VisitDeducedTemplateSpecializationType(const DeducedTemplateSpecializationType *T)
void VisitObjCSelectorExpr(const ObjCSelectorExpr *Node)
void VisitCXXOperatorCallExpr(const CXXOperatorCallExpr *Node)
void VisitCXXUnresolvedConstructExpr(const CXXUnresolvedConstructExpr *Node)
void VisitPragmaCommentDecl(const PragmaCommentDecl *D)
void VisitOpenACCRoutineDecl(const OpenACCRoutineDecl *D)
void VisitDependentScopeDeclRefExpr(const DependentScopeDeclRefExpr *Node)
void VisitImportDecl(const ImportDecl *D)
void VisitUsingEnumDecl(const UsingEnumDecl *D)
void VisitOMPCapturedExprDecl(const OMPCapturedExprDecl *D)
void VisitUnresolvedUsingType(const UnresolvedUsingType *T)
void VisitObjCProtocolExpr(const ObjCProtocolExpr *Node)
void VisitIntegralTemplateArgument(const TemplateArgument &TA)
void VisitObjCCategoryDecl(const ObjCCategoryDecl *D)
void VisitIndirectFieldDecl(const IndirectFieldDecl *D)
void VisitNullTemplateArgument(const TemplateArgument &TA)
void VisitPackTemplateArgument(const TemplateArgument &TA)
void VisitUsingType(const UsingType *T)
void VisitInjectedClassNameType(const InjectedClassNameType *T)
void VisitBinaryOperator(const BinaryOperator *Node)
void VisitUnresolvedLookupExpr(const UnresolvedLookupExpr *Node)
void VisitObjCInterfaceDecl(const ObjCInterfaceDecl *D)
void VisitBlockDecl(const BlockDecl *D)
void VisitCXXDeleteExpr(const CXXDeleteExpr *Node)
void VisitObjCBoxedExpr(const ObjCBoxedExpr *Node)
void VisitNullPtrTemplateArgument(const TemplateArgument &TA)
void VisitVarTemplateDecl(const VarTemplateDecl *D)
void VisitSubstTemplateTypeParmPackType(const SubstTemplateTypeParmPackType *T)
void VisitConceptSpecializationExpr(const ConceptSpecializationExpr *Node)
void VisitCXXDeductionGuideDecl(const CXXDeductionGuideDecl *D)
TextNodeDumper(raw_ostream &OS, const ASTContext &Context, bool ShowColors)
void VisitPredefinedExpr(const PredefinedExpr *Node)
void dumpType(QualType T)
void VisitObjCEncodeExpr(const ObjCEncodeExpr *Node)
void dumpNestedNameSpecifier(NestedNameSpecifier NNS)
void VisitStructuralValueTemplateArgument(const TemplateArgument &TA)
void VisitHLSLBufferDecl(const HLSLBufferDecl *D)
void VisitUnresolvedUsingValueDecl(const UnresolvedUsingValueDecl *D)
void VisitNamespaceAliasDecl(const NamespaceAliasDecl *D)
void VisitObjCMessageExpr(const ObjCMessageExpr *Node)
void dumpSourceRange(SourceRange R)
void VisitMemberExpr(const MemberExpr *Node)
void VisitOpenACCDataConstruct(const OpenACCDataConstruct *S)
void dumpBareTemplateName(TemplateName TN)
void VisitOpenACCConstructStmt(const OpenACCConstructStmt *S)
void VisitCompoundStmt(const CompoundStmt *Node)
void VisitConstantExpr(const ConstantExpr *Node)
void VisitObjCIvarRefExpr(const ObjCIvarRefExpr *Node)
void VisitOpenACCDeclareDecl(const OpenACCDeclareDecl *D)
void VisitOpenACCAsteriskSizeExpr(const OpenACCAsteriskSizeExpr *S)
void VisitMaterializeTemporaryExpr(const MaterializeTemporaryExpr *Node)
void VisitConstructorUsingShadowDecl(const ConstructorUsingShadowDecl *D)
void VisitWhileStmt(const WhileStmt *Node)
void VisitCharacterLiteral(const CharacterLiteral *Node)
void VisitAccessSpecDecl(const AccessSpecDecl *D)
void VisitFunctionType(const FunctionType *T)
void VisitObjCImplementationDecl(const ObjCImplementationDecl *D)
void VisitReturnStmt(const ReturnStmt *Node)
void VisitTypeLoc(TypeLoc TL)
void VisitAutoType(const AutoType *T)
void VisitObjCInterfaceType(const ObjCInterfaceType *T)
void visitVerbatimLineComment(const comments::VerbatimLineComment *C, const comments::FullComment *)
void VisitTypedefDecl(const TypedefDecl *D)
void VisitUnaryExprOrTypeTraitExpr(const UnaryExprOrTypeTraitExpr *Node)
void visitParamCommandComment(const comments::ParamCommandComment *C, const comments::FullComment *FC)
void VisitIntegerLiteral(const IntegerLiteral *Node)
void VisitObjCProtocolDecl(const ObjCProtocolDecl *D)
void VisitGotoStmt(const GotoStmt *Node)
void VisitDependentSizedExtVectorType(const DependentSizedExtVectorType *T)
void VisitFriendDecl(const FriendDecl *D)
void VisitSwitchStmt(const SwitchStmt *Node)
void VisitCXXBindTemporaryExpr(const CXXBindTemporaryExpr *Node)
void VisitEmbedExpr(const EmbedExpr *S)
void VisitFunctionTemplateDecl(const FunctionTemplateDecl *D)
void VisitTemplateTemplateParmDecl(const TemplateTemplateParmDecl *D)
void VisitUsingDecl(const UsingDecl *D)
void VisitConstantArrayType(const ConstantArrayType *T)
void VisitTypeTemplateArgument(const TemplateArgument &TA)
void VisitObjCPropertyDecl(const ObjCPropertyDecl *D)
void VisitObjCCategoryImplDecl(const ObjCCategoryImplDecl *D)
void VisitObjCSubscriptRefExpr(const ObjCSubscriptRefExpr *Node)
void VisitArrayType(const ArrayType *T)
void visitHTMLEndTagComment(const comments::HTMLEndTagComment *C, const comments::FullComment *)
void VisitObjCAtCatchStmt(const ObjCAtCatchStmt *Node)
void visitTextComment(const comments::TextComment *C, const comments::FullComment *)
void VisitLifetimeExtendedTemporaryDecl(const LifetimeExtendedTemporaryDecl *D)
void VisitCXXRecordDecl(const CXXRecordDecl *D)
void VisitTemplateTemplateArgument(const TemplateArgument &TA)
void dumpCleanupObject(const ExprWithCleanups::CleanupObject &C)
void VisitOpenACCExitDataConstruct(const OpenACCExitDataConstruct *S)
void VisitCaseStmt(const CaseStmt *Node)
void VisitRValueReferenceType(const ReferenceType *T)
void VisitPackExpansionType(const PackExpansionType *T)
void VisitConceptDecl(const ConceptDecl *D)
void VisitOpenACCEnterDataConstruct(const OpenACCEnterDataConstruct *S)
void VisitCallExpr(const CallExpr *Node)
void VisitCapturedDecl(const CapturedDecl *D)
void VisitOpenACCWaitConstruct(const OpenACCWaitConstruct *S)
void VisitBuiltinTemplateDecl(const BuiltinTemplateDecl *D)
void VisitObjCPropertyRefExpr(const ObjCPropertyRefExpr *Node)
void VisitOMPDeclareReductionDecl(const OMPDeclareReductionDecl *D)
void VisitCoreturnStmt(const CoreturnStmt *Node)
void VisitSizeOfPackExpr(const SizeOfPackExpr *Node)
void VisitDeclRefExpr(const DeclRefExpr *Node)
void VisitLabelStmt(const LabelStmt *Node)
void VisitOpenACCUpdateConstruct(const OpenACCUpdateConstruct *S)
void Visit(const comments::Comment *C, const comments::FullComment *FC)
void VisitLabelDecl(const LabelDecl *D)
void VisitUnaryTransformType(const UnaryTransformType *T)
void VisitStringLiteral(const StringLiteral *Str)
void VisitOMPRequiresDecl(const OMPRequiresDecl *D)
void dumpBareType(QualType T, bool Desugar=true)
void VisitTemplateSpecializationType(const TemplateSpecializationType *T)
void VisitOpenACCInitConstruct(const OpenACCInitConstruct *S)
void VisitTemplateTypeParmDecl(const TemplateTypeParmDecl *D)
void VisitCompoundAssignOperator(const CompoundAssignOperator *Node)
void VisitCXXThisExpr(const CXXThisExpr *Node)
void VisitOpenACCRoutineDeclAttr(const OpenACCRoutineDeclAttr *A)
void dumpName(const NamedDecl *ND)
void dumpTemplateName(TemplateName TN, StringRef Label={})
void VisitArrayTypeTraitExpr(const ArrayTypeTraitExpr *Node)
void VisitObjCIvarDecl(const ObjCIvarDecl *D)
void VisitFieldDecl(const FieldDecl *D)
void dumpDeclRef(const Decl *D, StringRef Label={})
void VisitRecordDecl(const RecordDecl *D)
void VisitCXXNewExpr(const CXXNewExpr *Node)
void VisitObjCBoolLiteralExpr(const ObjCBoolLiteralExpr *Node)
void VisitCastExpr(const CastExpr *Node)
void VisitObjCTypeParamDecl(const ObjCTypeParamDecl *D)
void VisitSubstTemplateTypeParmType(const SubstTemplateTypeParmType *T)
void VisitExpressionTraitExpr(const ExpressionTraitExpr *Node)
void VisitAddrLabelExpr(const AddrLabelExpr *Node)
void VisitUnresolvedUsingTypenameDecl(const UnresolvedUsingTypenameDecl *D)
void VisitCXXDependentScopeMemberExpr(const CXXDependentScopeMemberExpr *Node)
void VisitOpenACCAtomicConstruct(const OpenACCAtomicConstruct *S)
void visitBlockCommandComment(const comments::BlockCommandComment *C, const comments::FullComment *)
void VisitExpressionTemplateArgument(const TemplateArgument &TA)
void VisitTypeAliasDecl(const TypeAliasDecl *D)
void VisitVarDecl(const VarDecl *D)
void VisitOpenACCCacheConstruct(const OpenACCCacheConstruct *S)
void VisitFixedPointLiteral(const FixedPointLiteral *Node)
void VisitOMPIteratorExpr(const OMPIteratorExpr *Node)
void VisitUsingDirectiveDecl(const UsingDirectiveDecl *D)
void VisitObjCMethodDecl(const ObjCMethodDecl *D)
void VisitObjCPropertyImplDecl(const ObjCPropertyImplDecl *D)
void VisitUsingShadowDecl(const UsingShadowDecl *D)
void VisitNamespaceDecl(const NamespaceDecl *D)
void VisitTypeAliasTemplateDecl(const TypeAliasTemplateDecl *D)
void VisitOpenACCHostDataConstruct(const OpenACCHostDataConstruct *S)
void VisitCXXBoolLiteralExpr(const CXXBoolLiteralExpr *Node)
void VisitIfStmt(const IfStmt *Node)
void VisitCXXConstructExpr(const CXXConstructExpr *Node)
void VisitFunctionProtoType(const FunctionProtoType *T)
void dumpTemplateArgument(const TemplateArgument &TA)
void dumpLocation(SourceLocation Loc)
void VisitDependentSizedArrayType(const DependentSizedArrayType *T)
void VisitOpenACCCombinedConstruct(const OpenACCCombinedConstruct *S)
void VisitOMPExecutableDirective(const OMPExecutableDirective *D)
void VisitImplicitCastExpr(const ImplicitCastExpr *Node)
void VisitCXXDefaultArgExpr(const CXXDefaultArgExpr *Node)
void VisitCXXNamedCastExpr(const CXXNamedCastExpr *Node)
void VisitTagType(const TagType *T)
void VisitTemplateExpansionTemplateArgument(const TemplateArgument &TA)
void VisitSYCLUniqueStableNameExpr(const SYCLUniqueStableNameExpr *Node)
void VisitNonTypeTemplateParmDecl(const NonTypeTemplateParmDecl *D)
void VisitOpenACCSetConstruct(const OpenACCSetConstruct *S)
void VisitFunctionDecl(const FunctionDecl *D)
void visitTParamCommandComment(const comments::TParamCommandComment *C, const comments::FullComment *FC)
void VisitTypeTraitExpr(const TypeTraitExpr *Node)
void dumpBareDeclRef(const Decl *D)
void VisitExtVectorElementExpr(const ExtVectorElementExpr *Node)
void VisitConvertVectorExpr(const ConvertVectorExpr *S)
void visitVerbatimBlockLineComment(const comments::VerbatimBlockLineComment *C, const comments::FullComment *)
void VisitOpenACCShutdownConstruct(const OpenACCShutdownConstruct *S)
void VisitFloatingLiteral(const FloatingLiteral *Node)
void VisitInitListExpr(const InitListExpr *ILE)
void VisitRequiresExpr(const RequiresExpr *Node)
void VisitVariableArrayType(const VariableArrayType *T)
void VisitGenericSelectionExpr(const GenericSelectionExpr *E)
void VisitTemplateTypeParmType(const TemplateTypeParmType *T)
void VisitCXXDefaultInitExpr(const CXXDefaultInitExpr *Node)
void visitHTMLStartTagComment(const comments::HTMLStartTagComment *C, const comments::FullComment *)
void VisitEnumConstantDecl(const EnumConstantDecl *D)
void VisitPragmaDetectMismatchDecl(const PragmaDetectMismatchDecl *D)
void dumpTemplateSpecializationKind(TemplateSpecializationKind TSK)
void VisitAtomicExpr(const AtomicExpr *AE)
void VisitObjCCompatibleAliasDecl(const ObjCCompatibleAliasDecl *D)
void VisitClassTemplateDecl(const ClassTemplateDecl *D)
void VisitBindingDecl(const BindingDecl *D)
void VisitTypedefType(const TypedefType *T)
void AddChild(Fn DoAddChild)
Add a child of the current node. Calls DoAddChild without arguments.
Represents the declaration of a typedef-name via a C++11 alias-declaration.
Declaration of an alias template.
Symbolic representation of typeid(T) for some type T.
RetTy Visit(TypeLoc TyLoc)
Base wrapper for a particular "section" of type source info.
QualType getType() const
Get the type for which this source info wrapper provides information.
SourceRange getSourceRange() const LLVM_READONLY
Get the full source range.
TypeLocClass getTypeLocClass() const
const Type * getTypePtr() const
A container of type source information.
QualType getType() const
Return the type wrapped by this type source info.
A type trait used in the implementation of various C++11 and Library TR1 trait templates.
RetTy Visit(const Type *T)
Performs the operation associated with this visitor object.
The base class of the type hierarchy.
QualType getLocallyUnqualifiedSingleStepDesugaredType() const
Pull a single level of sugar off of this locally-unqualified type.
bool isInstantiationDependentType() const
Determine whether this type is an instantiation-dependent type, meaning that the type involves a temp...
bool isDependentType() const
Whether this type is a dependent type, meaning that its definition somehow depends on a template para...
bool containsUnexpandedParameterPack() const
Whether this type is or contains an unexpanded parameter pack, used to support C++0x variadic templat...
const char * getTypeClassName() const
bool containsErrors() const
Whether this type is an error type.
bool isVariablyModifiedType() const
Whether this type is a variably-modified type (C99 6.7.5).
bool isFromAST() const
Whether this type comes from an AST file.
bool isCanonicalUnqualified() const
Determines if this type would be canonical if it had no further qualification.
Represents the declaration of a typedef-name via the 'typedef' type specifier.
UnaryExprOrTypeTraitExpr - expression with either a type or (unevaluated) expression operand.
UnaryOperator - This represents the unary-expression's (except sizeof and alignof),...
static StringRef getOpcodeStr(Opcode Op)
getOpcodeStr - Turn an Opcode enum value into the punctuation char it corresponds to,...
A reference to a name which we were able to look up during parsing but could not resolve to a specifi...
The iterator over UnresolvedSets.
Represents the dependent type named by a dependently-scoped typename using declaration,...
Represents a dependent using declaration which was marked with typename.
Represents a dependent using declaration which was not marked with typename.
Represents a C++ using-declaration.
Represents C++ using-directive.
Represents a C++ using-enum-declaration.
Represents a shadow declaration implicitly introduced into a scope by a (resolved) using-declaration ...
NamedDecl * getTargetDecl() const
Gets the underlying declaration which has been brought into the local scope.
Represent the declaration of a variable (in which case it is an lvalue) a function (in which case it ...
Represents a variable declaration or definition.
static const char * getStorageClassSpecifierString(StorageClass SC)
Return the string used to specify the storage class SC.
@ ListInit
Direct list-initialization (C++11)
@ CInit
C-style initialization with assignment.
@ ParenListInit
Parenthesized list-initialization (C++20)
@ CallInit
Call-style initialization (C++98)
@ TLS_Static
TLS with a known-constant initializer.
@ TLS_Dynamic
TLS with a dynamic initializer.
@ TLS_None
Not a TLS variable.
Declaration of a variable template.
Represents a C array with a specified size that is not an integer-constant-expression.
Represents a GCC generic vector type.
WhileStmt - This represents a 'while' stmt.
A static requirement that can be used in a requires-expression to check properties of types and expre...
RequirementKind getKind() const
bool containsUnexpandedParameterPack() const
RetTy Visit(REF(TemplateArgument) TA, ParamTys... P)
The JSON file list parser is used to communicate input to InstallAPI.
static const TerminalColor NullColor
static const TerminalColor ErrorsColor
static const TerminalColor CommentColor
static const TerminalColor DeclNameColor
if(T->getSizeExpr()) TRY_TO(TraverseStmt(const_cast< Expr * >(T -> getSizeExpr())))
llvm::StringRef getAccessSpelling(AccessSpecifier AS)
static const TerminalColor AddressColor
@ RQ_None
No ref-qualifier was provided.
@ RQ_LValue
An lvalue ref-qualifier was provided (&).
@ RQ_RValue
An rvalue ref-qualifier was provided (&&).
@ OK_VectorComponent
A vector component is an element or range of elements on a vector.
@ OK_ObjCProperty
An Objective-C property is a logical field of an Objective-C object which is read and written via Obj...
@ OK_ObjCSubscript
An Objective-C array/dictionary subscripting which reads an object or writes at the subscripted array...
@ OK_Ordinary
An ordinary object is located at an address in memory.
@ OK_BitField
A bitfield object is a bitfield on a C or C++ record.
@ OK_MatrixComponent
A matrix component is a single element of a matrix.
static const TerminalColor StmtColor
static const TerminalColor UndeserializedColor
@ Override
Merge availability attributes for an override, which requires an exact match or a weakening of constr...
@ Auto
'auto' clause, allowed on 'loop' directives.
@ Bind
'bind' clause, allowed on routine constructs.
@ Gang
'gang' clause, allowed on 'loop' and Combined constructs.
@ Wait
'wait' clause, allowed on Compute, Data, 'update', and Combined constructs.
@ DevicePtr
'deviceptr' clause, allowed on Compute and Combined Constructs, plus 'data' and 'declare'.
@ PCopyOut
'copyout' clause alias 'pcopyout'. Preserved for diagnostic purposes.
@ VectorLength
'vector_length' clause, allowed on 'parallel', 'kernels', 'parallel loop', and 'kernels loop' constru...
@ Async
'async' clause, allowed on Compute, Data, 'update', 'wait', and Combined constructs.
@ PresentOrCreate
'create' clause alias 'present_or_create'.
@ Collapse
'collapse' clause, allowed on 'loop' and Combined constructs.
@ NoHost
'nohost' clause, allowed on 'routine' directives.
@ PresentOrCopy
'copy' clause alias 'present_or_copy'. Preserved for diagnostic purposes.
@ DeviceNum
'device_num' clause, allowed on 'init', 'shutdown', and 'set' constructs.
@ Private
'private' clause, allowed on 'parallel', 'serial', 'loop', 'parallel loop', and 'serial loop' constru...
@ Invalid
Represents an invalid clause, for the purposes of parsing.
@ Vector
'vector' clause, allowed on 'loop', Combined, and 'routine' directives.
@ Copy
'copy' clause, allowed on Compute and Combined Constructs, plus 'data' and 'declare'.
@ Worker
'worker' clause, allowed on 'loop', Combined, and 'routine' directives.
@ Create
'create' clause, allowed on Compute and Combined constructs, plus 'data', 'enter data',...
@ DeviceType
'device_type' clause, allowed on Compute, 'data', 'init', 'shutdown', 'set', update',...
@ DefaultAsync
'default_async' clause, allowed on 'set' construct.
@ Attach
'attach' clause, allowed on Compute and Combined constructs, plus 'data' and 'enter data'.
@ Shortloop
'shortloop' is represented in the ACC.td file, but isn't present in the standard.
@ NumGangs
'num_gangs' clause, allowed on 'parallel', 'kernels', parallel loop', and 'kernels loop' constructs.
@ If
'if' clause, allowed on all the Compute Constructs, Data Constructs, Executable Constructs,...
@ Default
'default' clause, allowed on parallel, serial, kernel (and compound) constructs.
@ UseDevice
'use_device' clause, allowed on 'host_data' construct.
@ NoCreate
'no_create' clause, allowed on allowed on Compute and Combined constructs, plus 'data'.
@ PresentOrCopyOut
'copyout' clause alias 'present_or_copyout'.
@ Link
'link' clause, allowed on 'declare' construct.
@ Reduction
'reduction' clause, allowed on Parallel, Serial, Loop, and the combined constructs.
@ Self
'self' clause, allowed on Compute and Combined Constructs, plus 'update'.
@ CopyOut
'copyout' clause, allowed on Compute and Combined constructs, plus 'data', 'exit data',...
@ Seq
'seq' clause, allowed on 'loop' and 'routine' directives.
@ FirstPrivate
'firstprivate' clause, allowed on 'parallel', 'serial', 'parallel loop', and 'serial loop' constructs...
@ Host
'host' clause, allowed on 'update' construct.
@ PCopy
'copy' clause alias 'pcopy'. Preserved for diagnostic purposes.
@ Tile
'tile' clause, allowed on 'loop' and Combined constructs.
@ PCopyIn
'copyin' clause alias 'pcopyin'. Preserved for diagnostic purposes.
@ DeviceResident
'device_resident' clause, allowed on the 'declare' construct.
@ PCreate
'create' clause alias 'pcreate'. Preserved for diagnostic purposes.
@ Present
'present' clause, allowed on Compute and Combined constructs, plus 'data' and 'declare'.
@ DType
'dtype' clause, an alias for 'device_type', stored separately for diagnostic purposes.
@ CopyIn
'copyin' clause, allowed on Compute and Combined constructs, plus 'data', 'enter data',...
@ Device
'device' clause, allowed on the 'update' construct.
@ Independent
'independent' clause, allowed on 'loop' directives.
@ NumWorkers
'num_workers' clause, allowed on 'parallel', 'kernels', parallel loop', and 'kernels loop' constructs...
@ IfPresent
'if_present' clause, allowed on 'host_data' and 'update' directives.
@ Detach
'detach' clause, allowed on the 'exit data' construct.
@ Delete
'delete' clause, allowed on the 'exit data' construct.
@ PresentOrCopyIn
'copyin' clause alias 'present_or_copyin'.
@ Finalize
'finalize' clause, allowed on 'exit data' directive.
AccessSpecifier
A C++ access specifier (public, private, protected), plus the special value "none" which means differ...
StorageClass
Storage classes.
static const TerminalColor DeclKindNameColor
static const TerminalColor LocationColor
static const TerminalColor ValueKindColor
static const TerminalColor CastColor
@ VK_PRValue
A pr-value expression (in the C++11 taxonomy) produces a temporary value.
@ VK_XValue
An x-value expression is a reference to an object with independent storage but which can be "moved",...
@ VK_LValue
An l-value expression is a reference to an object with independent storage.
const char * getTraitSpelling(ExpressionTrait T) LLVM_READONLY
Return the spelling of the type trait TT. Never null.
const FunctionProtoType * T
static const TerminalColor AttrColor
static const TerminalColor TypeColor
TemplateSpecializationKind
Describes the kind of template specialization that a particular template specialization declaration r...
@ TSK_ExplicitInstantiationDefinition
This template specialization was instantiated from a template due to an explicit instantiation defini...
@ TSK_ExplicitInstantiationDeclaration
This template specialization was instantiated from a template due to an explicit instantiation declar...
@ TSK_ExplicitSpecialization
This template specialization was declared or defined by an explicit specialization (C++ [temp....
@ TSK_ImplicitInstantiation
This template specialization was implicitly instantiated from a template.
@ TSK_Undeclared
This template specialization was formed from a template-id but has not yet been declared,...
@ Invariant
The parameter is invariant: must match exactly.
@ Contravariant
The parameter is contravariant, e.g., X<T> is a subtype of X when the type parameter is covariant and...
@ Covariant
The parameter is covariant, e.g., X<T> is a subtype of X when the type parameter is covariant and T i...
const char * getOperatorSpelling(OverloadedOperatorKind Operator)
Retrieve the spelling of the given overloaded operator, without the preceding "operator" keyword.
@ AltiVecBool
is AltiVec 'vector bool ...'
@ SveFixedLengthData
is AArch64 SVE fixed-length data vector
@ AltiVecVector
is AltiVec vector
@ AltiVecPixel
is AltiVec 'vector Pixel'
@ Generic
not a target-specific vector type
@ RVVFixedLengthData
is RISC-V RVV fixed-length data vector
@ RVVFixedLengthMask
is RISC-V RVV fixed-length mask vector
@ NeonPoly
is ARM Neon polynomial vector
@ SveFixedLengthPredicate
is AArch64 SVE fixed-length predicate vector
static const TerminalColor ValueColor
ElaboratedTypeKeyword
The elaboration keyword that precedes a qualified type name or introduces an elaborated-type-specifie...
@ None
No keyword precedes the qualified type name.
@ EST_DependentNoexcept
noexcept(expression), value-dependent
@ EST_Uninstantiated
not instantiated yet
@ EST_Unparsed
not parsed yet
@ EST_NoThrow
Microsoft __declspec(nothrow) extension.
@ EST_None
no exception specification
@ EST_MSAny
Microsoft throw(...) extension.
@ EST_BasicNoexcept
noexcept
@ EST_NoexceptFalse
noexcept(expression), evals to 'false'
@ EST_Unevaluated
not evaluated yet, for special member function
@ EST_NoexceptTrue
noexcept(expression), evals to 'true'
@ EST_Dynamic
throw(T1, T2)
static const TerminalColor ObjectKindColor
@ NOUR_Discarded
This name appears as a potential result of a discarded value expression.
@ NOUR_Unevaluated
This name appears in an unevaluated operand.
@ NOUR_None
This is an odr-use.
@ NOUR_Constant
This name appears as a potential result of an lvalue-to-rvalue conversion that is a constant expressi...
FunctionDecl * SourceDecl
The function whose exception specification this is, for EST_Unevaluated and EST_Uninstantiated.
FunctionDecl * SourceTemplate
The function template whose exception specification this is instantiated from, for EST_Uninstantiated...
ExceptionSpecificationType Type
The kind of exception specification this is.
Extra information about a function prototype.
ExceptionSpecInfo ExceptionSpec
static StringRef getKeywordName(ElaboratedTypeKeyword Keyword)
Iterator range representation begin:end[:step].
A std::pair-like structure for storing a qualified type split into its local qualifiers and its local...