26#include "llvm/ADT/StringExtras.h"
37 const T *
First =
D->getFirstDecl();
39 OS <<
" first " <<
First;
46 OS <<
" prev " << Prev;
53#define DECL(DERIVED, BASE) \
55 return dumpPreviousDeclImpl(OS, cast<DERIVED##Decl>(D));
56#define ABSTRACT_DECL(DECL)
57#include "clang/AST/DeclNodes.inc"
59 llvm_unreachable(
"Decl that isn't part of DeclNodes.inc!");
65 Context(&Context),
SM(&Context.getSourceManager()),
66 PrintPolicy(Context.getPrintingPolicy()),
67 Traits(&Context.getCommentCommandTraits()) {}
82 OS <<
C->getCommentKindName();
100#include "clang/Basic/AttrList.inc"
116 OS <<
"TemplateArgument";
134 OS <<
Node->getStmtClassName();
139 if (
const auto *
E = dyn_cast<Expr>(
Node)) {
144 OS <<
" contains-errors";
170 OS <<
" objcproperty";
173 OS <<
" objcsubscript";
176 OS <<
" vectorcomponent";
179 OS <<
" matrixcomponent";
194 if (isa<LocInfoType>(
T)) {
197 OS <<
"LocInfo Type";
218 OS <<
" contains-errors";
224 OS <<
" instantiation_dependent";
227 OS <<
" variably_modified";
229 OS <<
" contains_unexpanded_pack";
241 OS <<
" " <<
T.split().Quals.getAsString();
286 OS <<
" in " << M->getFullModuleName();
287 if (
auto *ND = dyn_cast<NamedDecl>(
D))
290 AddChild([=] { OS <<
"also in " << M->getFullModuleName(); });
291 if (
const NamedDecl *ND = dyn_cast<NamedDecl>(
D))
292 if (!ND->isUnconditionallyVisible())
305 if (FD->isConstexprSpecified())
307 if (FD->isConsteval())
309 else if (FD->isImmediateFunction())
311 if (FD->isMultiVersion())
312 OS <<
" multiversion";
315 if (!isa<FunctionDecl>(*
D)) {
316 const auto *MD = dyn_cast<ObjCMethodDecl>(
D);
317 if (!MD || !MD->isThisDeclarationADefinition()) {
318 const auto *DC = dyn_cast<DeclContext>(
D);
319 if (DC && DC->hasExternalLexicalStorage()) {
321 OS <<
" <undeserialized declarations>";
333 OS <<
" friend_undeclared";
341 OS <<
"CXXCtorInitializer";
342 if (
Init->isAnyMemberInitializer()) {
345 }
else if (
Init->isBaseInitializer()) {
347 }
else if (
Init->isDelegatingInitializer()) {
350 llvm_unreachable(
"Unknown initializer type");
360 if (
C.getVariable()) {
369 OS <<
"<<<NULL>>> OMPClause";
374 StringRef ClauseName(llvm::omp::getOpenMPClauseName(
C->getClauseKind()));
375 OS <<
"OMP" << ClauseName.substr(0, 1).upper()
376 << ClauseName.drop_front() <<
"Clause";
387 OS <<
"<<<NULL>>> OpenACCClause";
392 OS <<
C->getClauseKind();
396 switch (
C->getClauseKind()) {
398 OS << '(' << cast<OpenACCDefaultClause>(
C)->getDefaultClauseKind() <<
')';
426 if (cast<OpenACCCopyInClause>(
C)->isReadOnly())
433 if (cast<OpenACCCopyOutClause>(
C)->isZero())
440 if (cast<OpenACCCreateClause>(
C)->isZero())
445 if (cast<OpenACCWaitClause>(
C)->hasDevNumExpr())
447 if (cast<OpenACCWaitClause>(
C)->hasQueuesTag())
448 OS <<
" has queues tag";
453 llvm::interleaveComma(
454 cast<OpenACCDeviceTypeClause>(
C)->getArchitectures(), OS,
456 if (Arch.first ==
nullptr)
459 OS << Arch.first->getName();
464 OS <<
" clause Operator: "
465 << cast<OpenACCReductionClause>(
C)->getReductionOp();
492 OS <<
"<<<NULL>>> ConceptReference";
496 OS <<
"ConceptReference";
506 OS <<
"<<<NULL>>> Requirement";
514 OS <<
"TypeRequirement";
517 OS <<
"SimpleRequirement";
520 OS <<
"CompoundRequirement";
523 OS <<
"NestedRequirement";
530 if (
auto *ER = dyn_cast<concepts::ExprRequirement>(R)) {
531 if (ER->hasNoexceptRequirement())
538 OS << (R->
isSatisfied() ?
" satisfied" :
" unsatisfied");
540 OS <<
" contains_unexpanded_pack";
546 V.convert(llvm::APFloat::IEEEdouble(), llvm::APFloat::rmNearestTiesToEven,
548 return V.convertToDouble();
572 llvm_unreachable(
"unexpected APValue kind!");
588void TextNodeDumper::dumpAPValueChildren(
591 unsigned NumChildren, StringRef LabelSingular, StringRef LabelPlurial) {
594 constexpr unsigned MaxChildrenPerLine = 4;
596 while (I < NumChildren) {
598 while (J < NumChildren) {
600 (J - I < MaxChildrenPerLine)) {
607 J = std::max(I + 1, J);
610 AddChild(J - I > 1 ? LabelPlurial : LabelSingular, [=]() {
611 for (
unsigned X = I;
X < J; ++
X) {
628 OS <<
"Indeterminate";
634 OS <<
Value.getInt();
648 OS <<
Value.getFixedPoint();
658 return Value.getVectorElt(Index);
667 OS <<
Value.getComplexIntReal() <<
" + " <<
Value.getComplexIntImag()
672 OS <<
"ComplexFloat ";
681 OS <<
"LValue <todo>";
684 unsigned ArraySize =
Value.getArraySize();
685 unsigned NumInitializedElements =
Value.getArrayInitializedElts();
686 OS <<
"Array size=" << ArraySize;
691 return Value.getArrayInitializedElt(Index);
693 NumInitializedElements,
"element",
"elements");
695 if (
Value.hasArrayFiller()) {
699 OS << ArraySize - NumInitializedElements <<
" x ";
713 return Value.getStructBase(Index);
715 Value.getStructNumBases(),
"base",
"bases");
720 return Value.getStructField(Index);
722 Value.getStructNumFields(),
"field",
"fields");
731 OS <<
" ." << *cast<NamedDecl>(FD);
738 Visit(UnionValue, Ty);
746 OS <<
"MemberPointer <todo>";
749 OS <<
"AddrLabelDiff <todo>";
752 llvm_unreachable(
"Unknown APValue kind!");
772 OS <<
"<invalid sloc>";
776 if (strcmp(PLoc.
getFilename(), LastLocFilename) != 0) {
781 }
else if (PLoc.
getLine() != LastLocLine) {
810 OS <<
"'" << T_str <<
"'";
812 if (Desugar && !
T.isNull()) {
816 if (T_split != D_split) {
842 if (
const NamedDecl *ND = dyn_cast<NamedDecl>(
D)) {
844 OS <<
" '" << ND->getDeclName() <<
'\'';
847 if (
const ValueDecl *VD = dyn_cast<ValueDecl>(
D))
860 if (AccessSpelling.empty())
862 OS << AccessSpelling;
874 OS << CLE->getStmtClassName();
879 llvm_unreachable(
"unexpected cleanup type");
888 OS <<
" implicit_instantiation";
891 OS <<
" explicit_specialization";
894 OS <<
" explicit_instantiation_declaration";
897 OS <<
" explicit_instantiation_definition";
907 OS <<
"NestedNameSpecifier";
910 case NestedNameSpecifier::Identifier:
912 OS <<
" '" << NNS->getAsIdentifier()->getName() <<
"'";
914 case NestedNameSpecifier::Namespace:
916 dumpBareDeclRef(NNS->getAsNamespace());
918 case NestedNameSpecifier::NamespaceAlias:
920 dumpBareDeclRef(NNS->getAsNamespaceAlias());
922 case NestedNameSpecifier::TypeSpec:
924 dumpType(QualType(NNS->getAsType(), 0));
926 case NestedNameSpecifier::TypeSpecWithTemplate:
927 OS <<
" TypeSpecWithTemplate";
928 dumpType(QualType(NNS->getAsType(), 0));
930 case NestedNameSpecifier::Global:
933 case NestedNameSpecifier::Super:
938 dumpNestedNameSpecifier(NNS->
getPrefix());
956 llvm::raw_svector_ostream SS(Str);
957 TA.
print(PrintPolicy, SS,
true);
959 OS <<
" '" << Str <<
"'";
968 llvm::raw_svector_ostream SS(CanonStr);
969 CanonTA.print(PrintPolicy, SS,
true);
972 OS <<
":'" << CanonStr <<
"'";
976const char *TextNodeDumper::getCommandName(
unsigned CommandID) {
983 return "<not a builtin command>";
987#define OPTION(NAME, TYPE, WIDTH, PREVIOUS) \
988 if (FPO.has##NAME##Override()) \
989 OS << " " #NAME "=" << FPO.get##NAME##Override();
990#include "clang/Basic/FPOptions.def"
995 OS <<
" Text=\"" <<
C->getText() <<
"\"";
1000 OS <<
" Name=\"" << getCommandName(
C->getCommandID()) <<
"\"";
1001 switch (
C->getRenderKind()) {
1003 OS <<
" RenderNormal";
1006 OS <<
" RenderBold";
1009 OS <<
" RenderMonospaced";
1012 OS <<
" RenderEmphasized";
1015 OS <<
" RenderAnchor";
1019 for (
unsigned i = 0, e =
C->getNumArgs(); i != e; ++i)
1020 OS <<
" Arg[" << i <<
"]=\"" <<
C->getArgText(i) <<
"\"";
1025 OS <<
" Name=\"" <<
C->getTagName() <<
"\"";
1026 if (
C->getNumAttrs() != 0) {
1028 for (
unsigned i = 0, e =
C->getNumAttrs(); i != e; ++i) {
1030 OS <<
" \"" <<
Attr.Name <<
"=\"" <<
Attr.Value <<
"\"";
1033 if (
C->isSelfClosing())
1034 OS <<
" SelfClosing";
1039 OS <<
" Name=\"" <<
C->getTagName() <<
"\"";
1044 OS <<
" Name=\"" << getCommandName(
C->getCommandID()) <<
"\"";
1045 for (
unsigned i = 0, e =
C->getNumArgs(); i != e; ++i)
1046 OS <<
" Arg[" << i <<
"]=\"" <<
C->getArgText(i) <<
"\"";
1054 if (
C->isDirectionExplicit())
1055 OS <<
" explicitly";
1057 OS <<
" implicitly";
1059 if (
C->hasParamName()) {
1060 if (
C->isParamIndexValid())
1061 OS <<
" Param=\"" <<
C->getParamName(FC) <<
"\"";
1063 OS <<
" Param=\"" <<
C->getParamNameAsWritten() <<
"\"";
1066 if (
C->isParamIndexValid() && !
C->isVarArgParam())
1067 OS <<
" ParamIndex=" <<
C->getParamIndex();
1072 if (
C->hasParamName()) {
1073 if (
C->isPositionValid())
1074 OS <<
" Param=\"" <<
C->getParamName(FC) <<
"\"";
1076 OS <<
" Param=\"" <<
C->getParamNameAsWritten() <<
"\"";
1079 if (
C->isPositionValid()) {
1080 OS <<
" Position=<";
1081 for (
unsigned i = 0, e =
C->getDepth(); i != e; ++i) {
1082 OS <<
C->getIndex(i);
1092 OS <<
" Name=\"" << getCommandName(
C->getCommandID())
1095 <<
C->getCloseName() <<
"\"";
1101 OS <<
" Text=\"" <<
C->getText() <<
"\"";
1106 OS <<
" Text=\"" <<
C->getText() <<
"\"";
1140 llvm::raw_svector_ostream SS(Str);
1141 TN.
print(SS, PrintPolicy);
1143 OS <<
"'" << Str <<
"'";
1150 llvm::raw_svector_ostream SS(CanonStr);
1151 CanonTN.print(SS, PrintPolicy);
1153 if (CanonStr != Str)
1154 OS <<
":'" << CanonStr <<
"'";
1192 OS <<
" index " << STS->
getIndex();
1193 if (std::optional<unsigned int> PackIndex = STS->
getPackIndex())
1194 OS <<
" pack_index " << *PackIndex;
1203 OS <<
" overloaded";
1209 OS <<
" subst_pack";
1212 llvm_unreachable(
"Unexpected TemplateName Kind");
1223 OS <<
" template expansion";
1240 if (
Node->path_empty())
1246 E =
Node->path_end();
1255 if (
Base->isVirtual())
1257 OS << RD->getName();
1265 if (
Node->hasInitStorage())
1267 if (
Node->hasVarStorage())
1269 if (
Node->hasElseStorage())
1271 if (
Node->isConstexpr())
1273 if (
Node->isConsteval()) {
1275 if (
Node->isNegatedConsteval())
1282 if (
Node->hasInitStorage())
1284 if (
Node->hasVarStorage())
1289 if (
Node->hasVarStorage())
1294 OS <<
" '" <<
Node->getName() <<
"'";
1295 if (
Node->isSideEntry())
1296 OS <<
" side_entry";
1300 OS <<
" '" <<
Node->getLabel()->getName() <<
"'";
1305 if (
Node->caseStmtIsGNURange())
1310 if (
const VarDecl *Cand =
Node->getNRVOCandidate()) {
1311 OS <<
" nrvo_candidate(";
1312 dumpBareDeclRef(Cand);
1318 if (
Node->isImplicit())
1323 if (
Node->isImplicit())
1328 if (
Node->hasAPValueResult())
1334 if (
Node->usesADL())
1336 if (
Node->hasStoredFPFeatures())
1337 printFPOptions(
Node->getFPFeatures());
1342 if (OperatorSpelling)
1343 OS <<
" '" << OperatorSpelling <<
"'";
1352 OS <<
Node->getCastKindName();
1356 if (
Node->hasStoredFPFeatures())
1357 printFPOptions(
Node->getFPFeatures());
1362 if (
Node->isPartOfExplicitCast())
1363 OS <<
" part_of_explicit_cast";
1370 if (
Node->getDecl() !=
Node->getFoundDecl()) {
1375 switch (
Node->isNonOdrUse()) {
1381 if (
Node->isCapturedByCopyInLambdaWithExplicitObjectParameter())
1382 OS <<
" dependent_capture";
1383 else if (
Node->refersToEnclosingVariableOrCapture())
1384 OS <<
" refers_to_enclosing_variable_or_capture";
1386 if (
Node->isImmediateEscalating())
1387 OS <<
" immediate-escalating";
1393 dumpNestedNameSpecifier(
Node->getQualifier());
1399 if (!
Node->requiresADL())
1401 OS <<
"ADL) = '" <<
Node->getName() <<
'\'';
1404 E =
Node->decls_end();
1414 OS <<
" " <<
Node->getDecl()->getDeclKindName() <<
"Decl";
1416 OS <<
"='" << *
Node->getDecl() <<
"'";
1418 if (
Node->isFreeIvar())
1419 OS <<
" isFreeIvar";
1433 OS <<
" " <<
Node->getValue();
1437 bool isSigned =
Node->getType()->isSignedIntegerType();
1444 OS <<
" " <<
Node->getValueAsString(10);
1449 OS <<
" " <<
Node->getValueAsApproximateDouble();
1466 if (
E->isResultDependent())
1467 OS <<
" result_dependent";
1471 OS <<
" " << (
Node->isPostfix() ?
"postfix" :
"prefix") <<
" '"
1473 if (!
Node->canOverflow())
1474 OS <<
" cannot overflow";
1475 if (
Node->hasStoredFPFeatures())
1476 printFPOptions(
Node->getStoredFPFeatures());
1483 if (
Node->isArgumentType())
1488 OS <<
" " << (
Node->isArrow() ?
"->" :
".") << *
Node->getMemberDecl();
1491 switch (
Node->isNonOdrUse()) {
1501 OS <<
" " <<
Node->getAccessor().getNameStart();
1506 if (
Node->hasStoredFPFeatures())
1507 printFPOptions(
Node->getStoredFPFeatures());
1513 <<
"' ComputeLHSTy=";
1515 OS <<
" ComputeResultTy=";
1517 if (
Node->hasStoredFPFeatures())
1518 printFPOptions(
Node->getStoredFPFeatures());
1522 OS <<
" " <<
Node->getLabel()->getName();
1527 OS <<
" " <<
Node->getCastName() <<
"<"
1528 <<
Node->getTypeAsWritten().getAsString() <<
">"
1529 <<
" <" <<
Node->getCastKindName();
1535 OS <<
" " << (
Node->getValue() ?
"true" :
"false");
1539 if (
Node->isImplicit())
1541 if (
Node->isCapturedByCopyInLambdaWithExplicitObjectParameter())
1542 OS <<
" dependent_capture";
1548 OS <<
" functional cast to " <<
Node->getTypeAsWritten().getAsString() <<
" <"
1549 <<
Node->getCastKindName() <<
">";
1550 if (
Node->hasStoredFPFeatures())
1551 printFPOptions(
Node->getFPFeatures());
1556 if (
Node->hasStoredFPFeatures())
1557 printFPOptions(
Node->getFPFeatures());
1563 if (
Node->isListInitialization())
1570 if (
Node->isElidable())
1572 if (
Node->isListInitialization())
1574 if (
Node->isStdInitListInitialization())
1575 OS <<
" std::initializer_list";
1576 if (
Node->requiresZeroInitialization())
1578 if (
Node->isImmediateEscalating())
1579 OS <<
" immediate-escalating";
1584 OS <<
" (CXXTemporary";
1590 if (
Node->isGlobalNew())
1592 if (
Node->isArray())
1594 if (
Node->getOperatorNew()) {
1603 if (
Node->isGlobalDelete())
1605 if (
Node->isArrayForm())
1607 if (
Node->getOperatorDelete()) {
1626 if (
Node->hasRewrittenInit())
1627 OS <<
" has rewritten init";
1631 if (
Node->hasRewrittenInit())
1632 OS <<
" has rewritten init";
1638 OS <<
" extended by ";
1644 for (
unsigned i = 0, e =
Node->getNumObjects(); i != e; ++i)
1655 OS <<
" " << (
Node->isArrow() ?
"->" :
".") <<
Node->getMember();
1661 switch (
Node->getReceiverKind()) {
1671 OS <<
" super (instance)";
1675 OS <<
" super (class)";
1681 if (
auto *BoxingMethod =
Node->getBoxingMethod()) {
1683 BoxingMethod->getSelector().print(OS);
1688 if (!
Node->getCatchParamDecl())
1702 OS <<
' ' << *
Node->getProtocol();
1706 if (
Node->isImplicitProperty()) {
1707 OS <<
" Kind=MethodRef Getter=\"";
1708 if (
Node->getImplicitPropertyGetter())
1709 Node->getImplicitPropertyGetter()->getSelector().
print(OS);
1713 OS <<
"\" Setter=\"";
1715 Setter->getSelector().print(OS);
1720 OS <<
" Kind=PropertyRef Property=\"" << *
Node->getExplicitProperty()
1724 if (
Node->isSuperReceiver())
1727 OS <<
" Messaging=";
1728 if (
Node->isMessagingGetter() &&
Node->isMessagingSetter())
1729 OS <<
"Getter&Setter";
1730 else if (
Node->isMessagingGetter())
1732 else if (
Node->isMessagingSetter())
1738 if (
Node->isArraySubscriptRefExpr())
1739 OS <<
" Kind=ArraySubscript GetterForArray=\"";
1741 OS <<
" Kind=DictionarySubscript GetterForDictionary=\"";
1742 if (
Node->getAtIndexMethodDecl())
1743 Node->getAtIndexMethodDecl()->getSelector().
print(OS);
1747 if (
Node->isArraySubscriptRefExpr())
1748 OS <<
"\" SetterForArray=\"";
1750 OS <<
"\" SetterForDictionary=\"";
1751 if (
Node->setAtIndexMethodDecl())
1752 Node->setAtIndexMethodDecl()->getSelector().
print(OS);
1758 OS <<
" " << (
Node->getValue() ?
"__objc_yes" :
"__objc_no");
1763 for (
unsigned I = 0,
E =
Node->numOfIterators(); I <
E; ++I) {
1786 if (!
Node->isValueDependent())
1787 OS << (
Node->isSatisfied() ?
" satisfied" :
" unsatisfied");
1791 if (
T->isSpelledAsLValue())
1792 OS <<
" written as lvalue reference";
1796 switch (
T->getSizeModifier()) {
1806 OS <<
" " <<
T->getIndexTypeQualifiers().getAsString();
1810 OS <<
" " <<
T->getSize();
1834 switch (
T->getVectorKind()) {
1841 OS <<
" altivec pixel";
1844 OS <<
" altivec bool";
1853 OS <<
" fixed-length sve data vector";
1856 OS <<
" fixed-length sve predicate vector";
1859 OS <<
" fixed-length rvv data vector";
1865 OS <<
" fixed-length rvv mask vector";
1868 OS <<
" " <<
T->getNumElements();
1873 if (EI.getNoReturn())
1875 if (EI.getProducesResult())
1876 OS <<
" produces_result";
1877 if (EI.getHasRegParm())
1878 OS <<
" regparm " << EI.getRegParm();
1884 if (EPI.HasTrailingReturn)
1885 OS <<
" trailing_return";
1894 switch (EPI.RefQualifier) {
1905 switch (EPI.ExceptionSpec.Type) {
1909 OS <<
" exceptionspec_dynamic_none";
1912 OS <<
" exceptionspec_dynamic";
1915 OS <<
" exceptionspec_ms_any";
1918 OS <<
" exceptionspec_nothrow";
1921 OS <<
" exceptionspec_basic_noexcept";
1924 OS <<
" exceptionspec_dependent_noexcept";
1927 OS <<
" exceptionspec_noexcept_false";
1930 OS <<
" exceptionspec_noexcept_true";
1933 OS <<
" exceptionspec_unevaluated";
1936 OS <<
" exceptionspec_uninstantiated";
1939 OS <<
" exceptionspec_unparsed";
1942 if (!EPI.ExceptionSpec.Exceptions.empty()) {
1944 OS <<
"Exceptions:";
1945 for (
unsigned I = 0, N = EPI.ExceptionSpec.Exceptions.size(); I != N;
1949 dumpType(EPI.ExceptionSpec.Exceptions[I]);
1953 if (EPI.ExceptionSpec.NoexceptExpr) {
1955 OS <<
"NoexceptExpr: ";
1956 Visit(EPI.ExceptionSpec.NoexceptExpr);
1959 dumpDeclRef(EPI.ExceptionSpec.SourceDecl,
"ExceptionSourceDecl");
1960 dumpDeclRef(EPI.ExceptionSpec.SourceTemplate,
"ExceptionSourceTemplate");
1972 if (!
T->typeMatchesDecl())
1978 if (!
T->typeMatchesDecl())
1983 switch (
T->getUTTKind()) {
1984#define TRANSFORM_TYPE_TRAIT_DEF(Enum, Trait) \
1985 case UnaryTransformType::Enum: \
1988#include "clang/Basic/TransformTypeTraits.def"
1997 OS <<
" depth " <<
T->getDepth() <<
" index " <<
T->getIndex();
1998 if (
T->isParameterPack())
2007 if (
auto PackIndex =
T->getPackIndex())
2008 OS <<
" pack_index " << *PackIndex;
2018 if (
T->isDecltypeAuto())
2019 OS <<
" decltype(auto)";
2020 if (!
T->isDeduced())
2022 if (
T->isConstrained())
2033 if (
T->isTypeAlias())
2048 if (
auto N =
T->getNumExpansions())
2049 OS <<
" expansions " << *N;
2065 OS <<
" __module_private__";
2069 if (
D->isScoped()) {
2070 if (
D->isScopedUsingClassTag())
2077 OS <<
" __module_private__";
2083 OS <<
' ' <<
D->getKindName();
2086 OS <<
" __module_private__";
2087 if (
D->isCompleteDefinition())
2088 OS <<
" definition";
2100 for (
const auto *Child :
D->chain())
2112 if (
D->isInlineSpecified())
2114 if (
D->isVirtualAsWritten())
2117 OS <<
" __module_private__";
2119 if (
D->isPureVirtual())
2121 if (
D->isDefaulted()) {
2126 if (
D->isDeletedAsWritten())
2134 if (
D->isIneligibleOrNotSelected())
2135 OS << (isa<CXXDestructorDecl>(
D) ?
" not_selected" :
" ineligible");
2151 if (
const auto *MD = dyn_cast<CXXMethodDecl>(
D)) {
2152 if (MD->size_overridden_methods() != 0) {
2155 OS <<
D <<
" " <<
D->getParent()->getName() <<
"::" <<
D->getDeclName()
2160 auto Overrides = MD->overridden_methods();
2161 OS <<
"Overrides: [ ";
2162 dumpOverride(*Overrides.begin());
2163 for (
const auto *Override : llvm::drop_begin(Overrides)) {
2165 dumpOverride(Override);
2172 if (!
D->isInlineSpecified() &&
D->isInlined()) {
2173 OS <<
" implicit-inline";
2179 if (!
D->param_empty() && !
D->param_begin())
2180 OS <<
" <<<NULL params x " <<
D->getNumParams() <<
">>>";
2182 if (
const auto *Instance =
D->getInstantiatedFromMemberFunction()) {
2183 OS <<
" instantiated_from";
2191 switch (
D->getDeductionCandidateKind()) {
2196 OS <<
" aggregate ";
2203 OS <<
" extended by ";
2208 OS <<
D->getManglingNumber();
2218 OS <<
" __module_private__";
2224 if (
const auto *
P = dyn_cast<ParmVarDecl>(
D);
2225 P &&
P->isExplicitObjectParameter())
2233 switch (
D->getTLSKind()) {
2240 OS <<
" tls_dynamic";
2244 OS <<
" __module_private__";
2245 if (
D->isNRVOVariable())
2249 if (
D->isConstexpr())
2252 switch (
D->getInitStyle()) {
2263 OS <<
" parenlistinit";
2272 const Expr *
E =
D->getInit();
2275 !
D->getType()->isDependentType()) {
2294 OS <<
' ' <<
D->getImportedModule()->getFullModuleName();
2303 switch (
D->getCommentKind()) {
2305 llvm_unreachable(
"unexpected pragma comment kind");
2322 StringRef Arg =
D->getArg();
2324 OS <<
" \"" << Arg <<
"\"";
2329 OS <<
" \"" <<
D->getName() <<
"\" \"" <<
D->getValue() <<
"\"";
2334 if (
D->isStandaloneDirective())
2335 OS <<
" openmp_standalone_directive";
2345 OS <<
" initializer";
2347 switch (
D->getInitializerKind()) {
2349 OS <<
" omp_priv = ";
2352 OS <<
" omp_priv ()";
2361 for (
const auto *
C :
D->clauselists()) {
2365 OS <<
"<<<NULL>>> OMPClause";
2370 StringRef ClauseName(
2371 llvm::omp::getOpenMPClauseName(
C->getClauseKind()));
2372 OS <<
"OMP" << ClauseName.substr(0, 1).upper()
2373 << ClauseName.drop_front() <<
"Clause";
2418 if (
const auto *Instance =
D->getInstantiatedFromMemberClass()) {
2419 OS <<
" instantiated_from";
2422 if (
const auto *CTSD = dyn_cast<ClassTemplateSpecializationDecl>(
D))
2427 if (!
D->isCompleteDefinition())
2433 OS <<
"DefinitionData";
2435#define FLAG(fn, name) \
2438 FLAG(isParsingBaseSpecifiers, parsing_base_specifiers);
2440 FLAG(isGenericLambda, generic);
2441 FLAG(isLambda, lambda);
2443 FLAG(isAnonymousStructOrUnion, is_anonymous);
2445 FLAG(isEmpty, empty);
2446 FLAG(isAggregate, aggregate);
2447 FLAG(isStandardLayout, standard_layout);
2448 FLAG(isTriviallyCopyable, trivially_copyable);
2451 FLAG(isPolymorphic, polymorphic);
2452 FLAG(isAbstract, abstract);
2453 FLAG(isLiteral, literal);
2455 FLAG(hasUserDeclaredConstructor, has_user_declared_ctor);
2456 FLAG(hasConstexprNonCopyMoveConstructor, has_constexpr_non_copy_move_ctor);
2457 FLAG(hasMutableFields, has_mutable_fields);
2458 FLAG(hasVariantMembers, has_variant_members);
2459 FLAG(allowConstDefaultInit, can_const_default_init);
2464 OS <<
"DefaultConstructor";
2466 FLAG(hasDefaultConstructor, exists);
2467 FLAG(hasTrivialDefaultConstructor, trivial);
2468 FLAG(hasNonTrivialDefaultConstructor, non_trivial);
2469 FLAG(hasUserProvidedDefaultConstructor, user_provided);
2470 FLAG(hasConstexprDefaultConstructor,
constexpr);
2471 FLAG(needsImplicitDefaultConstructor, needs_implicit);
2472 FLAG(defaultedDefaultConstructorIsConstexpr, defaulted_is_constexpr);
2478 OS <<
"CopyConstructor";
2480 FLAG(hasSimpleCopyConstructor, simple);
2481 FLAG(hasTrivialCopyConstructor, trivial);
2482 FLAG(hasNonTrivialCopyConstructor, non_trivial);
2483 FLAG(hasUserDeclaredCopyConstructor, user_declared);
2484 FLAG(hasCopyConstructorWithConstParam, has_const_param);
2485 FLAG(needsImplicitCopyConstructor, needs_implicit);
2486 FLAG(needsOverloadResolutionForCopyConstructor,
2487 needs_overload_resolution);
2488 if (!
D->needsOverloadResolutionForCopyConstructor())
2489 FLAG(defaultedCopyConstructorIsDeleted, defaulted_is_deleted);
2490 FLAG(implicitCopyConstructorHasConstParam, implicit_has_const_param);
2496 OS <<
"MoveConstructor";
2498 FLAG(hasMoveConstructor, exists);
2499 FLAG(hasSimpleMoveConstructor, simple);
2500 FLAG(hasTrivialMoveConstructor, trivial);
2501 FLAG(hasNonTrivialMoveConstructor, non_trivial);
2502 FLAG(hasUserDeclaredMoveConstructor, user_declared);
2503 FLAG(needsImplicitMoveConstructor, needs_implicit);
2504 FLAG(needsOverloadResolutionForMoveConstructor,
2505 needs_overload_resolution);
2506 if (!
D->needsOverloadResolutionForMoveConstructor())
2507 FLAG(defaultedMoveConstructorIsDeleted, defaulted_is_deleted);
2513 OS <<
"CopyAssignment";
2515 FLAG(hasSimpleCopyAssignment, simple);
2516 FLAG(hasTrivialCopyAssignment, trivial);
2517 FLAG(hasNonTrivialCopyAssignment, non_trivial);
2518 FLAG(hasCopyAssignmentWithConstParam, has_const_param);
2519 FLAG(hasUserDeclaredCopyAssignment, user_declared);
2520 FLAG(needsImplicitCopyAssignment, needs_implicit);
2521 FLAG(needsOverloadResolutionForCopyAssignment, needs_overload_resolution);
2522 FLAG(implicitCopyAssignmentHasConstParam, implicit_has_const_param);
2528 OS <<
"MoveAssignment";
2530 FLAG(hasMoveAssignment, exists);
2531 FLAG(hasSimpleMoveAssignment, simple);
2532 FLAG(hasTrivialMoveAssignment, trivial);
2533 FLAG(hasNonTrivialMoveAssignment, non_trivial);
2534 FLAG(hasUserDeclaredMoveAssignment, user_declared);
2535 FLAG(needsImplicitMoveAssignment, needs_implicit);
2536 FLAG(needsOverloadResolutionForMoveAssignment, needs_overload_resolution);
2544 FLAG(hasSimpleDestructor, simple);
2545 FLAG(hasIrrelevantDestructor, irrelevant);
2546 FLAG(hasTrivialDestructor, trivial);
2547 FLAG(hasNonTrivialDestructor, non_trivial);
2548 FLAG(hasUserDeclaredDestructor, user_declared);
2549 FLAG(hasConstexprDestructor,
constexpr);
2550 FLAG(needsImplicitDestructor, needs_implicit);
2551 FLAG(needsOverloadResolutionForDestructor, needs_overload_resolution);
2552 if (!
D->needsOverloadResolutionForDestructor())
2553 FLAG(defaultedDestructorIsDeleted, defaulted_is_deleted);
2557 for (
const auto &I :
D->bases()) {
2563 if (I.isPackExpansion())
2586 if (
const auto *TC =
D->getTypeConstraint()) {
2589 if (TC->getNamedConcept() != TC->getFoundDecl()) {
2594 }
else if (
D->wasDeclaredWithTypename())
2598 OS <<
" depth " <<
D->getDepth() <<
" index " <<
D->getIndex();
2607 OS <<
" depth " <<
D->getDepth() <<
" index " <<
D->getIndex();
2615 OS <<
" depth " <<
D->getDepth() <<
" index " <<
D->getIndex();
2623 if (
D->getQualifier())
2625 OS <<
D->getDeclName();
2637 if (
D->getQualifier())
2639 OS <<
D->getDeclName();
2645 if (
D->getQualifier())
2647 OS <<
D->getDeclName();
2658 if (
D->constructsVirtualBase())
2674 OS <<
"constructed ";
2682 switch (
D->getLanguage()) {
2700 if (
D->isPackExpansion())
2707 if (
D->getSynthesize())
2708 OS <<
" synthesize";
2710 switch (
D->getAccessControl()) {
2730 if (
D->isInstanceMethod())
2737 if (
D->isVariadic())
2743 switch (
D->getVariance()) {
2752 OS <<
" contravariant";
2756 if (
D->hasExplicitBound())
2765 for (
const auto *
P :
D->protocols())
2778 for (
const auto *Child :
D->protocols())
2787 for (
const auto *Child :
D->protocols())
2834 OS <<
" unsafe_unretained";
2849 OS <<
" synthesize";
2857 if (
D->isVariadic())
2860 if (
D->capturesCXXThis())
2861 OS <<
" captures_this";
2870 if (S->hasStoredFPFeatures())
2871 printFPOptions(S->getStoredFPFeatures());
2883 OS <<
" " << S->getDirectiveKind();
2887 if (S->isOrphanedLoopConstruct())
2890 OS <<
" parent: " << S->getParentComputeConstruct();
2894 AddChild(
"begin", [=] { OS << S->getStartingElementPos(); });
2895 AddChild(
"number of elements", [=] { OS << S->getDataElementCount(); });
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.
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.
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.
TemplateName getCanonicalTemplateName(const TemplateName &Name) const
Retrieves the "canonical" template name that refers to a given template.
ArrayRef< Decl * > getModuleInitializers(Module *M)
Get the initializations to perform when importing a module, if any.
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.
CompoundLiteralExpr - [C99 6.5.2.5].
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
ConceptDecl * 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...
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.
Represents a C++17 deduced template specialization type.
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.
Represents a dependent template name that cannot be resolved prior to template instantiation.
NestedNameSpecifier * getQualifier() const
Return the nested name specifier that qualifies this name.
SourceRange getSourceRange() 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.
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, e.g.
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.
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.
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>::".
SpecifierKind getKind() const
Determine what kind of nested name specifier is stored.
NestedNameSpecifier * getPrefix() const
Return the prefix of this nested name specifier.
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 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.
TemplateName getUnderlyingTemplate() const
Return the underlying template name.
NestedNameSpecifier * getQualifier() const
Return the nested name specifier that qualifies this 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 * getDecl() 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
std::optional< unsigned > getPackIndex() const
TemplateTemplateParmDecl * getParameter() 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.
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() const
Retrieve the underlying template declaration that this template name refers to, if known.
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,...
@ 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 VisitCoawaitExpr(const CoawaitExpr *Node)
void VisitUnaryOperator(const UnaryOperator *Node)
void dumpAccessSpecifier(AccessSpecifier AS)
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 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 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 dumpBareTemplateName(TemplateName TN)
void VisitOpenACCConstructStmt(const OpenACCConstructStmt *S)
void VisitCompoundStmt(const CompoundStmt *Node)
void VisitConstantExpr(const ConstantExpr *Node)
void VisitObjCIvarRefExpr(const ObjCIvarRefExpr *Node)
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 VisitCaseStmt(const CaseStmt *Node)
void VisitRValueReferenceType(const ReferenceType *T)
void VisitPackExpansionType(const PackExpansionType *T)
void VisitConceptDecl(const ConceptDecl *D)
void VisitCallExpr(const CallExpr *Node)
void VisitCapturedDecl(const CapturedDecl *D)
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 Visit(const comments::Comment *C, const comments::FullComment *FC)
void dumpNestedNameSpecifier(const NestedNameSpecifier *NNS)
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 VisitTemplateTypeParmDecl(const TemplateTypeParmDecl *D)
void VisitCompoundAssignOperator(const CompoundAssignOperator *Node)
void VisitCXXThisExpr(const CXXThisExpr *Node)
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 visitBlockCommandComment(const comments::BlockCommandComment *C, const comments::FullComment *)
void VisitExpressionTemplateArgument(const TemplateArgument &TA)
void VisitTypeAliasDecl(const TypeAliasDecl *D)
void VisitVarDecl(const VarDecl *D)
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 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 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 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 visitVerbatimBlockLineComment(const comments::VerbatimBlockLineComment *C, const comments::FullComment *)
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.
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.
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
@ Auto
'auto' clause, allowed on 'loop' directives.
@ 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'.
@ PresentOrCopy
'copy' clause alias 'present_or_copy'. Preserved for diagnostic purposes.
@ Private
'private' clause, allowed on 'parallel', 'serial', 'loop', 'parallel loop', and 'serial loop' constru...
@ Copy
'copy' clause, allowed on Compute and Combined Constructs, plus 'data' and 'declare'.
@ 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',...
@ Attach
'attach' clause, allowed on Compute and Combined constructs, plus 'data' and 'enter data'.
@ 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.
@ NoCreate
'no_create' clause, allowed on allowed on Compute and Combined constructs, plus 'data'.
@ PresentOrCopyOut
'copyout' clause alias 'present_or_copyout'.
@ 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...
@ PCopy
'copy' clause alias 'pcopy'. Preserved for diagnostic purposes.
@ PCopyIn
'copyin' clause alias 'pcopyin'. Preserved for diagnostic purposes.
@ 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',...
@ Independent
'independent' clause, allowed on 'loop' directives.
@ NumWorkers
'num_workers' clause, allowed on 'parallel', 'kernels', parallel loop', and 'kernels loop' constructs...
@ PresentOrCopyIn
'copyin' clause alias 'present_or_copyin'.
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
StorageClass
Storage classes.
static const TerminalColor DeclKindNameColor
static const TerminalColor LocationColor
static const TerminalColor ValueKindColor
std::pair< IdentifierInfo *, SourceLocation > DeviceTypeArgument
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
@ 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
AccessSpecifier
A C++ access specifier (public, private, protected), plus the special value "none" which means differ...
@ 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
Iterator range representation begin:end[:step].
A std::pair-like structure for storing a qualified type split into its local qualifiers and its local...