26#include "llvm/ADT/StringExtras.h"
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)) {
142 if (E->containsErrors()) {
144 OS <<
" contains-errors";
149 switch (E->getValueKind()) {
163 switch (E->getObjectKind()) {
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())
304 if (
const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
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() <<
')';
423 if (cast<OpenACCCopyInClause>(
C)->isReadOnly())
430 if (cast<OpenACCCopyOutClause>(
C)->isZero())
437 if (cast<OpenACCCreateClause>(
C)->isZero())
442 if (cast<OpenACCWaitClause>(
C)->hasDevNumExpr())
444 if (cast<OpenACCWaitClause>(
C)->hasQueuesTag())
445 OS <<
" has queues tag";
450 llvm::interleaveComma(
451 cast<OpenACCDeviceTypeClause>(
C)->getArchitectures(), OS,
453 if (Arch.first ==
nullptr)
456 OS << Arch.first->getName();
485 OS <<
"<<<NULL>>> ConceptReference";
489 OS <<
"ConceptReference";
499 OS <<
"<<<NULL>>> Requirement";
507 OS <<
"TypeRequirement";
510 OS <<
"SimpleRequirement";
513 OS <<
"CompoundRequirement";
516 OS <<
"NestedRequirement";
523 if (
auto *ER = dyn_cast<concepts::ExprRequirement>(R)) {
524 if (ER->hasNoexceptRequirement())
531 OS << (R->
isSatisfied() ?
" satisfied" :
" unsatisfied");
533 OS <<
" contains_unexpanded_pack";
539 V.convert(llvm::APFloat::IEEEdouble(), llvm::APFloat::rmNearestTiesToEven,
541 return V.convertToDouble();
565 llvm_unreachable(
"unexpected APValue kind!");
581void TextNodeDumper::dumpAPValueChildren(
584 unsigned NumChildren, StringRef LabelSingular, StringRef LabelPlurial) {
587 constexpr unsigned MaxChildrenPerLine = 4;
589 while (I < NumChildren) {
591 while (J < NumChildren) {
593 (J - I < MaxChildrenPerLine)) {
600 J = std::max(I + 1, J);
603 AddChild(J - I > 1 ? LabelPlurial : LabelSingular, [=]() {
604 for (
unsigned X = I;
X < J; ++
X) {
621 OS <<
"Indeterminate";
627 OS <<
Value.getInt();
641 OS <<
Value.getFixedPoint();
651 return Value.getVectorElt(Index);
660 OS <<
Value.getComplexIntReal() <<
" + " <<
Value.getComplexIntImag()
665 OS <<
"ComplexFloat ";
674 OS <<
"LValue <todo>";
677 unsigned ArraySize =
Value.getArraySize();
678 unsigned NumInitializedElements =
Value.getArrayInitializedElts();
679 OS <<
"Array size=" << ArraySize;
684 return Value.getArrayInitializedElt(Index);
686 NumInitializedElements,
"element",
"elements");
688 if (
Value.hasArrayFiller()) {
692 OS << ArraySize - NumInitializedElements <<
" x ";
706 return Value.getStructBase(Index);
708 Value.getStructNumBases(),
"base",
"bases");
713 return Value.getStructField(Index);
715 Value.getStructNumFields(),
"field",
"fields");
724 OS <<
" ." << *cast<NamedDecl>(FD);
731 Visit(UnionValue, Ty);
739 OS <<
"MemberPointer <todo>";
742 OS <<
"AddrLabelDiff <todo>";
745 llvm_unreachable(
"Unknown APValue kind!");
765 OS <<
"<invalid sloc>";
769 if (strcmp(PLoc.
getFilename(), LastLocFilename) != 0) {
774 }
else if (PLoc.
getLine() != LastLocLine) {
803 OS <<
"'" << T_str <<
"'";
805 if (Desugar && !
T.isNull()) {
809 if (T_split != D_split) {
835 if (
const NamedDecl *ND = dyn_cast<NamedDecl>(D)) {
837 OS <<
" '" << ND->getDeclName() <<
'\'';
840 if (
const ValueDecl *VD = dyn_cast<ValueDecl>(D))
853 if (AccessSpelling.empty())
855 OS << AccessSpelling;
867 OS << CLE->getStmtClassName();
872 llvm_unreachable(
"unexpected cleanup type");
881 OS <<
" implicit_instantiation";
884 OS <<
" explicit_specialization";
887 OS <<
" explicit_instantiation_declaration";
890 OS <<
" explicit_instantiation_definition";
900 OS <<
"NestedNameSpecifier";
903 case NestedNameSpecifier::Identifier:
905 OS <<
" '" << NNS->getAsIdentifier()->getName() <<
"'";
907 case NestedNameSpecifier::Namespace:
909 dumpBareDeclRef(NNS->getAsNamespace());
911 case NestedNameSpecifier::NamespaceAlias:
913 dumpBareDeclRef(NNS->getAsNamespaceAlias());
915 case NestedNameSpecifier::TypeSpec:
917 dumpType(QualType(NNS->getAsType(), 0));
919 case NestedNameSpecifier::TypeSpecWithTemplate:
920 OS <<
" TypeSpecWithTemplate";
921 dumpType(QualType(NNS->getAsType(), 0));
923 case NestedNameSpecifier::Global:
926 case NestedNameSpecifier::Super:
931 dumpNestedNameSpecifier(NNS->
getPrefix());
946const char *TextNodeDumper::getCommandName(
unsigned CommandID) {
953 return "<not a builtin command>";
957#define OPTION(NAME, TYPE, WIDTH, PREVIOUS) \
958 if (FPO.has##NAME##Override()) \
959 OS << " " #NAME "=" << FPO.get##NAME##Override();
960#include "clang/Basic/FPOptions.def"
965 OS <<
" Text=\"" <<
C->getText() <<
"\"";
970 OS <<
" Name=\"" << getCommandName(
C->getCommandID()) <<
"\"";
971 switch (
C->getRenderKind()) {
973 OS <<
" RenderNormal";
979 OS <<
" RenderMonospaced";
982 OS <<
" RenderEmphasized";
985 OS <<
" RenderAnchor";
989 for (
unsigned i = 0, e =
C->getNumArgs(); i != e; ++i)
990 OS <<
" Arg[" << i <<
"]=\"" <<
C->getArgText(i) <<
"\"";
995 OS <<
" Name=\"" <<
C->getTagName() <<
"\"";
996 if (
C->getNumAttrs() != 0) {
998 for (
unsigned i = 0, e =
C->getNumAttrs(); i != e; ++i) {
1000 OS <<
" \"" <<
Attr.Name <<
"=\"" <<
Attr.Value <<
"\"";
1003 if (
C->isSelfClosing())
1004 OS <<
" SelfClosing";
1009 OS <<
" Name=\"" <<
C->getTagName() <<
"\"";
1014 OS <<
" Name=\"" << getCommandName(
C->getCommandID()) <<
"\"";
1015 for (
unsigned i = 0, e =
C->getNumArgs(); i != e; ++i)
1016 OS <<
" Arg[" << i <<
"]=\"" <<
C->getArgText(i) <<
"\"";
1024 if (
C->isDirectionExplicit())
1025 OS <<
" explicitly";
1027 OS <<
" implicitly";
1029 if (
C->hasParamName()) {
1030 if (
C->isParamIndexValid())
1031 OS <<
" Param=\"" <<
C->getParamName(FC) <<
"\"";
1033 OS <<
" Param=\"" <<
C->getParamNameAsWritten() <<
"\"";
1036 if (
C->isParamIndexValid() && !
C->isVarArgParam())
1037 OS <<
" ParamIndex=" <<
C->getParamIndex();
1042 if (
C->hasParamName()) {
1043 if (
C->isPositionValid())
1044 OS <<
" Param=\"" <<
C->getParamName(FC) <<
"\"";
1046 OS <<
" Param=\"" <<
C->getParamNameAsWritten() <<
"\"";
1049 if (
C->isPositionValid()) {
1050 OS <<
" Position=<";
1051 for (
unsigned i = 0, e =
C->getDepth(); i != e; ++i) {
1052 OS <<
C->getIndex(i);
1062 OS <<
" Name=\"" << getCommandName(
C->getCommandID())
1065 <<
C->getCloseName() <<
"\"";
1071 OS <<
" Text=\"" <<
C->getText() <<
"\"";
1076 OS <<
" Text=\"" <<
C->getText() <<
"\"";
1114 OS <<
" template expansion ";
1127 if (
Node->path_empty())
1133 E =
Node->path_end();
1142 if (
Base->isVirtual())
1144 OS << RD->getName();
1152 if (
Node->hasInitStorage())
1154 if (
Node->hasVarStorage())
1156 if (
Node->hasElseStorage())
1158 if (
Node->isConstexpr())
1160 if (
Node->isConsteval()) {
1162 if (
Node->isNegatedConsteval())
1169 if (
Node->hasInitStorage())
1171 if (
Node->hasVarStorage())
1176 if (
Node->hasVarStorage())
1181 OS <<
" '" <<
Node->getName() <<
"'";
1182 if (
Node->isSideEntry())
1183 OS <<
" side_entry";
1187 OS <<
" '" <<
Node->getLabel()->getName() <<
"'";
1192 if (
Node->caseStmtIsGNURange())
1197 if (
const VarDecl *Cand =
Node->getNRVOCandidate()) {
1198 OS <<
" nrvo_candidate(";
1199 dumpBareDeclRef(Cand);
1205 if (
Node->isImplicit())
1210 if (
Node->isImplicit())
1215 if (
Node->hasAPValueResult())
1221 if (
Node->usesADL())
1223 if (
Node->hasStoredFPFeatures())
1224 printFPOptions(
Node->getFPFeatures());
1229 if (OperatorSpelling)
1230 OS <<
" '" << OperatorSpelling <<
"'";
1239 OS <<
Node->getCastKindName();
1243 if (
Node->hasStoredFPFeatures())
1244 printFPOptions(
Node->getFPFeatures());
1249 if (
Node->isPartOfExplicitCast())
1250 OS <<
" part_of_explicit_cast";
1257 if (
Node->getDecl() !=
Node->getFoundDecl()) {
1262 switch (
Node->isNonOdrUse()) {
1268 if (
Node->isCapturedByCopyInLambdaWithExplicitObjectParameter())
1269 OS <<
" dependent_capture";
1270 else if (
Node->refersToEnclosingVariableOrCapture())
1271 OS <<
" refers_to_enclosing_variable_or_capture";
1273 if (
Node->isImmediateEscalating())
1274 OS <<
" immediate-escalating";
1280 dumpNestedNameSpecifier(
Node->getQualifier());
1286 if (!
Node->requiresADL())
1288 OS <<
"ADL) = '" <<
Node->getName() <<
'\'';
1291 E =
Node->decls_end();
1301 OS <<
" " <<
Node->getDecl()->getDeclKindName() <<
"Decl";
1303 OS <<
"='" << *
Node->getDecl() <<
"'";
1305 if (
Node->isFreeIvar())
1306 OS <<
" isFreeIvar";
1320 OS <<
" " <<
Node->getValue();
1324 bool isSigned =
Node->getType()->isSignedIntegerType();
1331 OS <<
" " <<
Node->getValueAsString(10);
1336 OS <<
" " <<
Node->getValueAsApproximateDouble();
1354 OS <<
" result_dependent";
1358 OS <<
" " << (
Node->isPostfix() ?
"postfix" :
"prefix") <<
" '"
1360 if (!
Node->canOverflow())
1361 OS <<
" cannot overflow";
1362 if (
Node->hasStoredFPFeatures())
1363 printFPOptions(
Node->getStoredFPFeatures());
1370 if (
Node->isArgumentType())
1375 OS <<
" " << (
Node->isArrow() ?
"->" :
".") << *
Node->getMemberDecl();
1378 switch (
Node->isNonOdrUse()) {
1388 OS <<
" " <<
Node->getAccessor().getNameStart();
1393 if (
Node->hasStoredFPFeatures())
1394 printFPOptions(
Node->getStoredFPFeatures());
1400 <<
"' ComputeLHSTy=";
1402 OS <<
" ComputeResultTy=";
1404 if (
Node->hasStoredFPFeatures())
1405 printFPOptions(
Node->getStoredFPFeatures());
1409 OS <<
" " <<
Node->getLabel()->getName();
1414 OS <<
" " <<
Node->getCastName() <<
"<"
1415 <<
Node->getTypeAsWritten().getAsString() <<
">"
1416 <<
" <" <<
Node->getCastKindName();
1422 OS <<
" " << (
Node->getValue() ?
"true" :
"false");
1426 if (
Node->isImplicit())
1428 if (
Node->isCapturedByCopyInLambdaWithExplicitObjectParameter())
1429 OS <<
" dependent_capture";
1435 OS <<
" functional cast to " <<
Node->getTypeAsWritten().getAsString() <<
" <"
1436 <<
Node->getCastKindName() <<
">";
1437 if (
Node->hasStoredFPFeatures())
1438 printFPOptions(
Node->getFPFeatures());
1443 if (
Node->hasStoredFPFeatures())
1444 printFPOptions(
Node->getFPFeatures());
1450 if (
Node->isListInitialization())
1457 if (
Node->isElidable())
1459 if (
Node->isListInitialization())
1461 if (
Node->isStdInitListInitialization())
1462 OS <<
" std::initializer_list";
1463 if (
Node->requiresZeroInitialization())
1465 if (
Node->isImmediateEscalating())
1466 OS <<
" immediate-escalating";
1471 OS <<
" (CXXTemporary";
1477 if (
Node->isGlobalNew())
1479 if (
Node->isArray())
1481 if (
Node->getOperatorNew()) {
1490 if (
Node->isGlobalDelete())
1492 if (
Node->isArrayForm())
1494 if (
Node->getOperatorDelete()) {
1513 if (
Node->hasRewrittenInit())
1514 OS <<
" has rewritten init";
1518 if (
Node->hasRewrittenInit())
1519 OS <<
" has rewritten init";
1525 OS <<
" extended by ";
1531 for (
unsigned i = 0, e =
Node->getNumObjects(); i != e; ++i)
1542 OS <<
" " << (
Node->isArrow() ?
"->" :
".") <<
Node->getMember();
1548 switch (
Node->getReceiverKind()) {
1558 OS <<
" super (instance)";
1562 OS <<
" super (class)";
1568 if (
auto *BoxingMethod =
Node->getBoxingMethod()) {
1570 BoxingMethod->getSelector().print(OS);
1575 if (!
Node->getCatchParamDecl())
1589 OS <<
' ' << *
Node->getProtocol();
1593 if (
Node->isImplicitProperty()) {
1594 OS <<
" Kind=MethodRef Getter=\"";
1595 if (
Node->getImplicitPropertyGetter())
1596 Node->getImplicitPropertyGetter()->getSelector().
print(OS);
1600 OS <<
"\" Setter=\"";
1602 Setter->getSelector().print(OS);
1607 OS <<
" Kind=PropertyRef Property=\"" << *
Node->getExplicitProperty()
1611 if (
Node->isSuperReceiver())
1614 OS <<
" Messaging=";
1615 if (
Node->isMessagingGetter() &&
Node->isMessagingSetter())
1616 OS <<
"Getter&Setter";
1617 else if (
Node->isMessagingGetter())
1619 else if (
Node->isMessagingSetter())
1625 if (
Node->isArraySubscriptRefExpr())
1626 OS <<
" Kind=ArraySubscript GetterForArray=\"";
1628 OS <<
" Kind=DictionarySubscript GetterForDictionary=\"";
1629 if (
Node->getAtIndexMethodDecl())
1630 Node->getAtIndexMethodDecl()->getSelector().
print(OS);
1634 if (
Node->isArraySubscriptRefExpr())
1635 OS <<
"\" SetterForArray=\"";
1637 OS <<
"\" SetterForDictionary=\"";
1638 if (
Node->setAtIndexMethodDecl())
1639 Node->setAtIndexMethodDecl()->getSelector().
print(OS);
1645 OS <<
" " << (
Node->getValue() ?
"__objc_yes" :
"__objc_no");
1650 for (
unsigned I = 0, E =
Node->numOfIterators(); I < E; ++I) {
1673 if (!
Node->isValueDependent())
1674 OS << (
Node->isSatisfied() ?
" satisfied" :
" unsatisfied");
1678 if (
T->isSpelledAsLValue())
1679 OS <<
" written as lvalue reference";
1683 switch (
T->getSizeModifier()) {
1693 OS <<
" " <<
T->getIndexTypeQualifiers().getAsString();
1697 OS <<
" " <<
T->getSize();
1721 switch (
T->getVectorKind()) {
1728 OS <<
" altivec pixel";
1731 OS <<
" altivec bool";
1740 OS <<
" fixed-length sve data vector";
1743 OS <<
" fixed-length sve predicate vector";
1746 OS <<
" fixed-length rvv data vector";
1749 OS <<
" fixed-length rvv mask vector";
1752 OS <<
" " <<
T->getNumElements();
1757 if (EI.getNoReturn())
1759 if (EI.getProducesResult())
1760 OS <<
" produces_result";
1761 if (EI.getHasRegParm())
1762 OS <<
" regparm " << EI.getRegParm();
1768 if (EPI.HasTrailingReturn)
1769 OS <<
" trailing_return";
1778 switch (EPI.RefQualifier) {
1789 switch (EPI.ExceptionSpec.Type) {
1793 OS <<
" exceptionspec_dynamic_none";
1796 OS <<
" exceptionspec_dynamic";
1799 OS <<
" exceptionspec_ms_any";
1802 OS <<
" exceptionspec_nothrow";
1805 OS <<
" exceptionspec_basic_noexcept";
1808 OS <<
" exceptionspec_dependent_noexcept";
1811 OS <<
" exceptionspec_noexcept_false";
1814 OS <<
" exceptionspec_noexcept_true";
1817 OS <<
" exceptionspec_unevaluated";
1820 OS <<
" exceptionspec_uninstantiated";
1823 OS <<
" exceptionspec_unparsed";
1826 if (!EPI.ExceptionSpec.Exceptions.empty()) {
1828 OS <<
"Exceptions:";
1829 for (
unsigned I = 0, N = EPI.ExceptionSpec.Exceptions.size(); I != N;
1833 dumpType(EPI.ExceptionSpec.Exceptions[I]);
1837 if (EPI.ExceptionSpec.NoexceptExpr) {
1839 OS <<
"NoexceptExpr: ";
1840 Visit(EPI.ExceptionSpec.NoexceptExpr);
1843 dumpDeclRef(EPI.ExceptionSpec.SourceDecl,
"ExceptionSourceDecl");
1844 dumpDeclRef(EPI.ExceptionSpec.SourceTemplate,
"ExceptionSourceTemplate");
1856 if (!
T->typeMatchesDecl())
1862 if (!
T->typeMatchesDecl())
1867 switch (
T->getUTTKind()) {
1868#define TRANSFORM_TYPE_TRAIT_DEF(Enum, Trait) \
1869 case UnaryTransformType::Enum: \
1872#include "clang/Basic/TransformTypeTraits.def"
1881 OS <<
" depth " <<
T->getDepth() <<
" index " <<
T->getIndex();
1882 if (
T->isParameterPack())
1891 if (
auto PackIndex =
T->getPackIndex())
1892 OS <<
" pack_index " << *PackIndex;
1902 if (
T->isDecltypeAuto())
1903 OS <<
" decltype(auto)";
1904 if (!
T->isDeduced())
1906 if (
T->isConstrained())
1918 if (
T->isTypeAlias())
1923 T->getTemplateName().
dump(OS);
1936 if (
auto N =
T->getNumExpansions())
1937 OS <<
" expansions " << *N;
1953 OS <<
" __module_private__";
1965 OS <<
" __module_private__";
1974 OS <<
" __module_private__";
1976 OS <<
" definition";
1988 for (
const auto *Child : D->
chain())
2005 OS <<
" __module_private__";
2023 OS << (isa<CXXDestructorDecl>(D) ?
" not_selected" :
" ineligible");
2039 if (
const auto *MD = dyn_cast<CXXMethodDecl>(D)) {
2040 if (MD->size_overridden_methods() != 0) {
2048 auto Overrides = MD->overridden_methods();
2049 OS <<
"Overrides: [ ";
2050 dumpOverride(*Overrides.begin());
2051 for (
const auto *Override : llvm::drop_begin(Overrides)) {
2053 dumpOverride(Override);
2061 OS <<
" implicit-inline";
2068 OS <<
" <<<NULL params x " << D->
getNumParams() <<
">>>";
2071 OS <<
" instantiated_from";
2084 OS <<
" aggregate ";
2091 OS <<
" extended by ";
2106 OS <<
" __module_private__";
2112 if (
const auto *
P = dyn_cast<ParmVarDecl>(D);
2113 P &&
P->isExplicitObjectParameter())
2128 OS <<
" tls_dynamic";
2132 OS <<
" __module_private__";
2151 OS <<
" parenlistinit";
2193 llvm_unreachable(
"unexpected pragma comment kind");
2210 StringRef Arg = D->
getArg();
2212 OS <<
" \"" << Arg <<
"\"";
2223 OS <<
" openmp_standalone_directive";
2233 OS <<
" initializer";
2237 OS <<
" omp_priv = ";
2240 OS <<
" omp_priv ()";
2253 OS <<
"<<<NULL>>> OMPClause";
2258 StringRef ClauseName(
2259 llvm::omp::getOpenMPClauseName(
C->getClauseKind()));
2260 OS <<
"OMP" << ClauseName.substr(0, 1).upper()
2261 << ClauseName.drop_front() <<
"Clause";
2307 OS <<
" instantiated_from";
2310 if (
const auto *CTSD = dyn_cast<ClassTemplateSpecializationDecl>(D))
2321 OS <<
"DefinitionData";
2323#define FLAG(fn, name) \
2326 FLAG(isParsingBaseSpecifiers, parsing_base_specifiers);
2328 FLAG(isGenericLambda, generic);
2329 FLAG(isLambda, lambda);
2331 FLAG(isAnonymousStructOrUnion, is_anonymous);
2333 FLAG(isEmpty, empty);
2334 FLAG(isAggregate, aggregate);
2335 FLAG(isStandardLayout, standard_layout);
2336 FLAG(isTriviallyCopyable, trivially_copyable);
2339 FLAG(isPolymorphic, polymorphic);
2340 FLAG(isAbstract, abstract);
2341 FLAG(isLiteral, literal);
2343 FLAG(hasUserDeclaredConstructor, has_user_declared_ctor);
2344 FLAG(hasConstexprNonCopyMoveConstructor, has_constexpr_non_copy_move_ctor);
2345 FLAG(hasMutableFields, has_mutable_fields);
2346 FLAG(hasVariantMembers, has_variant_members);
2347 FLAG(allowConstDefaultInit, can_const_default_init);
2352 OS <<
"DefaultConstructor";
2354 FLAG(hasDefaultConstructor, exists);
2355 FLAG(hasTrivialDefaultConstructor, trivial);
2356 FLAG(hasNonTrivialDefaultConstructor, non_trivial);
2357 FLAG(hasUserProvidedDefaultConstructor, user_provided);
2358 FLAG(hasConstexprDefaultConstructor,
constexpr);
2359 FLAG(needsImplicitDefaultConstructor, needs_implicit);
2360 FLAG(defaultedDefaultConstructorIsConstexpr, defaulted_is_constexpr);
2366 OS <<
"CopyConstructor";
2368 FLAG(hasSimpleCopyConstructor, simple);
2369 FLAG(hasTrivialCopyConstructor, trivial);
2370 FLAG(hasNonTrivialCopyConstructor, non_trivial);
2371 FLAG(hasUserDeclaredCopyConstructor, user_declared);
2372 FLAG(hasCopyConstructorWithConstParam, has_const_param);
2373 FLAG(needsImplicitCopyConstructor, needs_implicit);
2374 FLAG(needsOverloadResolutionForCopyConstructor,
2375 needs_overload_resolution);
2377 FLAG(defaultedCopyConstructorIsDeleted, defaulted_is_deleted);
2378 FLAG(implicitCopyConstructorHasConstParam, implicit_has_const_param);
2384 OS <<
"MoveConstructor";
2386 FLAG(hasMoveConstructor, exists);
2387 FLAG(hasSimpleMoveConstructor, simple);
2388 FLAG(hasTrivialMoveConstructor, trivial);
2389 FLAG(hasNonTrivialMoveConstructor, non_trivial);
2390 FLAG(hasUserDeclaredMoveConstructor, user_declared);
2391 FLAG(needsImplicitMoveConstructor, needs_implicit);
2392 FLAG(needsOverloadResolutionForMoveConstructor,
2393 needs_overload_resolution);
2395 FLAG(defaultedMoveConstructorIsDeleted, defaulted_is_deleted);
2401 OS <<
"CopyAssignment";
2403 FLAG(hasSimpleCopyAssignment, simple);
2404 FLAG(hasTrivialCopyAssignment, trivial);
2405 FLAG(hasNonTrivialCopyAssignment, non_trivial);
2406 FLAG(hasCopyAssignmentWithConstParam, has_const_param);
2407 FLAG(hasUserDeclaredCopyAssignment, user_declared);
2408 FLAG(needsImplicitCopyAssignment, needs_implicit);
2409 FLAG(needsOverloadResolutionForCopyAssignment, needs_overload_resolution);
2410 FLAG(implicitCopyAssignmentHasConstParam, implicit_has_const_param);
2416 OS <<
"MoveAssignment";
2418 FLAG(hasMoveAssignment, exists);
2419 FLAG(hasSimpleMoveAssignment, simple);
2420 FLAG(hasTrivialMoveAssignment, trivial);
2421 FLAG(hasNonTrivialMoveAssignment, non_trivial);
2422 FLAG(hasUserDeclaredMoveAssignment, user_declared);
2423 FLAG(needsImplicitMoveAssignment, needs_implicit);
2424 FLAG(needsOverloadResolutionForMoveAssignment, needs_overload_resolution);
2432 FLAG(hasSimpleDestructor, simple);
2433 FLAG(hasIrrelevantDestructor, irrelevant);
2434 FLAG(hasTrivialDestructor, trivial);
2435 FLAG(hasNonTrivialDestructor, non_trivial);
2436 FLAG(hasUserDeclaredDestructor, user_declared);
2437 FLAG(hasConstexprDestructor,
constexpr);
2438 FLAG(needsImplicitDestructor, needs_implicit);
2439 FLAG(needsOverloadResolutionForDestructor, needs_overload_resolution);
2441 FLAG(defaultedDestructorIsDeleted, defaulted_is_deleted);
2445 for (
const auto &I : D->
bases()) {
2451 if (I.isPackExpansion())
2477 if (TC->getNamedConcept() != TC->getFoundDecl()) {
2562 OS <<
"constructed ";
2594 OS <<
" synthesize";
2638 OS <<
" contravariant";
2664 for (
const auto *Child : D->
protocols())
2673 for (
const auto *Child : D->
protocols())
2720 OS <<
" unsafe_unretained";
2735 OS <<
" synthesize";
2747 OS <<
" captures_this";
2756 if (S->hasStoredFPFeatures())
2757 printFPOptions(S->getStoredFPFeatures());
2769 OS <<
" " << S->getDirectiveKind();
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 ...
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.
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.
bool capturesCXXThis() const
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.
DeductionCandidate getDeductionCandidateKind() const
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.
CXXRecordDecl * getInstantiatedFromMemberClass() const
If this record is an instantiation of a member class, retrieves the member class from which it was in...
bool needsOverloadResolutionForMoveConstructor() const
Determine whether we need to eagerly declare a defaulted move constructor for this class.
bool needsOverloadResolutionForDestructor() const
Determine whether we need to eagerly declare a destructor for this class.
bool needsOverloadResolutionForCopyConstructor() const
Determine whether we need to eagerly declare a defaulted copy constructor for this 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...
CXXRecordDecl * getConstructedBaseClass() const
Get the base class whose constructor or constructor shadow declaration is passed the constructor argu...
bool constructsVirtualBase() const
Returns true if the constructed base class is a virtual base class subobject of this declaration's cl...
ConstructorUsingShadowDecl * getConstructedBaseClassShadowDecl() const
Get the inheriting constructor declaration for the base class for which we don't have an explicit ini...
ConstructorUsingShadowDecl * getNominatedBaseClassShadowDecl() const
Get the inheriting constructor declaration for the direct base class from which this using shadow dec...
CXXRecordDecl * getNominatedBaseClass() const
Get the base class that was named in the using declaration.
Represents a 'co_return' statement in the C++ Coroutines TS.
DeclContext * getParent()
getParent - Returns the containing DeclContext.
A reference to a declared variable, function, enum, etc.
Decl - This represents one declaration (or definition), e.g.
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.
@ 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 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
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.
NestedNameSpecifier * getQualifier() const
Retrieve the nested-name-specifier that qualifies the name of this declaration, if it was present in ...
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.
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.
An instance of this object exists for each enum constant that is defined.
bool isScoped() const
Returns true if this is a C++11 scoped enumeration.
bool isScopedUsingClassTag() const
Returns true if this is a C++11 scoped enumeration.
bool isFixed() const
Returns true if this is an Objective-C, C++11, or Microsoft-style enumeration with a fixed underlying...
QualType getIntegerType() const
Return the integer type this enum decl corresponds to.
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.
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.
bool isMutable() const
Determines whether this field is mutable (C++ only).
FriendDecl - Represents the declaration of a friend entity, which can be a function,...
TypeSourceInfo * getFriendType() const
If this friend declaration names an (untemplated but possibly dependent) type, return the type; other...
Represents a function declaration or definition.
StringLiteral * getDeletedMessage() const
Get the message that indicates why this function was deleted.
bool isInlined() const
Determine whether this function should be inlined, because it is either marked "inline" or "constexpr...
bool isTrivial() const
Whether this function is "trivial" in some specialized C++ senses.
param_iterator param_begin()
bool isDeleted() const
Whether this function has been deleted.
StorageClass getStorageClass() const
Returns the storage class as written in the source.
bool isDeletedAsWritten() const
bool isPureVirtual() const
Whether this virtual function is pure, i.e.
bool isDefaulted() const
Whether this function is defaulted.
bool isIneligibleOrNotSelected() const
TemplateSpecializationKind getTemplateSpecializationKind() const
Determine what kind of template instantiation this function represents.
bool isVirtualAsWritten() const
Whether this function is marked as virtual explicitly.
FunctionDecl * getInstantiatedFromMemberFunction() const
If this function is an instantiation of a member function of a class template specialization,...
unsigned getNumParams() const
Return the number of parameters this function must have based on its FunctionType.
bool isInlineSpecified() const
Determine whether the "inline" keyword was specified for this function.
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
bool isResultDependent() const
Whether this generic selection is result-dependent.
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...
Module * getImportedModule() const
Retrieve the module that was imported by the import declaration.
Represents a field injected from an anonymous union/struct into the parent scope.
ArrayRef< NamedDecl * > chain() const
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-...
unsigned getManglingNumber() const
ValueDecl * getExtendingDecl()
Represents a linkage specification.
LinkageSpecLanguageIDs getLanguage() const
Return the language specified by this 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...
decl_type * getFirstDecl()
Return the first declaration of this declaration or itself if this is the only declaration.
Describes a module or submodule.
std::string getFullModuleName(bool AllowStringLiterals=false) const
Retrieve the full name of this module, including the path from its top-level module.
This represents a decl that may have a name.
bool isModulePrivate() const
Whether this declaration was marked as being private to the module in which it was defined.
DeclarationName getDeclName() const
Get the actual, stored name of the declaration, which may be a special name.
Represents a C++ namespace alias.
NamedDecl * getAliasedNamespace() const
Retrieve the namespace that this alias refers to, which may either be a NamespaceDecl or a NamespaceA...
Represent a C++ namespace.
bool isOriginalNamespace() const
Return true if this declaration is an original (first) declaration of the namespace.
bool isInline() const
Returns true if this is an inline namespace declaration.
NamespaceDecl * getOriginalNamespace()
Get the original (first) namespace declaration.
bool isNested() const
Returns true if this is a nested namespace declaration.
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.
void print(raw_ostream &OS, const PrintingPolicy &Policy, bool ResolveTemplateArguments=false) const
Print this nested name specifier to the given output stream.
NonTypeTemplateParmDecl - Declares a non-type template parameter, e.g., "Size" in.
bool isParameterPack() const
Whether this parameter is a non-type template parameter pack.
unsigned getIndex() const
Get the index of the template parameter within its parameter list.
unsigned getDepth() const
Get the nesting depth of the template parameter.
Pseudo declaration for capturing expressions.
This is a basic class for representing single OpenMP clause.
This represents '#pragma omp declare reduction ...' directive.
Expr * getInitializer()
Get initializer expression (if specified) of the declare reduction construct.
Expr * getCombiner()
Get combiner expression of the declare reduction construct.
OMPDeclareReductionInitKind getInitializerKind() const
Get initializer kind.
This is a basic class for representing single OpenMP executable directive.
bool isStandaloneDirective() const
Returns whether or not this is a Standalone 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.
clauselist_range clauselists()
Represents Objective-C's @catch statement.
ObjCBoolLiteralExpr - Objective-C Boolean Literal.
ObjCBoxedExpr - used for generalized expression boxing.
ObjCCategoryDecl - Represents a category declaration.
ObjCCategoryImplDecl * getImplementation() const
ObjCInterfaceDecl * getClassInterface()
protocol_range protocols() const
ObjCCategoryImplDecl - An object of this class encapsulates a category @implementation declaration.
ObjCCategoryDecl * getCategoryDecl() const
ObjCCompatibleAliasDecl - Represents alias of a class.
const ObjCInterfaceDecl * getClassInterface() const
ObjCEncodeExpr, used for @encode in Objective-C.
const ObjCInterfaceDecl * getClassInterface() const
ObjCImplementationDecl - Represents a class definition - this is where method definitions are specifi...
const ObjCInterfaceDecl * getSuperClass() const
Represents an ObjC class declaration.
protocol_range protocols() const
ObjCImplementationDecl * getImplementation() const
ObjCInterfaceDecl * getSuperClass() const
Interfaces are the core concept in Objective-C for object oriented design.
ObjCIvarDecl - Represents an ObjC instance variable.
AccessControl getAccessControl() const
bool getSynthesize() const
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.
bool isInstanceMethod() const
QualType getReturnType() const
Represents one property declaration in an Objective-C interface.
ObjCMethodDecl * getGetterMethodDecl() const
ObjCMethodDecl * getSetterMethodDecl() const
ObjCPropertyAttribute::Kind getPropertyAttributes() const
PropertyControl getPropertyImplementation() const
ObjCPropertyImplDecl - Represents implementation declaration of a property in a class or category imp...
ObjCIvarDecl * getPropertyIvarDecl() const
Kind getPropertyImplementation() const
ObjCPropertyDecl * getPropertyDecl() const
ObjCPropertyRefExpr - A dot-syntax expression to access an ObjC property.
Represents an Objective-C protocol declaration.
protocol_range protocols() const
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.
bool hasExplicitBound() const
Whether this type parameter has an explicitly-written type bound, e.g., "T : NSView".
ObjCTypeParamVariance getVariance() const
Determine the variance of this 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...
Represents a pack expansion of types.
Represents a #pragma detect_mismatch line.
StringRef getName() const
StringRef getValue() const
[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.
SplitQualType split() const
Divides a QualType into its unqualified type and a set of local qualifiers.
std::string getAsString() const
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.
decl_type * getPreviousDecl()
Return the previous declaration of this declaration or NULL if this is the first declaration.
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
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.
NestedNameSpecifier * getQualifier() const
Retrieve the nested-name-specifier that qualifies the name of this declaration, if it was present in ...
StringRef getKindName() const
bool isCompleteDefinition() const
Return true if this decl has its body fully specified.
Represents a template argument.
QualType getAsType() const
Retrieve the type for a type template argument.
llvm::APSInt getAsIntegral() const
Retrieve the template argument as an integral value.
TemplateName getAsTemplate() const
Retrieve the template name for a template name argument.
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,...
@ UsingTemplate
A template name that refers to a template declaration found through a specific using shadow declarati...
void dump(raw_ostream &OS) const
Debugging aid that dumps the template name.
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.
bool isParameterPack() const
Whether this template template parameter is a template parameter pack.
unsigned getIndex() const
Get the index of the template parameter within its parameter list.
unsigned getDepth() const
Get the nesting depth of the template parameter.
Declaration of a template type parameter.
bool wasDeclaredWithTypename() const
Whether this template type parameter was declared with the 'typename' keyword.
unsigned getIndex() const
Retrieve the index of the template parameter.
const TypeConstraint * getTypeConstraint() const
Returns the type constraint associated with this template parameter (if any).
bool isParameterPack() const
Returns whether this is a parameter pack.
unsigned getDepth() const
Retrieve the depth of the template 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 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 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 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 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 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 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.
const T * getAs() const
Member-template getAs<specific type>'.
Represents the declaration of a typedef-name via the 'typedef' type specifier.
QualType getUnderlyingType() const
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.
NestedNameSpecifier * getQualifier() const
Retrieve the nested-name-specifier that qualifies the name.
Represents a dependent using declaration which was not marked with typename.
NestedNameSpecifier * getQualifier() const
Retrieve the nested-name-specifier that qualifies the name.
Represents a C++ using-declaration.
NestedNameSpecifier * getQualifier() const
Retrieve the nested-name-specifier that qualifies the name.
Represents C++ using-directive.
NamespaceDecl * getNominatedNamespace()
Returns the namespace nominated by this using-directive.
Represents a C++ using-enum-declaration.
EnumDecl * getEnumDecl() const
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.
bool isConstexpr() const
Whether this variable is (C++11) constexpr.
TLSKind getTLSKind() const
InitializationStyle getInitStyle() const
The style of initialization for this declaration.
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)
APValue * evaluateValue() const
Attempt to evaluate the value of the initializer attached to this declaration, and produce notes expl...
bool isNRVOVariable() const
Determine whether this local variable can be used with the named return value optimization (NRVO).
QualType::DestructionKind needsDestruction(const ASTContext &Ctx) const
Would the destruction of this variable have any effect, and if so, what kind?
bool isInline() const
Whether this variable is (C++1z) inline.
const Expr * getInit() const
@ TLS_Static
TLS with a known-constant initializer.
@ TLS_Dynamic
TLS with a dynamic initializer.
@ TLS_None
Not a TLS variable.
StorageClass getStorageClass() const
Returns the storage class as written in the source.
TemplateSpecializationKind getTemplateSpecializationKind() const
If this variable is an instantiation of a variable template or a static data member of a class templa...
bool isParameterPack() const
Determine whether this variable is actually a function parameter pack or init-capture pack.
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
@ 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'.
@ Self
'self' clause, allowed on Compute and Combined Constructs, plus 'update'.
@ CopyOut
'copyout' clause, allowed on Compute and Combined constructs, plus 'data', 'exit data',...
@ 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',...
@ 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...