clang: lib/AST/TextNodeDumper.cpp Source File (original) (raw)
1
2
3
4
5
6
7
8
9
10
11
12
26#include "llvm/ADT/StringExtras.h"
27#include "llvm/Frontend/HLSL/HLSLRootSignature.h"
28
29#include
30#include
31
32using namespace clang;
33
35
36template
40 OS << " first " << First;
41}
42
43template
46 if (Prev)
47 OS << " prev " << Prev;
48}
49
50
51
54#define DECL(DERIVED, BASE) \
55 case Decl::DERIVED: \
56 return dumpPreviousDeclImpl(OS, cast<DERIVED##Decl>(D));
57#define ABSTRACT_DECL(DECL)
58#include "clang/AST/DeclNodes.inc"
59 }
60 llvm_unreachable("Decl that isn't part of DeclNodes.inc!");
61}
62
64 bool ShowColors)
65 : TextTreeStructure(OS, ShowColors), OS(OS), ShowColors(ShowColors),
66 Context(&Context), SM(&Context.getSourceManager()),
67 PrintPolicy(Context.getPrintingPolicy()),
68 Traits(&Context.getCommentCommandTraits()) {}
69
72
75 if () {
77 OS << "<<>>";
78 return;
79 }
80
81 {
83 OS << C->getCommentKindName();
84 }
87
90}
91
93 {
95
97#define ATTR(X) \
98 case attr::X: \
99 OS << #X; \
100 break;
101#include "clang/Basic/AttrList.inc"
102 }
103 OS << "Attr";
104 }
108 OS << " Inherited";
110 OS << " Implicit";
111
113}
114
116 const Decl *From, StringRef Label) {
117 OS << "TemplateArgument";
120
121 if (From)
123
125}
126
128 if (!Node) {
130 OS << "<<>>";
131 return;
132 }
133 {
136 }
139
140 if (const auto *E = dyn_cast(Node)) {
142
143 if (E->containsErrors()) {
145 OS << " contains-errors";
146 }
147
148 {
150 switch (E->getValueKind()) {
152 break;
154 OS << " lvalue";
155 break;
157 OS << " xvalue";
158 break;
159 }
160 }
161
162 {
164 switch (E->getObjectKind()) {
166 break;
168 OS << " bitfield";
169 break;
171 OS << " objcproperty";
172 break;
174 OS << " objcsubscript";
175 break;
177 OS << " vectorcomponent";
178 break;
180 OS << " matrixcomponent";
181 break;
182 }
183 }
184 }
185
187}
188
190 if () {
192 OS << "<<>>";
193 return;
194 }
196 {
198 OS << "LocInfo Type";
199 }
201 return;
202 }
203
204 {
206 OS << T->getTypeClassName() << "Type";
207 }
209 OS << " ";
211
213 T->getLocallyUnqualifiedSingleStepDesugaredType();
214 if (SingleStepDesugar != QualType(T, 0))
215 OS << " sugar";
216
217 if (T->containsErrors()) {
219 OS << " contains-errors";
220 }
221
222 if (T->isDependentType())
223 OS << " dependent";
224 else if (T->isInstantiationDependentType())
225 OS << " instantiation_dependent";
226
227 if (T->isVariablyModifiedType())
228 OS << " variably_modified";
229 if (T->containsUnexpandedParameterPack())
230 OS << " contains_unexpanded_pack";
231 if (T->isFromAST())
232 OS << " imported";
233
235}
236
238 OS << "QualType";
240 OS << " ";
242 OS << " " << T.split().Quals.getAsString();
243}
244
246 if (!TL) {
248 OS << "<<>>";
249 return;
250 }
251
252 {
255 ? "Qualified"
257 << "TypeLoc";
258 }
260 OS << ' ';
262
264}
265
267 if (!D) {
269 OS << "<<>>";
270 return;
271 }
272
273 {
276 }
282 OS << ' ';
285 OS << " imported";
287 OS << " in " << M->getFullModuleName();
288 if (auto *ND = dyn_cast(D))
291 AddChild([=] { OS << "also in " << M->getFullModuleName(); });
292 if (const NamedDecl *ND = dyn_cast(D))
293 if (!ND->isUnconditionallyVisible())
294 OS << " hidden";
296 OS << " implicit";
297
299 OS << " used";
301 OS << " referenced";
302
304 OS << " invalid";
305 if (const FunctionDecl *FD = dyn_cast(D)) {
306 if (FD->isConstexprSpecified())
307 OS << " constexpr";
308 if (FD->isConsteval())
309 OS << " consteval";
310 else if (FD->isImmediateFunction())
311 OS << " immediate";
312 if (FD->isMultiVersion())
313 OS << " multiversion";
314 }
315
317 const auto *MD = dyn_cast(D);
318 if (!MD || !MD->isThisDeclarationADefinition()) {
319 const auto *DC = dyn_cast(D);
320 if (DC && DC->hasExternalLexicalStorage()) {
322 OS << " ";
323 }
324 }
325 }
326
329 break;
331 OS << " friend";
332 break;
334 OS << " friend_undeclared";
335 break;
336 }
337
339}
340
342 OS << "CXXCtorInitializer";
343 if (Init->isAnyMemberInitializer()) {
344 OS << ' ';
346 } else if (Init->isBaseInitializer()) {
348 } else if (Init->isDelegatingInitializer()) {
349 dumpType(Init->getTypeSourceInfo()->getType());
350 } else {
351 llvm_unreachable("Unknown initializer type");
352 }
353}
354
356 OS << "capture";
357 if (C.isByRef())
358 OS << " byref";
359 if (C.isNested())
360 OS << " nested";
361 if (C.getVariable()) {
362 OS << ' ';
364 }
365}
366
368 if () {
370 OS << "<<>> OMPClause";
371 return;
372 }
373 {
375 StringRef ClauseName(llvm::omp::getOpenMPClauseName(C->getClauseKind()));
376 OS << "OMP" << ClauseName.substr(0, 1).upper()
377 << ClauseName.drop_front() << "Clause";
378 }
381 if (C->isImplicit())
382 OS << " ";
383}
384
389
391 if () {
393 OS << "<<>> OpenACCClause";
394 return;
395 }
396 {
398 OS << C->getClauseKind();
399
400
401
402 switch (C->getClauseKind()) {
404 OS << '(' << cast(C)->getDefaultClauseKind() << ')';
405 break;
438
439
440 OS << " clause";
441 break;
443 OS << " clause";
444
445
447
448 for (unsigned I = 0; I < GC->getNumExprs(); ++I) {
449 OS << " " << GC->getExpr(I).first;
450 }
451 break;
452 }
454 OS << " clause";
456 OS << ": force";
457 break;
458
462 OS << " clause";
466 break;
470 OS << " clause";
474 break;
478 OS << " clause";
481 OS << " modifiers: "
483 break;
487 OS << " clause";
491 break;
493 OS << " clause";
495 OS << " has devnum";
497 OS << " has queues tag";
498 break;
501 OS << "(";
502 llvm::interleaveComma(
505 if (Arch.getIdentifierInfo() == nullptr)
506 OS << "*";
507 else
508 OS << Arch.getIdentifierInfo()->getName();
509 });
510 OS << ")";
511 break;
513 OS << " clause Operator: "
515 break;
517 OS << " clause";
519 OS << " identifier '"
521 << "'";
522 else
525 }
526 }
529}
530
533 if (TSI) {
534 OS << "case ";
536 } else {
537 OS << "default";
538 }
539
540 if (A.isSelected())
541 OS << " selected";
542}
543
545 if (!R) {
547 OS << "<<>> ConceptReference";
548 return;
549 }
550
551 OS << "ConceptReference";
554 OS << ' ';
556}
557
559 if (!R) {
561 OS << "<<>> Requirement";
562 return;
563 }
564
565 {
569 OS << "TypeRequirement";
570 break;
572 OS << "SimpleRequirement";
573 break;
575 OS << "CompoundRequirement";
576 break;
578 OS << "NestedRequirement";
579 break;
580 }
581 }
582
584
585 if (auto *ER = dyn_castconcepts::ExprRequirement(R)) {
586 if (ER->hasNoexceptRequirement())
587 OS << " noexcept";
588 }
589
591 OS << " dependent";
592 else
593 OS << (R->isSatisfied() ? " satisfied" : " unsatisfied");
595 OS << " contains_unexpanded_pack";
596}
597
599 llvm::APFloat V = F;
600 bool ignored;
601 V.convert(llvm::APFloat::IEEEdouble(), llvm::APFloat::rmNearestTiesToEven,
602 &ignored);
603 return V.convertToDouble();
604}
605
606
619 return true;
623 return false;
626 }
627 llvm_unreachable("unexpected APValue kind!");
628}
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643void TextNodeDumper::dumpAPValueChildren(
645 const APValue &(*IdxToChildFun)(const APValue &, unsigned),
646 unsigned NumChildren, StringRef LabelSingular, StringRef LabelPlurial) {
647
648
649 constexpr unsigned MaxChildrenPerLine = 4;
650 unsigned I = 0;
651 while (I < NumChildren) {
652 unsigned J = I;
653 while (J < NumChildren) {
655 (J - I < MaxChildrenPerLine)) {
656 ++J;
657 continue;
658 }
659 break;
660 }
661
662 J = std::max(I + 1, J);
663
664
665 AddChild(J - I > 1 ? LabelPlurial : LabelSingular, [=]() {
666 for (unsigned X = I; X < J; ++X) {
668 if (X + 1 != J)
669 OS << ", ";
670 }
671 });
672 I = J;
673 }
674}
675
680 OS << "None";
681 return;
683 OS << "Indeterminate";
684 return;
686 OS << "Int ";
687 {
689 OS << Value.getInt();
690 }
691 return;
693 OS << "Float ";
694 {
697 }
698 return;
700 OS << "FixedPoint ";
701 {
703 OS << Value.getFixedPoint();
704 }
705 return;
709
710 dumpAPValueChildren(
713 return Value.getVectorElt(Index);
714 },
716 return;
717 }
719 OS << "ComplexInt ";
720 {
722 OS << Value.getComplexIntReal() << " + " << Value.getComplexIntImag()
723 << 'i';
724 }
725 return;
727 OS << "ComplexFloat ";
728 {
732 }
733 return;
735 (void)Context;
736 OS << "LValue Base=";
739 OS << "null";
740 else if (const auto *BE = B.dyn_cast<const Expr *>()) {
741 OS << BE->getStmtClassName() << ' ';
744 OS << "TypeInfoLValue ";
746 BTI.print(OS, PrintPolicy);
748 OS << "DynamicAllocLValue";
751 } else {
752 const auto *VDB = B.get<const ValueDecl *>();
755 }
756 OS << ", Null=" << Value.isNullPointer()
757 << ", Offset=" << Value.getLValueOffset().getQuantity()
758 << ", HasPath=" << Value.hasLValuePath();
759 if (Value.hasLValuePath()) {
760 OS << ", PathLength=" << Value.getLValuePath().size();
761 OS << ", Path=(";
762 llvm::ListSeparator Sep;
763 for (const auto &PathEntry : Value.getLValuePath()) {
764
765
766 OS << Sep << PathEntry.getAsArrayIndex();
767 }
768 OS << ")";
769 }
770 return;
771 }
773 unsigned ArraySize = Value.getArraySize();
774 unsigned NumInitializedElements = Value.getArrayInitializedElts();
775 OS << "Array size=" << ArraySize;
776
777 dumpAPValueChildren(
780 return Value.getArrayInitializedElt(Index);
781 },
782 NumInitializedElements, "element", "elements");
783
784 if (Value.hasArrayFiller()) {
786 {
788 OS << ArraySize - NumInitializedElements << " x ";
789 }
791 });
792 }
793
794 return;
795 }
797 OS << "Struct";
798
799 dumpAPValueChildren(
802 return Value.getStructBase(Index);
803 },
804 Value.getStructNumBases(), "base", "bases");
805
806 dumpAPValueChildren(
809 return Value.getStructField(Index);
810 },
811 Value.getStructNumFields(), "field", "fields");
812
813 return;
814 }
816 OS << "Union";
817 {
821 }
822
823
824 const APValue &UnionValue = Value.getUnionValue();
826 OS << ' ';
827 Visit(UnionValue, Ty);
828 } else {
830 }
831
832 return;
833 }
835 OS << "MemberPointer ";
836 auto Path = Value.getMemberPointerPath();
838 {
840 OS << D->getDeclName();
841 }
842 OS << "::";
843 }
844
846 if (const ValueDecl *MemDecl = Value.getMemberPointerDecl())
847 OS << MemDecl->getDeclName();
848 else
849 OS << "null";
850 return;
851 }
853 OS << "AddrLabelDiff ";
854 OS << "&&" << Value.getAddrLabelDiffLHS()->getLabel()->getName();
855 OS << " - ";
856 OS << "&&" << Value.getAddrLabelDiffRHS()->getLabel()->getName();
857 return;
858 }
859 llvm_unreachable("Unknown APValue kind!");
860}
861
864 OS << ' ' << Ptr;
865}
866
868 if (!SM)
869 return;
870
872 SourceLocation SpellingLoc = SM->getSpellingLoc(Loc);
873
874
875
876 PresumedLoc PLoc = SM->getPresumedLoc(SpellingLoc);
877
879 OS << "";
880 return;
881 }
882
883 if (strcmp(PLoc.getFilename(), LastLocFilename) != 0) {
887 LastLocLine = PLoc.getLine();
888 } else if (PLoc.getLine() != LastLocLine) {
889 OS << "line" << ':' << PLoc.getLine() << ':' << PLoc.getColumn();
890 LastLocLine = PLoc.getLine();
891 } else {
892 OS << "col" << ':' << PLoc.getColumn();
893 }
894}
895
897
898 if (!SM)
899 return;
900
901 OS << " <";
904 OS << ", ";
906 }
907 OS << ">";
908
909
910}
911
914
917 OS << "'" << T_str << "'";
918
919 if (Desugar && .isNull()) {
920
921
923 if (T_split != D_split) {
925 if (T_str != D_str)
927 }
928 }
929}
930
935
937 if (!D) {
939 OS << "<<>>";
940 return;
941 }
942
943 {
946 }
948
949 if (const NamedDecl *ND = dyn_cast(D)) {
952 OS << " '" << Name << '\'';
953 else
954 switch (ND->getKind()) {
955 case Decl::Decomposition: {
957 OS << " first_binding '" << DD->bindings()[0]->getDeclName() << '\'';
958 break;
959 }
960 case Decl::Field: {
962 OS << " field_index " << FD->getFieldIndex();
963 break;
964 }
965 case Decl::ParmVar: {
967 OS << " depth " << PD->getFunctionScopeDepth() << " index "
968 << PD->getFunctionScopeIndex();
969 break;
970 }
971 case Decl::TemplateTypeParm: {
973 OS << " depth " << TD->getDepth() << " index " << TD->getIndex();
974 break;
975 }
976 case Decl::NonTypeTemplateParm: {
978 OS << " depth " << TD->getDepth() << " index " << TD->getIndex();
979 break;
980 }
981 default:
982
984 break;
985 }
986 }
987
988 if (const ValueDecl *VD = dyn_cast(D))
990}
991
998
1001 if (AccessSpelling.empty())
1002 return;
1003 OS << AccessSpelling;
1004}
1005
1008 if (auto *BD = dyn_cast<BlockDecl *>(C))
1010 else if (auto *CLE = dyn_cast<CompoundLiteralExpr *>(C))
1012 OS << "cleanup ";
1013 {
1015 OS << CLE->getStmtClassName();
1016 }
1018 });
1019 else
1020 llvm_unreachable("unexpected cleanup type");
1021}
1022
1025 switch (TSK) {
1027 break;
1029 OS << " implicit_instantiation";
1030 break;
1032 OS << " explicit_specialization";
1033 break;
1035 OS << " explicit_instantiation_declaration";
1036 break;
1038 OS << " explicit_instantiation_definition";
1039 break;
1040 }
1041}
1042
1044 if (!NNS)
1045 return;
1046
1048 OS << "NestedNameSpecifier";
1049
1050 switch (NNS.getKind()) {
1053 OS << " ";
1056 break;
1057 }
1059 OS << " TypeSpec";
1061 break;
1063 OS << " Global";
1064 break;
1066 OS << " Super";
1067 break;
1069 llvm_unreachable("unexpected null nested name specifier");
1070 }
1071 });
1072}
1073
1075 if (!D)
1076 return;
1077
1079 if (!Label.empty())
1080 OS << Label << ' ';
1082 });
1083}
1084
1087 {
1088 llvm::raw_svector_ostream SS(Str);
1089 TA.print(PrintPolicy, SS, true);
1090 }
1091 OS << " '" << Str << "'";
1092
1093 if (!Context)
1094 return;
1095
1096 if (TemplateArgument CanonTA = Context->getCanonicalTemplateArgument(TA);
1099 {
1100 llvm::raw_svector_ostream SS(CanonStr);
1101 CanonTA.print(PrintPolicy, SS, true);
1102 }
1103 if (CanonStr != Str)
1104 OS << ":'" << CanonStr << "'";
1105 }
1106}
1107
1108const char *TextNodeDumper::getCommandName(unsigned CommandID) {
1109 if (Traits)
1110 return Traits->getCommandInfo(CommandID)->Name;
1113 if (Info)
1114 return Info->Name;
1115 return "";
1116}
1117
1119#define FP_OPTION(NAME, TYPE, WIDTH, PREVIOUS) \
1120 if (FPO.has##NAME##Override()) \
1121 OS << " " #NAME "=" << FPO.get##NAME##Override();
1122#include "clang/Basic/FPOptions.def"
1123}
1124
1127 OS << " Text=\"" << C->getText() << "\"";
1128}
1129
1132 OS << " Name=\"" << getCommandName(C->getCommandID()) << "\"";
1133 switch (C->getRenderKind()) {
1135 OS << " RenderNormal";
1136 break;
1138 OS << " RenderBold";
1139 break;
1141 OS << " RenderMonospaced";
1142 break;
1144 OS << " RenderEmphasized";
1145 break;
1147 OS << " RenderAnchor";
1148 break;
1149 }
1150
1151 for (unsigned i = 0, e = C->getNumArgs(); i != e; ++i)
1152 OS << " Arg[" << i << "]=\"" << C->getArgText(i) << "\"";
1153}
1154
1157 OS << " Name=\"" << C->getTagName() << "\"";
1158 if (C->getNumAttrs() != 0) {
1159 OS << " Attrs: ";
1160 for (unsigned i = 0, e = C->getNumAttrs(); i != e; ++i) {
1162 OS << " \"" << Attr.Name << "=\"" << Attr.Value << "\"";
1163 }
1164 }
1165 if (C->isSelfClosing())
1166 OS << " SelfClosing";
1167}
1168
1171 OS << " Name=\"" << C->getTagName() << "\"";
1172}
1173
1176 OS << " Name=\"" << getCommandName(C->getCommandID()) << "\"";
1177 for (unsigned i = 0, e = C->getNumArgs(); i != e; ++i)
1178 OS << " Arg[" << i << "]=\"" << C->getArgText(i) << "\"";
1179}
1180
1183 OS << " "
1185
1186 if (C->isDirectionExplicit())
1187 OS << " explicitly";
1188 else
1189 OS << " implicitly";
1190
1191 if (C->hasParamName()) {
1192 if (C->isParamIndexValid())
1193 OS << " Param=\"" << C->getParamName(FC) << "\"";
1194 else
1195 OS << " Param=\"" << C->getParamNameAsWritten() << "\"";
1196 }
1197
1198 if (C->isParamIndexValid() && ->isVarArgParam())
1199 OS << " ParamIndex=" << C->getParamIndex();
1200}
1201
1204 if (C->hasParamName()) {
1205 if (C->isPositionValid())
1206 OS << " Param=\"" << C->getParamName(FC) << "\"";
1207 else
1208 OS << " Param=\"" << C->getParamNameAsWritten() << "\"";
1209 }
1210
1211 if (C->isPositionValid()) {
1212 OS << " Position=<";
1213 for (unsigned i = 0, e = C->getDepth(); i != e; ++i) {
1214 OS << C->getIndex(i);
1215 if (i != e - 1)
1216 OS << ", ";
1217 }
1218 OS << ">";
1219 }
1220}
1221
1224 OS << " Name=\"" << getCommandName(C->getCommandID())
1225 << "\""
1226 " CloseName=\""
1227 << C->getCloseName() << "\"";
1228}
1229
1233 OS << " Text=\"" << C->getText() << "\"";
1234}
1235
1238 OS << " Text=\"" << C->getText() << "\"";
1239}
1240
1242 OS << " null";
1243}
1244
1246 OS << " type";
1248}
1249
1252 OS << " decl";
1255}
1256
1258 OS << " nullptr";
1260}
1261
1263 OS << " integral";
1265}
1266
1269 OS << " structural value";
1271}
1272
1275 {
1277 {
1278 llvm::raw_svector_ostream SS(Str);
1279 TN.print(SS, PrintPolicy);
1280 }
1281 OS << "'" << Str << "'";
1282
1283 if (Context) {
1284 if (TemplateName CanonTN = Context->getCanonicalTemplateName(TN);
1285 CanonTN != TN) {
1287 {
1288 llvm::raw_svector_ostream SS(CanonStr);
1289 CanonTN.print(SS, PrintPolicy);
1290 }
1291 if (CanonStr != Str)
1292 OS << ":'" << CanonStr << "'";
1293 }
1294 }
1295 }
1297 });
1298}
1299
1304 return;
1309 return;
1310 }
1312 OS << " qualified";
1315 OS << " keyword";
1318 return;
1319 }
1321 OS << " dependent";
1324 return;
1325 }
1327 OS << " subst";
1330 OS << " index " << STS->getIndex();
1332 OS << " pack_index " << *PackIndex;
1334 OS << " final";
1339 return;
1340 }
1342 OS << " deduced";
1347 OS << " start " << StartPos;
1350 });
1351 return;
1352 }
1353
1355 OS << " overloaded";
1356 return;
1358 OS << " assumed";
1359 return;
1361 OS << " subst_pack";
1362 return;
1363 }
1364 llvm_unreachable("Unexpected TemplateName Kind");
1365}
1366
1368 OS << " template";
1371}
1372
1375 OS << " template expansion";
1378}
1379
1382 OS << " expr";
1384 OS << " canonical";
1386}
1387
1389 OS << " pack";
1391}
1392
1395 return;
1396
1397 OS << " (";
1398 bool First = true;
1401 I != E; ++I) {
1404 OS << " -> ";
1405
1407 Base->getType()->castAsCanonical()->getDecl());
1408
1409 if (Base->isVirtual())
1410 OS << "virtual ";
1411 OS << RD->getName();
1413 }
1414
1415 OS << ')';
1416}
1417
1420 return;
1421
1423
1427 OS << "<<>>";
1428 } else {
1429 {
1431 OS << Target->getStmtClassName();
1432 }
1434 }
1435 OS << ")";
1436}
1437
1440 OS << " has_init";
1442 OS << " has_var";
1444 OS << " has_else";
1446 OS << " constexpr";
1448 OS << " ";
1450 OS << "!";
1451 OS << "consteval";
1452 }
1453}
1454
1457 OS << " has_init";
1459 OS << " has_var";
1460}
1461
1464 OS << " has_var";
1465}
1466
1468 OS << " '" << Node->getName() << "'";
1470 OS << " side_entry";
1471}
1472
1477
1480 OS << " gnu_range";
1481}
1482
1485 OS << " nrvo_candidate(";
1487 OS << ")";
1488 }
1489}
1490
1493 OS << " implicit";
1494}
1495
1498 OS << " implicit";
1499}
1500
1506
1513
1516 if (OperatorSpelling)
1517 OS << " '" << OperatorSpelling << "'";
1518
1520}
1521
1523 OS << " <";
1524 {
1527 }
1529 OS << ">";
1532}
1533
1537 OS << " part_of_explicit_cast";
1538}
1539
1541 OS << " ";
1545 OS << " (";
1547 OS << ")";
1548 }
1551 case NOUR_Unevaluated: OS << " non_odr_use_unevaluated"; break;
1552 case NOUR_Constant: OS << " non_odr_use_constant"; break;
1553 case NOUR_Discarded: OS << " non_odr_use_discarded"; break;
1554 }
1556 OS << " dependent_capture";
1558 OS << " refers_to_enclosing_variable_or_capture";
1559
1561 OS << " immediate-escalating";
1562}
1563
1569
1572 OS << " (";
1574 OS << "no ";
1575 OS << "ADL) = '" << Node->getName() << '\'';
1576
1579 if (I == E)
1580 OS << " empty";
1581 for (; I != E; ++I)
1583}
1584
1586 {
1589 }
1590 OS << "='" << *Node->getDecl() << "'";
1593 OS << " isFreeIvar";
1594}
1595
1600
1604
1607 OS << " " << Node->getValue();
1608}
1609
1615
1620
1625
1631
1634 OS << " field ";
1636 }
1637}
1638
1641 OS << " result_dependent";
1642}
1643
1645 OS << " " << (Node->isPostfix() ? "postfix" : "prefix") << " '"
1648 OS << " cannot overflow";
1651}
1652
1660
1672
1677
1683
1687 << "' ComputeLHSTy=";
1689 OS << " ComputeResultTy=";
1693}
1694
1699
1707
1709 OS << " " << (Node->getValue() ? "true" : "false");
1710}
1711
1714 OS << " implicit";
1716 OS << " dependent_capture";
1717 OS << " this";
1718}
1719
1727
1733
1738 OS << " list";
1739}
1740
1745 OS << " elidable";
1747 OS << " list";
1749 OS << " std::initializer_list";
1751 OS << " zeroing";
1753 OS << " immediate-escalating";
1754}
1755
1758 OS << " (CXXTemporary";
1760 OS << ")";
1761}
1762
1765 OS << " global";
1767 OS << " array";
1769 OS << ' ';
1771 }
1772
1773
1774}
1775
1778 OS << " global";
1780 OS << " array";
1782 OS << ' ';
1784 }
1785}
1786
1790
1794
1798
1801 OS << " has rewritten init";
1802}
1803
1806 OS << " has rewritten init";
1807}
1808
1812 OS << " extended by ";
1814 }
1815}
1816
1818 for (unsigned i = 0, e = Node->getNumObjects(); i != e; ++i)
1820}
1821
1826
1831
1833 OS << " selector=";
1837 break;
1838
1840 OS << " class=";
1842 break;
1843
1845 OS << " super (instance)";
1846 break;
1847
1849 OS << " super (class)";
1850 break;
1851 }
1852}
1853
1856 OS << " selector=";
1857 BoxingMethod->getSelector().print(OS);
1858 }
1859}
1860
1863 OS << " catch all";
1864}
1865
1869
1874
1878
1881 OS << " Kind=MethodRef Getter=\"";
1884 else
1885 OS << "(null)";
1886
1887 OS << "\" Setter=\"";
1889 Setter->getSelector().print(OS);
1890 else
1891 OS << "(null)";
1892 OS << "\"";
1893 } else {
1895 << '"';
1896 }
1897
1899 OS << " super";
1900
1901 OS << " Messaging=";
1903 OS << "Getter&Setter";
1905 OS << "Getter";
1907 OS << "Setter";
1908}
1909
1913 OS << " Kind=ArraySubscript GetterForArray=\"";
1914 else
1915 OS << " Kind=DictionarySubscript GetterForDictionary=\"";
1918 else
1919 OS << "(null)";
1920
1922 OS << "\" SetterForArray=\"";
1923 else
1924 OS << "\" SetterForDictionary=\"";
1927 else
1928 OS << "(null)";
1929}
1930
1932 OS << " " << (Node->getValue() ? "__objc_yes" : "__objc_no");
1933}
1934
1936 OS << " ";
1937 for (unsigned I = 0, E = Node->numOfIterators(); I < E; ++I) {
1939 OS << " = ";
1941 OS << " begin ";
1942 Visit(Range.Begin);
1943 OS << " end ";
1944 Visit(Range.End);
1945 if (Range.Step) {
1946 OS << " step ";
1947 Visit(Range.Step);
1948 }
1949 }
1950}
1951
1957
1961 OS << (Node->isSatisfied() ? " satisfied" : " unsatisfied");
1962}
1963
1965 if (T->isSpelledAsLValue())
1966 OS << " written as lvalue reference";
1967}
1968
1970 switch (T->getSizeModifier()) {
1972 break;
1974 OS << " static";
1975 break;
1977 OS << " *";
1978 break;
1979 }
1980 OS << " " << T->getIndexTypeQualifiers().getAsString();
1981}
1982
1984 OS << " " << T->getSize();
1986}
1987
1991
1996
2002
2004 switch (T->getVectorKind()) {
2006 break;
2008 OS << " altivec";
2009 break;
2011 OS << " altivec pixel";
2012 break;
2014 OS << " altivec bool";
2015 break;
2017 OS << " neon";
2018 break;
2020 OS << " neon poly";
2021 break;
2023 OS << " fixed-length sve data vector";
2024 break;
2026 OS << " fixed-length sve predicate vector";
2027 break;
2029 OS << " fixed-length rvv data vector";
2030 break;
2035 OS << " fixed-length rvv mask vector";
2036 break;
2037 }
2038 OS << " " << T->getNumElements();
2039}
2040
2042 auto EI = T->getExtInfo();
2043 if (EI.getNoReturn())
2044 OS << " noreturn";
2045 if (EI.getProducesResult())
2046 OS << " produces_result";
2047 if (EI.getHasRegParm())
2048 OS << " regparm " << EI.getRegParm();
2050}
2051
2053 auto EPI = T->getExtProtoInfo();
2054 if (EPI.HasTrailingReturn)
2055 OS << " trailing_return";
2056 if (T->isConst())
2057 OS << " const";
2058 if (T->isVolatile())
2059 OS << " volatile";
2060 if (T->isRestrict())
2061 OS << " restrict";
2062 if (T->getExtProtoInfo().Variadic)
2063 OS << " variadic";
2064 switch (EPI.RefQualifier) {
2066 break;
2068 OS << " &";
2069 break;
2071 OS << " &&";
2072 break;
2073 }
2074
2075 switch (EPI.ExceptionSpec.Type) {
2077 break;
2079 OS << " exceptionspec_dynamic_none";
2080 break;
2082 OS << " exceptionspec_dynamic";
2083 break;
2085 OS << " exceptionspec_ms_any";
2086 break;
2088 OS << " exceptionspec_nothrow";
2089 break;
2091 OS << " exceptionspec_basic_noexcept";
2092 break;
2094 OS << " exceptionspec_dependent_noexcept";
2095 break;
2097 OS << " exceptionspec_noexcept_false";
2098 break;
2100 OS << " exceptionspec_noexcept_true";
2101 break;
2103 OS << " exceptionspec_unevaluated";
2104 break;
2106 OS << " exceptionspec_uninstantiated";
2107 break;
2109 OS << " exceptionspec_unparsed";
2110 break;
2111 }
2112 if (!EPI.ExceptionSpec.Exceptions.empty()) {
2114 OS << "Exceptions:";
2115 for (unsigned I = 0, N = EPI.ExceptionSpec.Exceptions.size(); I != N;
2116 ++I) {
2117 if (I)
2118 OS << ",";
2119 dumpType(EPI.ExceptionSpec.Exceptions[I]);
2120 }
2121 });
2122 }
2123 if (EPI.ExceptionSpec.NoexceptExpr) {
2125 OS << "NoexceptExpr: ";
2126 Visit(EPI.ExceptionSpec.NoexceptExpr);
2127 });
2128 }
2129 dumpDeclRef(EPI.ExceptionSpec.SourceDecl, "ExceptionSourceDecl");
2130 dumpDeclRef(EPI.ExceptionSpec.SourceTemplate, "ExceptionSourceTemplate");
2131
2132
2134}
2135
2143
2152
2159 if (->typeMatchesDecl()) {
2160 OS << " divergent";
2162 }
2163}
2164
2166 switch (T->getUTTKind()) {
2167#define TRANSFORM_TYPE_TRAIT_DEF(Enum, Trait) \
2168 case UnaryTransformType::Enum: \
2169 OS << " " #Trait; \
2170 break;
2171#include "clang/Basic/TransformTypeTraits.def"
2172 }
2173}
2174
2176 if (T->isCanonicalUnqualified())
2177 OS << " canonical";
2178 if (T->isTagOwned())
2179 OS << " owns_tag";
2180 if (T->isInjected())
2181 OS << " injected";
2187}
2188
2190 OS << " depth " << T->getDepth() << " index " << T->getIndex();
2191 if (T->isParameterPack())
2192 OS << " pack";
2194}
2195
2197 const SubstTemplateTypeParmType *T) {
2200 if (auto PackIndex = T->getPackIndex())
2201 OS << " pack_index " << *PackIndex;
2202 if (T->getFinal())
2203 OS << " final";
2204}
2205
2207 const SubstTemplateTypeParmPackType *T) {
2210}
2211
2213 if (T->isDecltypeAuto())
2214 OS << " decltype(auto)";
2215 if (->isDeduced())
2216 OS << " undeduced";
2217 if (T->isConstrained())
2219}
2220
2222 const DeducedTemplateSpecializationType *T) {
2224}
2225
2227 const TemplateSpecializationType *T) {
2228 if (T->isTypeAlias())
2229 OS << " alias";
2234}
2235
2237 const InjectedClassNameType *T) {
2239}
2240
2244
2246 if (auto N = T->getNumExpansions())
2247 OS << " expansions " << *N;
2248}
2249
2254
2255
2256
2258
2263 OS << " __module_private__";
2264}
2265
2269 OS << " class";
2270 else
2271 OS << " struct";
2272 }
2275 OS << " __module_private__";
2278
2280 OS << " instantiated_from";
2282 }
2283}
2284
2289 OS << " __module_private__";
2291 OS << " definition";
2292}
2293
2298
2302
2303 for (const auto *Child : D->chain())
2305}
2306
2311
2316 OS << " inline";
2318 OS << " virtual";
2320 OS << " __module_private__";
2321
2323 OS << " pure";
2325 OS << " default";
2327 OS << "_delete";
2328 }
2330 OS << " delete";
2332 OS << " trivial";
2333
2336
2338 OS << (isa(D) ? " not_selected" : " ineligible");
2339
2343 default:
2344 break;
2347 break;
2350 break;
2351 }
2352 }
2353
2354 if (const auto *MD = dyn_cast(D)) {
2355 if (MD->size_overridden_methods() != 0) {
2356 auto dumpOverride = [=](const CXXMethodDecl *D) {
2360 };
2361
2363 auto Overrides = MD->overridden_methods();
2364 OS << "Overrides: [ ";
2365 dumpOverride(*Overrides.begin());
2366 for (const auto *Override : llvm::drop_begin(Overrides)) {
2367 OS << ", ";
2369 }
2370 OS << " ]";
2371 });
2372 }
2373 }
2374
2376 OS << " implicit-inline";
2377 }
2378
2379
2380
2381
2383 OS << " <<<NULL params x " << D->getNumParams() << ">>>";
2384
2386 OS << " instantiated_from";
2388 }
2389}
2390
2397 return;
2399 OS << " aggregate ";
2400 break;
2401 }
2402}
2403
2406 OS << " extended by ";
2408 OS << " mangling ";
2409 {
2412 }
2413}
2414
2419 OS << " mutable";
2421 OS << " __module_private__";
2422}
2423
2427 if (const auto *P = dyn_cast(D);
2428 P && P->isExplicitObjectParameter())
2429 OS << " this";
2430
2438 break;
2440 OS << " tls";
2441 break;
2443 OS << " tls_dynamic";
2444 break;
2445 }
2447 OS << " __module_private__";
2449 OS << " nrvo";
2451 OS << " inline";
2453 OS << " constexpr";
2457 OS << " cinit";
2458 break;
2460 OS << " callinit";
2461 break;
2463 OS << " listinit";
2464 break;
2466 OS << " parenlistinit";
2467 }
2468 }
2470 OS << " destroyed";
2472 OS << " pack";
2473
2475 OS << " instantiated_from";
2477 }
2478
2481
2487 }
2488 }
2489}
2490
2495
2498 OS << " nothrow";
2499}
2500
2503
2504 for (Decl *InitD :
2507}
2508
2510 OS << ' ';
2513 llvm_unreachable("unexpected pragma comment kind");
2515 OS << "compiler";
2516 break;
2518 OS << "exestr";
2519 break;
2521 OS << "lib";
2522 break;
2524 OS << "linker";
2525 break;
2527 OS << "user";
2528 break;
2529 }
2530 StringRef Arg = D->getArg();
2531 if (!Arg.empty())
2532 OS << " \"" << Arg << "\"";
2533}
2534
2537 OS << " \"" << D->getName() << "\" \"" << D->getValue() << "\"";
2538}
2539
2542 if (D->isStandaloneDirective())
2543 OS << " openmp_standalone_directive";
2544}
2545
2550 OS << " combiner";
2553 OS << " initializer";
2557 OS << " omp_priv = ";
2558 break;
2560 OS << " omp_priv ()";
2561 break;
2563 break;
2564 }
2565 }
2566}
2567
2571 if () {
2573 OS << "<<>> OMPClause";
2574 return;
2575 }
2576 {
2578 StringRef ClauseName(
2579 llvm::omp::getOpenMPClauseName(C->getClauseKind()));
2580 OS << "OMP" << ClauseName.substr(0, 1).upper()
2581 << ClauseName.drop_front() << "Clause";
2582 }
2585 });
2586 }
2587}
2588
2593
2597 OS << " inline";
2599 OS << " nested";
2602}
2603
2608
2613
2618
2623
2627 OS << " instantiated_from";
2629 }
2630 if (const auto *CTSD = dyn_cast(D)) {
2632 if (CTSD->hasStrictPackMatch())
2633 OS << " strict-pack-match";
2634 }
2635
2637
2639 return;
2640
2642 {
2644 OS << "DefinitionData";
2645 }
2646#define FLAG(fn, name) \
2647 if (D->fn()) \
2648 OS << " " #name;
2649 FLAG(isParsingBaseSpecifiers, parsing_base_specifiers);
2650
2651 FLAG(isGenericLambda, generic);
2652 FLAG(isLambda, lambda);
2653
2654 FLAG(isAnonymousStructOrUnion, is_anonymous);
2656 FLAG(isEmpty, empty);
2657 FLAG(isAggregate, aggregate);
2658 FLAG(isStandardLayout, standard_layout);
2659 FLAG(isTriviallyCopyable, trivially_copyable);
2660 FLAG(isPOD, pod);
2662 FLAG(isPolymorphic, polymorphic);
2663 FLAG(isAbstract, abstract);
2664 FLAG(isLiteral, literal);
2665
2666 FLAG(hasUserDeclaredConstructor, has_user_declared_ctor);
2667 FLAG(hasConstexprNonCopyMoveConstructor, has_constexpr_non_copy_move_ctor);
2668 FLAG(hasMutableFields, has_mutable_fields);
2669 FLAG(hasVariantMembers, has_variant_members);
2670 FLAG(allowConstDefaultInit, can_const_default_init);
2671
2673 {
2675 OS << "DefaultConstructor";
2676 }
2677 FLAG(hasDefaultConstructor, exists);
2678 FLAG(hasTrivialDefaultConstructor, trivial);
2679 FLAG(hasNonTrivialDefaultConstructor, non_trivial);
2680 FLAG(hasUserProvidedDefaultConstructor, user_provided);
2681 FLAG(hasConstexprDefaultConstructor, constexpr);
2682 FLAG(needsImplicitDefaultConstructor, needs_implicit);
2683 FLAG(defaultedDefaultConstructorIsConstexpr, defaulted_is_constexpr);
2684 });
2685
2687 {
2689 OS << "CopyConstructor";
2690 }
2691 FLAG(hasSimpleCopyConstructor, simple);
2692 FLAG(hasTrivialCopyConstructor, trivial);
2693 FLAG(hasNonTrivialCopyConstructor, non_trivial);
2694 FLAG(hasUserDeclaredCopyConstructor, user_declared);
2695 FLAG(hasCopyConstructorWithConstParam, has_const_param);
2696 FLAG(needsImplicitCopyConstructor, needs_implicit);
2697 FLAG(needsOverloadResolutionForCopyConstructor,
2698 needs_overload_resolution);
2700 FLAG(defaultedCopyConstructorIsDeleted, defaulted_is_deleted);
2701 FLAG(implicitCopyConstructorHasConstParam, implicit_has_const_param);
2702 });
2703
2705 {
2707 OS << "MoveConstructor";
2708 }
2709 FLAG(hasMoveConstructor, exists);
2710 FLAG(hasSimpleMoveConstructor, simple);
2711 FLAG(hasTrivialMoveConstructor, trivial);
2712 FLAG(hasNonTrivialMoveConstructor, non_trivial);
2713 FLAG(hasUserDeclaredMoveConstructor, user_declared);
2714 FLAG(needsImplicitMoveConstructor, needs_implicit);
2715 FLAG(needsOverloadResolutionForMoveConstructor,
2716 needs_overload_resolution);
2718 FLAG(defaultedMoveConstructorIsDeleted, defaulted_is_deleted);
2719 });
2720
2722 {
2724 OS << "CopyAssignment";
2725 }
2726 FLAG(hasSimpleCopyAssignment, simple);
2727 FLAG(hasTrivialCopyAssignment, trivial);
2728 FLAG(hasNonTrivialCopyAssignment, non_trivial);
2729 FLAG(hasCopyAssignmentWithConstParam, has_const_param);
2730 FLAG(hasUserDeclaredCopyAssignment, user_declared);
2731 FLAG(needsImplicitCopyAssignment, needs_implicit);
2732 FLAG(needsOverloadResolutionForCopyAssignment, needs_overload_resolution);
2733 FLAG(implicitCopyAssignmentHasConstParam, implicit_has_const_param);
2734 });
2735
2737 {
2739 OS << "MoveAssignment";
2740 }
2741 FLAG(hasMoveAssignment, exists);
2742 FLAG(hasSimpleMoveAssignment, simple);
2743 FLAG(hasTrivialMoveAssignment, trivial);
2744 FLAG(hasNonTrivialMoveAssignment, non_trivial);
2745 FLAG(hasUserDeclaredMoveAssignment, user_declared);
2746 FLAG(needsImplicitMoveAssignment, needs_implicit);
2747 FLAG(needsOverloadResolutionForMoveAssignment, needs_overload_resolution);
2748 });
2749
2751 {
2753 OS << "Destructor";
2754 }
2755 FLAG(hasSimpleDestructor, simple);
2756 FLAG(hasIrrelevantDestructor, irrelevant);
2757 FLAG(hasTrivialDestructor, trivial);
2758 FLAG(hasNonTrivialDestructor, non_trivial);
2759 FLAG(hasUserDeclaredDestructor, user_declared);
2760 FLAG(hasConstexprDestructor, constexpr);
2761 FLAG(needsImplicitDestructor, needs_implicit);
2762 FLAG(needsOverloadResolutionForDestructor, needs_overload_resolution);
2764 FLAG(defaultedDestructorIsDeleted, defaulted_is_deleted);
2765 });
2766 });
2767
2768 for (const auto &I : D->bases()) {
2770 if (I.isVirtual())
2771 OS << "virtual ";
2774 if (I.isPackExpansion())
2775 OS << "...";
2776 });
2777 }
2778}
2779
2783
2787
2791
2795
2798 OS << " ";
2800 if (TC->getNamedConcept() != TC->getFoundDecl()) {
2801 OS << " (";
2803 OS << ")";
2804 }
2806 OS << " typename";
2807 else
2808 OS << " class";
2809 OS << " depth " << D->getDepth() << " index " << D->getIndex();
2811 OS << " ...";
2813}
2814
2818 OS << " depth " << D->getDepth() << " index " << D->getIndex();
2820 OS << " ...";
2822}
2823
2826 OS << " depth " << D->getDepth() << " index " << D->getIndex();
2828 OS << " ...";
2830}
2831
2838
2843
2850
2858
2863
2867 OS << " virtual";
2868
2870 OS << "target ";
2872 });
2873
2875 OS << "nominated ";
2877 OS << ' ';
2879 });
2880
2882 OS << "constructed ";
2884 OS << ' ';
2886 });
2887}
2888
2892 OS << " C";
2893 break;
2895 OS << " C++";
2896 break;
2897 }
2898}
2899
2904
2911
2916 OS << " synthesize";
2917
2920 OS << " none";
2921 break;
2923 OS << " private";
2924 break;
2926 OS << " protected";
2927 break;
2929 OS << " public";
2930 break;
2932 OS << " package";
2933 break;
2934 }
2935}
2936
2939 OS << " -";
2940 else
2941 OS << " +";
2944
2946 OS << " variadic";
2947}
2948
2953 break;
2954
2956 OS << " covariant";
2957 break;
2958
2960 OS << " contravariant";
2961 break;
2962 }
2963
2965 OS << " bounded";
2967}
2968
2976
2982
2985
2986 for (const auto *Child : D->protocols())
2988}
2989
2993
2995 for (const auto *Child : D->protocols())
2997}
2998
3005
3011
3015
3017 OS << " required";
3019 OS << " optional";
3020
3024 OS << " readonly";
3026 OS << " assign";
3028 OS << " readwrite";
3030 OS << " retain";
3032 OS << " copy";
3034 OS << " nonatomic";
3036 OS << " atomic";
3038 OS << " weak";
3040 OS << " strong";
3042 OS << " unsafe_unretained";
3044 OS << " class";
3046 OS << " direct";
3051 }
3052}
3053
3057 OS << " synthesize";
3058 else
3059 OS << " dynamic";
3062}
3063
3066 OS << " variadic";
3067
3069 OS << " captures_this";
3070}
3071
3075
3081
3084 OS << " cbuffer";
3085 else
3086 OS << " tbuffer";
3088}
3089
3093 OS << " version: ";
3095 case llvm::dxbc::RootSignatureVersion::V1_0:
3096 OS << "1.0";
3097 break;
3098 case llvm::dxbc::RootSignatureVersion::V1_1:
3099 OS << "1.1";
3100 break;
3101 case llvm::dxbc::RootSignatureVersion::V1_2:
3102 OS << "1.2";
3103 break;
3104 }
3105 OS << ", ";
3106 llvm::hlsl::rootsig::dumpRootElements(OS, D->getRootElements());
3107}
3108
3110 OS << (E->isInOut() ? " inout" : " out");
3111}
3112
3118 OS << " ";
3119 else
3121}
3122
3127
3131
3136
3141
3146
3154 OS <<" readonly";
3155}
3170
3176
3179
3183 for (const Stmt *S : C->children())
3185 });
3186}
3189
3191
3193
3197 for (const Stmt *S : C->children())
3199 });
3200}
3201
3203 const OpenACCRoutineDeclAttr *A) {
3207 for (const Stmt *S : C->children())
3209 });
3210}
3211
3216
3220
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.
Definition TextNodeDumper.cpp:607
static void dumpBasePath(raw_ostream &OS, const CastExpr *Node)
Definition TextNodeDumper.cpp:1393
static void dumpPreviousDeclImpl(raw_ostream &OS,...)
Definition TextNodeDumper.cpp:34
static void dumpPreviousDecl(raw_ostream &OS, const Decl *D)
Dump the previous declaration in the redeclaration chain for a declaration, if any.
Definition TextNodeDumper.cpp:52
Defines enumerations for the type traits support.
C Language Family Type Representation.
OpenACCAtomicKind getAtomicKind() const
This class represents a 'loop' construct. The 'loop' construct applies to a 'for' loop (or range-for ...
bool isOrphanedLoopConstruct() const
OpenACC 3.3 2.9: An orphaned loop construct is a loop construct that is not lexically enclosed within...
OpenACCDirectiveKind getParentComputeConstructKind() const
llvm::APInt getValue() const
QualType getDynamicAllocType() const
APValue - This class implements a discriminated union of [uninitialized] [APSInt] [APFloat],...
@ Indeterminate
This object has an indeterminate value (C++ [basic.indet]).
@ None
There is no such object (it's outside its lifetime).
Holds long-lived AST nodes (such as types and decls) that can be referred to throughout the semantic ...
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.
LabelDecl * getLabel() const
An Embarcadero array type trait, as used in the implementation of __array_rank and __array_extent.
ArrayTypeTrait getTrait() const
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
A builtin binary operation expression such as "x + y" or "x <= y".
StringRef getOpcodeStr() const
bool hasStoredFPFeatures() const
FPOptionsOverride getStoredFPFeatures() const
Get FPFeatures from trailing storage.
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.
bool isElidable() const
Whether this construction is elidable.
bool isStdInitListInitialization() const
Whether this constructor call was written as list-initialization, but was interpreted as forming a st...
bool isImmediateEscalating() const
bool requiresZeroInitialization() const
Whether this construction first requires zero-initialization before the initializer is called.
CXXConstructorDecl * getConstructor() const
Get the constructor that this expression will (ultimately) call.
bool isListInitialization() const
Whether this constructor call was written as list-initialization.
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]).
bool hasRewrittenInit() const
A use of a default initializer in a constructor or in aggregate initialization.
bool hasRewrittenInit() const
Represents a delete expression for memory deallocation and destructor calls, e.g.
FunctionDecl * getOperatorDelete() const
bool isGlobalDelete() const
Represents a C++ member access expression where the actual member referenced could not be resolved be...
bool isArrow() const
Determine whether this member expression used the '->' operator; otherwise, it used the '.
DeclarationName getMember() const
Retrieve the name of the member that this expression refers to.
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.
const char * getCastName() const
getCastName - Get the name of the C++ cast being used, e.g., "static_cast", "dynamic_cast",...
Represents a new-expression for memory allocation and constructor calls, e.g: "new CXXNewExpr(foo)".
FunctionDecl * getOperatorNew() const
A call to an overloaded operator written using operator syntax.
OverloadedOperatorKind getOperator() const
Returns the kind of overloaded operator that this expression refers to.
Represents a C++ struct/union/class.
const CXXRecordDecl * getTemplateInstantiationPattern() const
Retrieve the record declaration from which this record could be instantiated.
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++.
bool isCapturedByCopyInLambdaWithExplicitObjectParameter() const
Describes an explicit type conversion that uses functional notion but could not be resolved because o...
bool isListInitialization() const
Determine whether this expression models list-initialization.
QualType getTypeAsWritten() const
Retrieve the type that is being constructed, as specified in the source code.
CallExpr - Represents a function call (C99 6.5.2.2, C++ [expr.call]).
bool hasStoredFPFeatures() const
FPOptionsOverride getFPFeatures() const
Represents the body of a CapturedStmt, and serves as its DeclContext.
CaseStmt - Represent a case statement.
bool caseStmtIsGNURange() const
True if this case statement is of the form case LHS ... RHS, which is a GNU extension.
CastExpr - Base class for type casts, including both implicit casts (ImplicitCastExpr) and explicit c...
path_iterator path_begin()
bool hasStoredFPFeatures() const
static const char * getCastKindName(CastKind CK)
const CXXBaseSpecifier *const * path_const_iterator
FPOptionsOverride getFPFeatures() const
unsigned getValue() const
Declaration of a class template.
Represents a 'co_await' expression.
CompoundAssignOperator - For compound assignments (e.g.
QualType getComputationLHSType() const
QualType getComputationResultType() const
CompoundStmt - This represents a group of statements like { stmt stmt }.
FPOptionsOverride getStoredFPFeatures() const
Get FPOptionsOverride from trailing storage.
bool hasStoredFPFeatures() const
Declaration of a C++20 concept.
A reference to a concept and its template args, as it appears in the code.
SourceRange getSourceRange() const LLVM_READONLY
TemplateDecl * getNamedConcept() const
Represents the specialization of a concept - evaluates to a prvalue of type bool.
NamedDecl * getFoundDecl() const
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...
APValue getAPValueResult() const
bool hasAPValueResult() const
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.
ConvertVectorExpr - Clang builtin function __builtin_convertvector This AST node provides support for...
FPOptionsOverride getStoredFPFeatures() const
Get FPFeatures from trailing storage.
bool hasStoredFPFeatures() const
Is FPFeatures in Trailing Storage?
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.
NamedDecl * getFoundDecl()
Get the NamedDecl through which this reference occurred.
NestedNameSpecifier getQualifier() const
If the name was qualified, retrieves the nested-name-specifier that precedes the name.
bool refersToEnclosingVariableOrCapture() const
Does this DeclRefExpr refer to an enclosing local or a captured variable?
bool isCapturedByCopyInLambdaWithExplicitObjectParameter() const
NonOdrUseReason isNonOdrUse() const
Is this expression a non-odr-use reference, and if so, why?
bool isImmediateEscalating() const
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.
The name of a declaration.
NestedNameSpecifier getQualifier() const
Retrieve the nested-name-specifier that qualifies the name of this declaration, if it was present in ...
TemplateName getUnderlying() const
DefaultArguments getDefaultArguments() const
A qualified reference to a name whose declaration cannot yet be resolved.
NestedNameSpecifier getQualifier() const
Retrieve the nested-name-specifier that qualifies this declaration.
Represents an array type in C++ whose size is a value-dependent expression.
Represents an extended vector type where either the type or size is dependent.
NestedNameSpecifier getQualifier() const
Return the nested name specifier that qualifies this name.
Symbolic representation of a dynamic allocation.
Represents a reference to emded data.
unsigned getStartingElementPos() const
size_t getDataElementCount() const
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.
EnumDecl * getTemplateInstantiationPattern() const
Retrieve the enum definition from which this enumeration could be instantiated, if it is an instantia...
QualType getTypeAsWritten() const
getTypeAsWritten - Returns the type that this expression is casting to, as written in the source code...
Represents an expression – generally a full-expression – that introduces cleanups to be run at the en...
CleanupObject getObject(unsigned i) const
unsigned getNumObjects() const
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.
ExpressionTrait getTrait() const
ExtVectorElementExpr - This represents access to specific elements of a vector, and may occur on the ...
IdentifierInfo & getAccessor() const
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).
std::string getValueAsString(unsigned Radix) const
double getValueAsApproximateDouble() const
getValueAsApproximateDouble - This returns the value as an inaccurate double.
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...
bool isPackExpansion() const
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...
FunctionDecl * getTemplateInstantiationPattern(bool ForDefinition=true) const
Retrieve the function declaration from which this function could be instantiated, if it is an instant...
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.
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.
Declaration of a template function.
FunctionType - C99 6.7.5.3 - Function Declarators.
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.
LabelDecl * getLabel() const
HLSLBufferDecl - Represent a cbuffer or tbuffer declaration.
This class represents temporary values used to represent inout and out arguments in HLSL.
bool isInOut() const
returns true if the parameter is inout and false if the parameter is out.
ArrayRef< llvm::hlsl::rootsig::RootElement > getRootElements() const
llvm::dxbc::RootSignatureVersion getVersion() const
const char * getNameStart() const
Return the beginning of the actual null-terminated string for this identifier.
StringRef getName() const
Return the actual identifier string.
IfStmt - This represents an if/then/else.
bool hasElseStorage() const
True if this IfStmt has storage for an else statement.
bool hasVarStorage() const
True if this IfStmt has storage for a variable declaration.
bool hasInitStorage() const
True if this IfStmt has the storage for an init statement.
bool isNegatedConsteval() const
ImplicitCastExpr - Allows us to explicitly represent implicit type conversions, which have no direct ...
bool isPartOfExplicitCast() const
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.
Represents the declaration of a label.
LabelStmt - Represents a label, which has a substatement.
const char * getName() const
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.
Base class for BreakStmt and ContinueStmt.
LabelDecl * getLabelDecl()
const Stmt * getNamedLoopOrSwitch() const
If this is a named break/continue, get the loop or switch statement that this targets.
bool hasLabelTarget() const
Represents a prvalue temporary that is written into memory so that a reference can bind to it.
ValueDecl * getExtendingDecl()
Get the declaration which triggered the lifetime-extension of this temporary, if any.
MemberExpr - [C99 6.5.2.3] Structure and Union Members.
NestedNameSpecifier getQualifier() const
If the member name was qualified, retrieves the nested-name-specifier that precedes the member name.
ValueDecl * getMemberDecl() const
Retrieve the member declaration to which this expression refers.
NonOdrUseReason isNonOdrUse() const
Is this expression a non-odr-use reference, and if so, why?
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.
IdentifierInfo * getIdentifier() const
Get the identifier that names this declaration, if there is one.
StringRef getName() const
Get the name of identifier for this declaration as a StringRef.
DeclarationName getDeclName() const
Get the actual, stored name of the declaration, which may be a special name.
Represents a C++ namespace alias.
NamespaceBaseDecl * getAliasedNamespace() const
Retrieve the namespace that this alias refers to, which may either be a NamespaceDecl or a NamespaceA...
Represent a C++ namespace.
bool isFirstDecl() const
True if this is the first declaration in its redeclaration chain.
bool isInline() const
Returns true if this is an inline namespace declaration.
bool isNested() const
Returns true if this is a nested namespace declaration.
Represents a C++ nested name specifier, such as "\::std::vector::".
NamespaceAndPrefix getAsNamespaceAndPrefix() const
void print(raw_ostream &OS, const PrintingPolicy &Policy, bool ResolveTemplateArguments=false, bool PrintFinalScopeResOp=true) const
Print this nested name specifier to the given output stream.
const Type * getAsType() const
@ MicrosoftSuper
Microsoft's '__super' specifier, stored as a CXXRecordDecl* of the class it appeared in.
@ Global
The global specifier '::'. There is no stored value.
@ Type
A type, stored as a Type*.
@ Namespace
A namespace-like entity, stored as a NamespaceBaseDecl*.
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.
OpenMP 5.0 [2.1.6 Iterators] Iterators are identifiers that expand to multiple values in the clause o...
IteratorRange getIteratorRange(unsigned I)
Gets the iterator range for the given iterator.
unsigned numOfIterators() const
Returns number of iterator definitions.
Decl * getIteratorDecl(unsigned I)
Gets the iterator declaration for the given iterator.
This represents 'pragma omp requires...' directive.
clauselist_range clauselists()
Represents Objective-C's @catch statement.
const VarDecl * getCatchParamDecl() const
ObjCBoolLiteralExpr - Objective-C Boolean Literal.
ObjCBoxedExpr - used for generalized expression boxing.
ObjCMethodDecl * getBoxingMethod() const
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.
QualType getEncodedType() const
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
Represents typeof(type), a C23 feature and GCC extension, or `typeof_unqual(type),...
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.
Selector getSelector() const
@ 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.
QualType getClassReceiver() const
Returns the type of a class message send, or NULL if the message is not a class message.
ReceiverKind getReceiverKind() const
Determine the kind of receiver that this message is being sent to.
ObjCMethodDecl - Represents an instance or class method declaration.
Selector getSelector() const
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.
bool isMessagingGetter() const
True if the property reference will result in a message to the getter.
ObjCPropertyDecl * getExplicitProperty() const
bool isMessagingSetter() const
True if the property reference will result in a message to the setter.
ObjCMethodDecl * getImplicitPropertyGetter() const
bool isImplicitProperty() const
ObjCMethodDecl * getImplicitPropertySetter() const
bool isSuperReceiver() const
Represents an Objective-C protocol declaration.
protocol_range protocols() const
ObjCProtocolExpr used for protocol expression in Objective-C.
ObjCProtocolDecl * getProtocol() const
ObjCSelectorExpr used for @selector in Objective-C.
Selector getSelector() const
ObjCSubscriptRefExpr - used for array and dictionary subscripting.
bool isArraySubscriptRefExpr() const
ObjCMethodDecl * getAtIndexMethodDecl() const
ObjCMethodDecl * setAtIndexMethodDecl() const
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 expression type represents an asterisk in an OpenACC Size-Expr, used in the 'tile' and 'gang' cl...
This is the base type for all OpenACC Clauses.
OpenACCDirectiveKind getDirectiveKind() const
ArrayRef< const OpenACCClause * > clauses() const
This is the base class for an OpenACC statement-level construct, other construct types are expected t...
OpenACCDirectiveKind getDirectiveKind() const
SourceLocation getRParenLoc() const
const Expr * getFunctionReference() const
SourceLocation getLParenLoc() const
UnresolvedSetImpl::iterator decls_iterator
decls_iterator decls_begin() const
decls_iterator decls_end() const
DeclarationName getName() const
Gets the name looked up.
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
PredefinedIdentKind getIdentKind() 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
static std::string getAsString(SplitQualType split, const PrintingPolicy &Policy)
Represents a template name as written in source code.
NestedNameSpecifier getQualifier() const
Return the nested name specifier that qualifies this name.
TemplateName getUnderlyingTemplate() const
Return the underlying template name.
bool hasTemplateKeyword() const
Whether the template name was prefixed by the "template" keyword.
Represents a struct/union/class.
Provides common interface for the Decls that can be redeclared.
decl_type * getFirstDecl()
Return the first declaration of this declaration or itself if this is the only declaration.
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...
bool isSatisfied() const
Whether or not the requires clause is satisfied.
ReturnStmt - This represents a return, optionally of an expression: return; return 4;.
const VarDecl * getNRVOCandidate() const
Retrieve the variable that might be used for the named return value optimization.
TypeSourceInfo * getTypeSourceInfo()
void print(llvm::raw_ostream &OS) const
Prints the full selector name (e.g. "foo:bar:").
Represents an expression that computes the length of a parameter pack.
NamedDecl * getPack() const
Retrieve the parameter pack.
Encodes a location in the source.
A trivial tuple used to represent a source range.
SourceLocation getEnd() const
SourceLocation getBegin() const
void Visit(PTR(Stmt) S, ParamTys... P)
Stmt - This represents one statement.
SourceRange getSourceRange() const LLVM_READONLY
SourceLocation tokens are not useful in isolation - they are low level value objects created/interpre...
const char * getStmtClassName() const
StringLiteral - This represents a string literal expression, e.g.
void outputString(raw_ostream &OS) const
A structure for storing the information associated with a substituted template template parameter.
TemplateName getReplacement() const
TemplateTemplateParmDecl * getParameter() const
UnsignedOrNone getPackIndex() const
unsigned getIndex() const
Returns the index of the replaced parameter in the associated declaration.
Decl * getAssociatedDecl() const
A template-like entity which owns the whole pattern being substituted.
SwitchStmt - This represents a 'switch' stmt.
bool hasVarStorage() const
True if this SwitchStmt has storage for a condition variable.
bool hasInitStorage() const
True if this SwitchStmt has storage for an init statement.
StringRef getKindName() const
bool isCompleteDefinition() const
Return true if this decl has its body fully specified.
NestedNameSpecifier getQualifier() const
Retrieve the nested-name-specifier that qualifies the name of this declaration, if it was present in ...
Represents a template argument.
TemplateName getAsTemplate() const
Retrieve the template name for a template name argument.
bool structurallyEquals(const TemplateArgument &Other) const
Determines whether two template arguments are superficially the same.
void print(const PrintingPolicy &Policy, raw_ostream &Out, bool IncludeType) const
Print this template argument to the given output stream.
ValueDecl * getAsDecl() const
Retrieve the declaration for a declaration non-type template argument.
bool isCanonicalExpr() const
TemplateName getAsTemplateOrTemplatePattern() const
Retrieve the template argument as a template name; if the argument is a pack expansion,...
Represents a C++ template name within the type system.
TemplateDecl * getAsTemplateDecl(bool IgnoreDeduced=false) const
Retrieve the underlying template declaration that this template name refers to, if known.
DeducedTemplateStorage * getAsDeducedTemplateName() const
Retrieve the deduced template info, if any.
DependentTemplateName * getAsDependentTemplateName() const
Retrieve the underlying dependent template name structure, if any.
QualifiedTemplateName * getAsQualifiedTemplateName() const
Retrieve the underlying qualified template name structure, if any.
void print(raw_ostream &OS, const PrintingPolicy &Policy, Qualified Qual=Qualified::AsWritten) const
Print the template name.
@ UsingTemplate
A template name that refers to a template declaration found through a specific using shadow declarati...
@ OverloadedTemplate
A set of overloaded template declarations.
@ Template
A single template declaration.
@ DependentTemplate
A dependent template name that has not been resolved to a template (or set of templates).
@ SubstTemplateTemplateParm
A template template parameter that has been substituted for some other template name.
@ SubstTemplateTemplateParmPack
A template template parameter pack that has been substituted for a template template argument pack,...
@ DeducedTemplate
A template name that refers to another TemplateName with deduced default arguments.
@ QualifiedTemplate
A qualified template name, where the qualification is kept to describe the source code as written.
@ AssumedTemplate
An unqualified-id that has been assumed to name a function template that will be found by ADL.
UsingShadowDecl * getAsUsingShadowDecl() const
Retrieve the using shadow declaration through which the underlying template declaration is introduced...
SubstTemplateTemplateParmStorage * getAsSubstTemplateTemplateParm() const
Retrieve the substituted template template parameter, if known.
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)
Definition TextNodeDumper.cpp:1720
void VisitEnumDecl(const EnumDecl *D)
Definition TextNodeDumper.cpp:2266
void VisitExprWithCleanups(const ExprWithCleanups *Node)
Definition TextNodeDumper.cpp:1817
void visitInlineCommandComment(const comments::InlineCommandComment *C, const comments::FullComment *)
Definition TextNodeDumper.cpp:1130
void VisitCXXStaticCastExpr(const CXXStaticCastExpr *Node)
Definition TextNodeDumper.cpp:1728
void visitVerbatimBlockComment(const comments::VerbatimBlockComment *C, const comments::FullComment *)
Definition TextNodeDumper.cpp:1222
void dumpPointer(const void *Ptr)
Definition TextNodeDumper.cpp:862
void VisitDeclarationTemplateArgument(const TemplateArgument &TA)
Definition TextNodeDumper.cpp:1250
void VisitOpenACCLoopConstruct(const OpenACCLoopConstruct *S)
Definition TextNodeDumper.cpp:3116
void VisitLinkageSpecDecl(const LinkageSpecDecl *D)
Definition TextNodeDumper.cpp:2889
void VisitVectorType(const VectorType *T)
Definition TextNodeDumper.cpp:2003
void VisitLoopControlStmt(const LoopControlStmt *L)
Definition TextNodeDumper.cpp:1418
void VisitHLSLRootSignatureDecl(const HLSLRootSignatureDecl *D)
Definition TextNodeDumper.cpp:3090
void VisitCoawaitExpr(const CoawaitExpr *Node)
Definition TextNodeDumper.cpp:1491
void VisitUnaryOperator(const UnaryOperator *Node)
Definition TextNodeDumper.cpp:1644
void dumpAccessSpecifier(AccessSpecifier AS)
Definition TextNodeDumper.cpp:999
void VisitHLSLOutArgExpr(const HLSLOutArgExpr *E)
Definition TextNodeDumper.cpp:3109
void VisitDeducedTemplateSpecializationType(const DeducedTemplateSpecializationType *T)
Definition TextNodeDumper.cpp:2221
void VisitObjCSelectorExpr(const ObjCSelectorExpr *Node)
Definition TextNodeDumper.cpp:1870
void VisitCXXOperatorCallExpr(const CXXOperatorCallExpr *Node)
Definition TextNodeDumper.cpp:1514
void VisitCXXUnresolvedConstructExpr(const CXXUnresolvedConstructExpr *Node)
Definition TextNodeDumper.cpp:1734
void VisitPragmaCommentDecl(const PragmaCommentDecl *D)
Definition TextNodeDumper.cpp:2509
void VisitOpenACCRoutineDecl(const OpenACCRoutineDecl *D)
Definition TextNodeDumper.cpp:3187
void VisitDependentScopeDeclRefExpr(const DependentScopeDeclRefExpr *Node)
Definition TextNodeDumper.cpp:1564
void VisitImportDecl(const ImportDecl *D)
Definition TextNodeDumper.cpp:2501
void VisitUsingEnumDecl(const UsingEnumDecl *D)
Definition TextNodeDumper.cpp:2839
void VisitOMPCapturedExprDecl(const OMPCapturedExprDecl *D)
Definition TextNodeDumper.cpp:2589
void VisitUnresolvedUsingType(const UnresolvedUsingType *T)
Definition TextNodeDumper.cpp:2136
void VisitObjCProtocolExpr(const ObjCProtocolExpr *Node)
Definition TextNodeDumper.cpp:1875
void VisitIntegralTemplateArgument(const TemplateArgument &TA)
Definition TextNodeDumper.cpp:1262
void VisitObjCCategoryDecl(const ObjCCategoryDecl *D)
Definition TextNodeDumper.cpp:2969
void VisitIndirectFieldDecl(const IndirectFieldDecl *D)
Definition TextNodeDumper.cpp:2299
void VisitNullTemplateArgument(const TemplateArgument &TA)
Definition TextNodeDumper.cpp:1241
void VisitPackTemplateArgument(const TemplateArgument &TA)
Definition TextNodeDumper.cpp:1388
void VisitUsingType(const UsingType *T)
Definition TextNodeDumper.cpp:2144
void VisitInjectedClassNameType(const InjectedClassNameType *T)
Definition TextNodeDumper.cpp:2236
void VisitBinaryOperator(const BinaryOperator *Node)
Definition TextNodeDumper.cpp:1678
void VisitUnresolvedLookupExpr(const UnresolvedLookupExpr *Node)
Definition TextNodeDumper.cpp:1570
void VisitObjCInterfaceDecl(const ObjCInterfaceDecl *D)
Definition TextNodeDumper.cpp:2990
void VisitBlockDecl(const BlockDecl *D)
Definition TextNodeDumper.cpp:3064
void VisitCXXDeleteExpr(const CXXDeleteExpr *Node)
Definition TextNodeDumper.cpp:1776
void VisitObjCBoxedExpr(const ObjCBoxedExpr *Node)
Definition TextNodeDumper.cpp:1854
void VisitNullPtrTemplateArgument(const TemplateArgument &TA)
Definition TextNodeDumper.cpp:1257
void VisitVarTemplateDecl(const VarTemplateDecl *D)
Definition TextNodeDumper.cpp:2788
void VisitSubstTemplateTypeParmPackType(const SubstTemplateTypeParmPackType *T)
Definition TextNodeDumper.cpp:2206
void VisitConceptSpecializationExpr(const ConceptSpecializationExpr *Node)
Definition TextNodeDumper.cpp:1952
void VisitCXXDeductionGuideDecl(const CXXDeductionGuideDecl *D)
Definition TextNodeDumper.cpp:2391
TextNodeDumper(raw_ostream &OS, const ASTContext &Context, bool ShowColors)
Definition TextNodeDumper.cpp:63
void VisitPredefinedExpr(const PredefinedExpr *Node)
Definition TextNodeDumper.cpp:1601
void dumpType(QualType T)
Definition TextNodeDumper.cpp:931
void VisitObjCEncodeExpr(const ObjCEncodeExpr *Node)
Definition TextNodeDumper.cpp:1866
void dumpNestedNameSpecifier(NestedNameSpecifier NNS)
Definition TextNodeDumper.cpp:1043
void VisitStructuralValueTemplateArgument(const TemplateArgument &TA)
Definition TextNodeDumper.cpp:1267
void VisitHLSLBufferDecl(const HLSLBufferDecl *D)
Definition TextNodeDumper.cpp:3082
void VisitUnresolvedUsingValueDecl(const UnresolvedUsingValueDecl *D)
Definition TextNodeDumper.cpp:2851
void VisitNamespaceAliasDecl(const NamespaceAliasDecl *D)
Definition TextNodeDumper.cpp:2609
void VisitObjCMessageExpr(const ObjCMessageExpr *Node)
Definition TextNodeDumper.cpp:1832
void dumpSourceRange(SourceRange R)
Definition TextNodeDumper.cpp:896
void VisitMemberExpr(const MemberExpr *Node)
Definition TextNodeDumper.cpp:1661
void VisitOpenACCDataConstruct(const OpenACCDataConstruct *S)
Definition TextNodeDumper.cpp:3128
void dumpBareTemplateName(TemplateName TN)
Definition TextNodeDumper.cpp:1300
void VisitOpenACCConstructStmt(const OpenACCConstructStmt *S)
Definition TextNodeDumper.cpp:3113
void VisitCompoundStmt(const CompoundStmt *Node)
Definition TextNodeDumper.cpp:3076
void VisitConstantExpr(const ConstantExpr *Node)
Definition TextNodeDumper.cpp:1501
void VisitObjCIvarRefExpr(const ObjCIvarRefExpr *Node)
Definition TextNodeDumper.cpp:1585
void VisitOpenACCDeclareDecl(const OpenACCDeclareDecl *D)
Definition TextNodeDumper.cpp:3177
void VisitOpenACCAsteriskSizeExpr(const OpenACCAsteriskSizeExpr *S)
Definition TextNodeDumper.cpp:385
void VisitMaterializeTemporaryExpr(const MaterializeTemporaryExpr *Node)
Definition TextNodeDumper.cpp:1809
void VisitConstructorUsingShadowDecl(const ConstructorUsingShadowDecl *D)
Definition TextNodeDumper.cpp:2864
void VisitWhileStmt(const WhileStmt *Node)
Definition TextNodeDumper.cpp:1462
void VisitCharacterLiteral(const CharacterLiteral *Node)
Definition TextNodeDumper.cpp:1605
void VisitAccessSpecDecl(const AccessSpecDecl *D)
Definition TextNodeDumper.cpp:2900
void VisitFunctionType(const FunctionType *T)
Definition TextNodeDumper.cpp:2041
void VisitObjCImplementationDecl(const ObjCImplementationDecl *D)
Definition TextNodeDumper.cpp:2999
void VisitReturnStmt(const ReturnStmt *Node)
Definition TextNodeDumper.cpp:1483
void VisitTypeLoc(TypeLoc TL)
Definition TextNodeDumper.cpp:2250
void VisitAutoType(const AutoType *T)
Definition TextNodeDumper.cpp:2212
void VisitObjCInterfaceType(const ObjCInterfaceType *T)
Definition TextNodeDumper.cpp:2241
void visitVerbatimLineComment(const comments::VerbatimLineComment *C, const comments::FullComment *)
Definition TextNodeDumper.cpp:1236
void VisitTypedefDecl(const TypedefDecl *D)
Definition TextNodeDumper.cpp:2259
void VisitUnaryExprOrTypeTraitExpr(const UnaryExprOrTypeTraitExpr *Node)
Definition TextNodeDumper.cpp:1653
void visitParamCommandComment(const comments::ParamCommandComment *C, const comments::FullComment *FC)
Definition TextNodeDumper.cpp:1181
void VisitIntegerLiteral(const IntegerLiteral *Node)
Definition TextNodeDumper.cpp:1610
void VisitObjCProtocolDecl(const ObjCProtocolDecl *D)
Definition TextNodeDumper.cpp:2983
void VisitGotoStmt(const GotoStmt *Node)
Definition TextNodeDumper.cpp:1473
void VisitDependentSizedExtVectorType(const DependentSizedExtVectorType *T)
Definition TextNodeDumper.cpp:1997
void VisitFriendDecl(const FriendDecl *D)
Definition TextNodeDumper.cpp:2905
void VisitSwitchStmt(const SwitchStmt *Node)
Definition TextNodeDumper.cpp:1455
void VisitCXXBindTemporaryExpr(const CXXBindTemporaryExpr *Node)
Definition TextNodeDumper.cpp:1756
void VisitEmbedExpr(const EmbedExpr *S)
Definition TextNodeDumper.cpp:3212
void VisitFunctionTemplateDecl(const FunctionTemplateDecl *D)
Definition TextNodeDumper.cpp:2780
void VisitTemplateTemplateParmDecl(const TemplateTemplateParmDecl *D)
Definition TextNodeDumper.cpp:2824
void VisitUsingDecl(const UsingDecl *D)
Definition TextNodeDumper.cpp:2832
void VisitConstantArrayType(const ConstantArrayType *T)
Definition TextNodeDumper.cpp:1983
void VisitTypeTemplateArgument(const TemplateArgument &TA)
Definition TextNodeDumper.cpp:1245
void VisitObjCPropertyDecl(const ObjCPropertyDecl *D)
Definition TextNodeDumper.cpp:3012
void VisitObjCCategoryImplDecl(const ObjCCategoryImplDecl *D)
Definition TextNodeDumper.cpp:2977
void VisitObjCSubscriptRefExpr(const ObjCSubscriptRefExpr *Node)
Definition TextNodeDumper.cpp:1910
void VisitArrayType(const ArrayType *T)
Definition TextNodeDumper.cpp:1969
void visitHTMLEndTagComment(const comments::HTMLEndTagComment *C, const comments::FullComment *)
Definition TextNodeDumper.cpp:1169
void VisitObjCAtCatchStmt(const ObjCAtCatchStmt *Node)
Definition TextNodeDumper.cpp:1861
void visitTextComment(const comments::TextComment *C, const comments::FullComment *)
Definition TextNodeDumper.cpp:1125
void VisitLifetimeExtendedTemporaryDecl(const LifetimeExtendedTemporaryDecl *D)
Definition TextNodeDumper.cpp:2404
void VisitCXXRecordDecl(const CXXRecordDecl *D)
Definition TextNodeDumper.cpp:2624
void VisitTemplateTemplateArgument(const TemplateArgument &TA)
Definition TextNodeDumper.cpp:1367
void dumpCleanupObject(const ExprWithCleanups::CleanupObject &C)
Definition TextNodeDumper.cpp:1006
void VisitOpenACCExitDataConstruct(const OpenACCExitDataConstruct *S)
Definition TextNodeDumper.cpp:3137
void VisitCaseStmt(const CaseStmt *Node)
Definition TextNodeDumper.cpp:1478
void VisitRValueReferenceType(const ReferenceType *T)
Definition TextNodeDumper.cpp:1964
void VisitPackExpansionType(const PackExpansionType *T)
Definition TextNodeDumper.cpp:2245
void VisitConceptDecl(const ConceptDecl *D)
Definition TextNodeDumper.cpp:3072
void VisitOpenACCEnterDataConstruct(const OpenACCEnterDataConstruct *S)
Definition TextNodeDumper.cpp:3132
void VisitCallExpr(const CallExpr *Node)
Definition TextNodeDumper.cpp:1507
void VisitCapturedDecl(const CapturedDecl *D)
Definition TextNodeDumper.cpp:2496
void VisitOpenACCWaitConstruct(const OpenACCWaitConstruct *S)
Definition TextNodeDumper.cpp:3147
void VisitBuiltinTemplateDecl(const BuiltinTemplateDecl *D)
Definition TextNodeDumper.cpp:2792
void VisitObjCPropertyRefExpr(const ObjCPropertyRefExpr *Node)
Definition TextNodeDumper.cpp:1879
void VisitOMPDeclareReductionDecl(const OMPDeclareReductionDecl *D)
Definition TextNodeDumper.cpp:2546
void VisitCoreturnStmt(const CoreturnStmt *Node)
Definition TextNodeDumper.cpp:1496
void VisitSizeOfPackExpr(const SizeOfPackExpr *Node)
Definition TextNodeDumper.cpp:1822
void VisitDeclRefExpr(const DeclRefExpr *Node)
Definition TextNodeDumper.cpp:1540
void VisitLabelStmt(const LabelStmt *Node)
Definition TextNodeDumper.cpp:1467
void VisitOpenACCUpdateConstruct(const OpenACCUpdateConstruct *S)
Definition TextNodeDumper.cpp:3166
void Visit(const comments::Comment *C, const comments::FullComment *FC)
Definition TextNodeDumper.cpp:73
void VisitLabelDecl(const LabelDecl *D)
Definition TextNodeDumper.cpp:2257
void VisitUnaryTransformType(const UnaryTransformType *T)
Definition TextNodeDumper.cpp:2165
void VisitStringLiteral(const StringLiteral *Str)
Definition TextNodeDumper.cpp:1626
void VisitOMPRequiresDecl(const OMPRequiresDecl *D)
Definition TextNodeDumper.cpp:2568
void dumpBareType(QualType T, bool Desugar=true)
Definition TextNodeDumper.cpp:912
void VisitTemplateSpecializationType(const TemplateSpecializationType *T)
Definition TextNodeDumper.cpp:2226
void VisitOpenACCInitConstruct(const OpenACCInitConstruct *S)
Definition TextNodeDumper.cpp:3156
void VisitTemplateTypeParmDecl(const TemplateTypeParmDecl *D)
Definition TextNodeDumper.cpp:2796
void VisitCompoundAssignOperator(const CompoundAssignOperator *Node)
Definition TextNodeDumper.cpp:1684
void VisitCXXThisExpr(const CXXThisExpr *Node)
Definition TextNodeDumper.cpp:1712
void VisitOpenACCRoutineDeclAttr(const OpenACCRoutineDeclAttr *A)
Definition TextNodeDumper.cpp:3202
void dumpName(const NamedDecl *ND)
Definition TextNodeDumper.cpp:992
void dumpTemplateName(TemplateName TN, StringRef Label={})
Definition TextNodeDumper.cpp:1273
void VisitArrayTypeTraitExpr(const ArrayTypeTraitExpr *Node)
Definition TextNodeDumper.cpp:1791
void VisitObjCIvarDecl(const ObjCIvarDecl *D)
Definition TextNodeDumper.cpp:2912
void VisitFieldDecl(const FieldDecl *D)
Definition TextNodeDumper.cpp:2415
void dumpDeclRef(const Decl *D, StringRef Label={})
Definition TextNodeDumper.cpp:1074
void VisitRecordDecl(const RecordDecl *D)
Definition TextNodeDumper.cpp:2285
void VisitCXXNewExpr(const CXXNewExpr *Node)
Definition TextNodeDumper.cpp:1763
void VisitObjCBoolLiteralExpr(const ObjCBoolLiteralExpr *Node)
Definition TextNodeDumper.cpp:1931
void VisitCastExpr(const CastExpr *Node)
Definition TextNodeDumper.cpp:1522
void VisitObjCTypeParamDecl(const ObjCTypeParamDecl *D)
Definition TextNodeDumper.cpp:2949
void VisitSubstTemplateTypeParmType(const SubstTemplateTypeParmType *T)
Definition TextNodeDumper.cpp:2196
void VisitExpressionTraitExpr(const ExpressionTraitExpr *Node)
Definition TextNodeDumper.cpp:1795
void VisitAddrLabelExpr(const AddrLabelExpr *Node)
Definition TextNodeDumper.cpp:1695
void VisitUnresolvedUsingTypenameDecl(const UnresolvedUsingTypenameDecl *D)
Definition TextNodeDumper.cpp:2844
void VisitCXXDependentScopeMemberExpr(const CXXDependentScopeMemberExpr *Node)
Definition TextNodeDumper.cpp:1827
void VisitOpenACCAtomicConstruct(const OpenACCAtomicConstruct *S)
Definition TextNodeDumper.cpp:3171
void visitBlockCommandComment(const comments::BlockCommandComment *C, const comments::FullComment *)
Definition TextNodeDumper.cpp:1174
void VisitExpressionTemplateArgument(const TemplateArgument &TA)
Definition TextNodeDumper.cpp:1380
void VisitTypeAliasDecl(const TypeAliasDecl *D)
Definition TextNodeDumper.cpp:2614
void VisitVarDecl(const VarDecl *D)
Definition TextNodeDumper.cpp:2424
void VisitOpenACCCacheConstruct(const OpenACCCacheConstruct *S)
Definition TextNodeDumper.cpp:3150
void VisitFixedPointLiteral(const FixedPointLiteral *Node)
Definition TextNodeDumper.cpp:1616
void VisitOMPIteratorExpr(const OMPIteratorExpr *Node)
Definition TextNodeDumper.cpp:1935
void VisitUsingDirectiveDecl(const UsingDirectiveDecl *D)
Definition TextNodeDumper.cpp:2604
void VisitObjCMethodDecl(const ObjCMethodDecl *D)
Definition TextNodeDumper.cpp:2937
void VisitObjCPropertyImplDecl(const ObjCPropertyImplDecl *D)
Definition TextNodeDumper.cpp:3054
void VisitUsingShadowDecl(const UsingShadowDecl *D)
Definition TextNodeDumper.cpp:2859
void VisitNamespaceDecl(const NamespaceDecl *D)
Definition TextNodeDumper.cpp:2594
void VisitTypeAliasTemplateDecl(const TypeAliasTemplateDecl *D)
Definition TextNodeDumper.cpp:2619
void VisitOpenACCHostDataConstruct(const OpenACCHostDataConstruct *S)
Definition TextNodeDumper.cpp:3142
void VisitCXXBoolLiteralExpr(const CXXBoolLiteralExpr *Node)
Definition TextNodeDumper.cpp:1708
void VisitIfStmt(const IfStmt *Node)
Definition TextNodeDumper.cpp:1438
void VisitCXXConstructExpr(const CXXConstructExpr *Node)
Definition TextNodeDumper.cpp:1741
void VisitFunctionProtoType(const FunctionProtoType *T)
Definition TextNodeDumper.cpp:2052
void dumpTemplateArgument(const TemplateArgument &TA)
Definition TextNodeDumper.cpp:1085
void dumpLocation(SourceLocation Loc)
Definition TextNodeDumper.cpp:867
void VisitDependentSizedArrayType(const DependentSizedArrayType *T)
Definition TextNodeDumper.cpp:1992
void VisitOpenACCCombinedConstruct(const OpenACCCombinedConstruct *S)
Definition TextNodeDumper.cpp:3123
void VisitOMPExecutableDirective(const OMPExecutableDirective *D)
Definition TextNodeDumper.cpp:2540
void VisitImplicitCastExpr(const ImplicitCastExpr *Node)
Definition TextNodeDumper.cpp:1534
void VisitCXXDefaultArgExpr(const CXXDefaultArgExpr *Node)
Definition TextNodeDumper.cpp:1799
void VisitCXXNamedCastExpr(const CXXNamedCastExpr *Node)
Definition TextNodeDumper.cpp:1700
void VisitTagType(const TagType *T)
Definition TextNodeDumper.cpp:2175
void VisitTemplateExpansionTemplateArgument(const TemplateArgument &TA)
Definition TextNodeDumper.cpp:1373
void VisitSYCLUniqueStableNameExpr(const SYCLUniqueStableNameExpr *Node)
Definition TextNodeDumper.cpp:1596
void VisitNonTypeTemplateParmDecl(const NonTypeTemplateParmDecl *D)
Definition TextNodeDumper.cpp:2815
void VisitOpenACCSetConstruct(const OpenACCSetConstruct *S)
Definition TextNodeDumper.cpp:3163
void VisitFunctionDecl(const FunctionDecl *D)
Definition TextNodeDumper.cpp:2307
void visitTParamCommandComment(const comments::TParamCommandComment *C, const comments::FullComment *FC)
Definition TextNodeDumper.cpp:1202
void VisitTypeTraitExpr(const TypeTraitExpr *Node)
Definition TextNodeDumper.cpp:1787
void dumpBareDeclRef(const Decl *D)
Definition TextNodeDumper.cpp:936
void VisitExtVectorElementExpr(const ExtVectorElementExpr *Node)
Definition TextNodeDumper.cpp:1673
void VisitConvertVectorExpr(const ConvertVectorExpr *S)
Definition TextNodeDumper.cpp:3221
void visitVerbatimBlockLineComment(const comments::VerbatimBlockLineComment *C, const comments::FullComment *)
Definition TextNodeDumper.cpp:1230
void VisitOpenACCShutdownConstruct(const OpenACCShutdownConstruct *S)
Definition TextNodeDumper.cpp:3159
void VisitFloatingLiteral(const FloatingLiteral *Node)
Definition TextNodeDumper.cpp:1621
void VisitInitListExpr(const InitListExpr *ILE)
Definition TextNodeDumper.cpp:1632
void VisitRequiresExpr(const RequiresExpr *Node)
Definition TextNodeDumper.cpp:1958
void VisitVariableArrayType(const VariableArrayType *T)
Definition TextNodeDumper.cpp:1988
void VisitGenericSelectionExpr(const GenericSelectionExpr *E)
Definition TextNodeDumper.cpp:1639
void VisitTemplateTypeParmType(const TemplateTypeParmType *T)
Definition TextNodeDumper.cpp:2189
void VisitCXXDefaultInitExpr(const CXXDefaultInitExpr *Node)
Definition TextNodeDumper.cpp:1804
void visitHTMLStartTagComment(const comments::HTMLStartTagComment *C, const comments::FullComment *)
Definition TextNodeDumper.cpp:1155
void VisitEnumConstantDecl(const EnumConstantDecl *D)
Definition TextNodeDumper.cpp:2294
void VisitPragmaDetectMismatchDecl(const PragmaDetectMismatchDecl *D)
Definition TextNodeDumper.cpp:2535
void dumpTemplateSpecializationKind(TemplateSpecializationKind TSK)
Definition TextNodeDumper.cpp:1023
void VisitAtomicExpr(const AtomicExpr *AE)
Definition TextNodeDumper.cpp:3217
void VisitObjCCompatibleAliasDecl(const ObjCCompatibleAliasDecl *D)
Definition TextNodeDumper.cpp:3006
void VisitClassTemplateDecl(const ClassTemplateDecl *D)
Definition TextNodeDumper.cpp:2784
void VisitBindingDecl(const BindingDecl *D)
Definition TextNodeDumper.cpp:2491
void VisitTypedefType(const TypedefType *T)
Definition TextNodeDumper.cpp:2153
TextTreeStructure(raw_ostream &OS, bool ShowColors)
void AddChild(Fn DoAddChild)
Add a child of the current node. Calls DoAddChild without arguments.
Represents the declaration of a typedef-name via a C++11 alias-declaration.
Declaration of an alias template.
Symbolic representation of typeid(T) for some type T.
RetTy Visit(TypeLoc TyLoc)
Base wrapper for a particular "section" of type source info.
QualType getType() const
Get the type for which this source info wrapper provides information.
SourceRange getSourceRange() const LLVM_READONLY
Get the full source range.
TypeLocClass getTypeLocClass() const
const Type * getTypePtr() const
A container of type source information.
QualType getType() const
Return the type wrapped by this type source info.
A type trait used in the implementation of various C++11 and Library TR1 trait templates.
TypeTrait getTrait() const
Determine which type trait this expression uses.
RetTy Visit(const Type *T)
Performs the operation associated with this visitor object.
The base class of the type hierarchy.
bool isSignedIntegerType() const
Return true if this is an integer type that is signed, according to C99 6.2.5p4 [char,...
bool isDependentType() const
Whether this type is a dependent type, meaning that its definition somehow depends on a template para...
const char * getTypeClassName() const
const T * getAs() const
Member-template getAs'.
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.
QualType getArgumentType() const
bool isArgumentType() const
UnaryExprOrTypeTrait getKind() const
UnaryOperator - This represents the unary-expression's (except sizeof and alignof),...
static bool isPostfix(Opcode Op)
isPostfix - Return true if this is a postfix operation, like x++.
bool hasStoredFPFeatures() const
Is FPFeatures in Trailing Storage?
FPOptionsOverride getStoredFPFeatures() const
Get FPFeatures from trailing storage.
static StringRef getOpcodeStr(Opcode Op)
getOpcodeStr - Turn an Opcode enum value into the punctuation char it corresponds to,...
bool canOverflow() const
Returns true if the unary operator can cause an overflow.
A reference to a name which we were able to look up during parsing but could not resolve to a specifi...
bool requiresADL() const
True if this declaration should be extended by argument-dependent lookup.
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 ...
bool isParameterPack() const
Determine whether this value is actually a function parameter pack, init-capture pack,...
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...
VarDecl * getTemplateInstantiationPattern() const
Retrieve the variable declaration from which this variable could be instantiated, if it is an instant...
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...
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.
bool hasVarStorage() const
True if this WhileStmt has storage for a condition variable.
A static requirement that can be used in a requires-expression to check properties of types and expre...
RequirementKind getKind() const
bool containsUnexpandedParameterPack() const
void Visit(REF(TemplateArgument) TA, ParamTys... P)
The JSON file list parser is used to communicate input to InstallAPI.
static const TerminalColor NullColor
static const TerminalColor ErrorsColor
static const TerminalColor CommentColor
bool isa(CodeGen::Address addr)
static const TerminalColor DeclNameColor
llvm::StringRef getAccessSpelling(AccessSpecifier AS)
static const TerminalColor AddressColor
@ RQ_None
No ref-qualifier was provided.
@ RQ_LValue
An lvalue ref-qualifier was provided (&).
@ RQ_RValue
An rvalue ref-qualifier was provided (&&).
@ OK_VectorComponent
A vector component is an element or range of elements on a vector.
@ OK_ObjCProperty
An Objective-C property is a logical field of an Objective-C object which is read and written via Obj...
@ OK_ObjCSubscript
An Objective-C array/dictionary subscripting which reads an object or writes at the subscripted array...
@ OK_Ordinary
An ordinary object is located at an address in memory.
@ OK_BitField
A bitfield object is a bitfield on a C or C++ record.
@ OK_MatrixComponent
A matrix component is a single element of a matrix.
static const TerminalColor StmtColor
static const TerminalColor UndeserializedColor
@ Override
Merge availability attributes for an override, which requires an exact match or a weakening of constr...
@ Auto
'auto' clause, allowed on 'loop' directives.
@ Bind
'bind' clause, allowed on routine constructs.
@ Gang
'gang' clause, allowed on 'loop' and Combined constructs.
@ Wait
'wait' clause, allowed on Compute, Data, 'update', and Combined constructs.
@ DevicePtr
'deviceptr' clause, allowed on Compute and Combined Constructs, plus 'data' and 'declare'.
@ PCopyOut
'copyout' clause alias 'pcopyout'. Preserved for diagnostic purposes.
@ VectorLength
'vector_length' clause, allowed on 'parallel', 'kernels', 'parallel loop', and 'kernels loop' constru...
@ Async
'async' clause, allowed on Compute, Data, 'update', 'wait', and Combined constructs.
@ PresentOrCreate
'create' clause alias 'present_or_create'.
@ Collapse
'collapse' clause, allowed on 'loop' and Combined constructs.
@ NoHost
'nohost' clause, allowed on 'routine' directives.
@ PresentOrCopy
'copy' clause alias 'present_or_copy'. Preserved for diagnostic purposes.
@ DeviceNum
'device_num' clause, allowed on 'init', 'shutdown', and 'set' constructs.
@ Private
'private' clause, allowed on 'parallel', 'serial', 'loop', 'parallel loop', and 'serial loop' constru...
@ Invalid
Represents an invalid clause, for the purposes of parsing.
@ Vector
'vector' clause, allowed on 'loop', Combined, and 'routine' directives.
@ Copy
'copy' clause, allowed on Compute and Combined Constructs, plus 'data' and 'declare'.
@ Worker
'worker' clause, allowed on 'loop', Combined, and 'routine' directives.
@ Create
'create' clause, allowed on Compute and Combined constructs, plus 'data', 'enter data',...
@ DeviceType
'device_type' clause, allowed on Compute, 'data', 'init', 'shutdown', 'set', update',...
@ DefaultAsync
'default_async' clause, allowed on 'set' construct.
@ Attach
'attach' clause, allowed on Compute and Combined constructs, plus 'data' and 'enter data'.
@ Shortloop
'shortloop' is represented in the ACC.td file, but isn't present in the standard.
@ NumGangs
'num_gangs' clause, allowed on 'parallel', 'kernels', parallel loop', and 'kernels loop' constructs.
@ If
'if' clause, allowed on all the Compute Constructs, Data Constructs, Executable Constructs,...
@ Default
'default' clause, allowed on parallel, serial, kernel (and compound) constructs.
@ UseDevice
'use_device' clause, allowed on 'host_data' construct.
@ NoCreate
'no_create' clause, allowed on allowed on Compute and Combined constructs, plus 'data'.
@ PresentOrCopyOut
'copyout' clause alias 'present_or_copyout'.
@ Link
'link' clause, allowed on 'declare' construct.
@ Reduction
'reduction' clause, allowed on Parallel, Serial, Loop, and the combined constructs.
@ Self
'self' clause, allowed on Compute and Combined Constructs, plus 'update'.
@ CopyOut
'copyout' clause, allowed on Compute and Combined constructs, plus 'data', 'exit data',...
@ Seq
'seq' clause, allowed on 'loop' and 'routine' directives.
@ FirstPrivate
'firstprivate' clause, allowed on 'parallel', 'serial', 'parallel loop', and 'serial loop' constructs...
@ Host
'host' clause, allowed on 'update' construct.
@ PCopy
'copy' clause alias 'pcopy'. Preserved for diagnostic purposes.
@ Tile
'tile' clause, allowed on 'loop' and Combined constructs.
@ PCopyIn
'copyin' clause alias 'pcopyin'. Preserved for diagnostic purposes.
@ DeviceResident
'device_resident' clause, allowed on the 'declare' construct.
@ PCreate
'create' clause alias 'pcreate'. Preserved for diagnostic purposes.
@ Present
'present' clause, allowed on Compute and Combined constructs, plus 'data' and 'declare'.
@ DType
'dtype' clause, an alias for 'device_type', stored separately for diagnostic purposes.
@ CopyIn
'copyin' clause, allowed on Compute and Combined constructs, plus 'data', 'enter data',...
@ Device
'device' clause, allowed on the 'update' construct.
@ Independent
'independent' clause, allowed on 'loop' directives.
@ NumWorkers
'num_workers' clause, allowed on 'parallel', 'kernels', parallel loop', and 'kernels loop' constructs...
@ IfPresent
'if_present' clause, allowed on 'host_data' and 'update' directives.
@ Detach
'detach' clause, allowed on the 'exit data' construct.
@ Delete
'delete' clause, allowed on the 'exit data' construct.
@ PresentOrCopyIn
'copyin' clause alias 'present_or_copyin'.
@ Finalize
'finalize' clause, allowed on 'exit data' directive.
AccessSpecifier
A C++ access specifier (public, private, protected), plus the special value "none" which means differ...
StorageClass
Storage classes.
static const TerminalColor DeclKindNameColor
IdentifierLoc DeviceTypeArgument
const FunctionProtoType * T
static const TerminalColor LocationColor
static const TerminalColor ValueKindColor
static const TerminalColor CastColor
@ VK_PRValue
A pr-value expression (in the C++11 taxonomy) produces a temporary value.
@ VK_XValue
An x-value expression is a reference to an object with independent storage but which can be "moved",...
@ VK_LValue
An l-value expression is a reference to an object with independent storage.
const char * getTraitSpelling(ExpressionTrait T) LLVM_READONLY
Return the spelling of the type trait TT. Never null.
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 is a subtype of X when the type parameter is covariant and...
@ Covariant
The parameter is covariant, e.g., X 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
U cast(CodeGen::Address addr)
static const TerminalColor ValueColor
ElaboratedTypeKeyword
The elaboration keyword that precedes a qualified type name or introduces an elaborated-type-specifie...
@ None
No keyword precedes the qualified type name.
@ EST_DependentNoexcept
noexcept(expression), value-dependent
@ EST_Uninstantiated
not instantiated yet
@ EST_Unparsed
not parsed yet
@ EST_NoThrow
Microsoft __declspec(nothrow) extension.
@ EST_None
no exception specification
@ EST_MSAny
Microsoft throw(...) extension.
@ EST_BasicNoexcept
noexcept
@ EST_NoexceptFalse
noexcept(expression), evals to 'false'
@ EST_Unevaluated
not evaluated yet, for special member function
@ EST_NoexceptTrue
noexcept(expression), evals to 'true'
@ EST_Dynamic
throw(T1, T2)
static const TerminalColor ObjectKindColor
@ NOUR_Discarded
This name appears as a potential result of a discarded value expression.
@ NOUR_Unevaluated
This name appears in an unevaluated operand.
@ NOUR_None
This is an odr-use.
@ NOUR_Constant
This name appears as a potential result of an lvalue-to-rvalue conversion that is a constant expressi...
FunctionDecl * SourceDecl
The function whose exception specification this is, for EST_Unevaluated and EST_Uninstantiated.
FunctionDecl * SourceTemplate
The function template whose exception specification this is instantiated from, for EST_Uninstantiated...
ExceptionSpecificationType Type
The kind of exception specification this is.
Extra information about a function prototype.
ExceptionSpecInfo ExceptionSpec
static StringRef getKeywordName(ElaboratedTypeKeyword Keyword)
Iterator range representation begin:end[:step].
A std::pair-like structure for storing a qualified type split into its local qualifiers and its local...