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 (C) {

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 (T) {

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 (C) {

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 (C) {

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 && T.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() && C->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 (T->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 (T->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 (C) {

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...