clang 24.0.0git
TextNodeDumper.cpp
Go to the documentation of this file.
1//===--- TextNodeDumper.cpp - Printing of AST nodes -----------------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// This file implements AST dumping of components of individual AST nodes.
10//
11//===----------------------------------------------------------------------===//
12
14#include "clang/AST/APValue.h"
20#include "clang/AST/Type.h"
23#include "clang/Basic/Module.h"
26#include "llvm/ADT/StringExtras.h"
27#include "llvm/Frontend/HLSL/HLSLRootSignature.h"
28
29#include <algorithm>
30#include <utility>
31
32using namespace clang;
33
34static void dumpPreviousDeclImpl(raw_ostream &OS, ...) {}
35
36template <typename T>
37static void dumpPreviousDeclImpl(raw_ostream &OS, const Mergeable<T> *D) {
38 const T *First = D->getFirstDecl();
39 if (First != D)
40 OS << " first " << First;
41}
42
43template <typename T>
44static void dumpPreviousDeclImpl(raw_ostream &OS, const Redeclarable<T> *D) {
45 const T *Prev = D->getPreviousDecl();
46 if (Prev)
47 OS << " prev " << Prev;
48}
49
50/// Dump the previous declaration in the redeclaration chain for a declaration,
51/// if any.
52static void dumpPreviousDecl(raw_ostream &OS, const Decl *D) {
53 switch (D->getKind()) {
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
63TextNodeDumper::TextNodeDumper(raw_ostream &OS, const ASTContext &Context,
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
70TextNodeDumper::TextNodeDumper(raw_ostream &OS, bool ShowColors)
71 : TextTreeStructure(OS, ShowColors), OS(OS), ShowColors(ShowColors) {}
72
74 const comments::FullComment *FC) {
75 if (!C) {
76 ColorScope Color(OS, ShowColors, ASTDumpColor::Null);
77 OS << "<<<NULL>>>";
78 return;
79 }
80
81 {
82 ColorScope Color(OS, ShowColors, ASTDumpColor::Comment);
83 OS << C->getCommentKindName();
84 }
86 dumpSourceRange(C->getSourceRange());
87
88 ConstCommentVisitor<TextNodeDumper, void,
89 const comments::FullComment *>::visit(C, FC);
90}
91
93 {
94 ColorScope Color(OS, ShowColors, ASTDumpColor::Attr);
95
96 switch (A->getKind()) {
97#define ATTR(X) \
98 case attr::X: \
99 OS << #X; \
100 break;
101#include "clang/Basic/AttrList.inc"
102 }
103 OS << "Attr";
104 }
105 dumpPointer(A);
107 if (A->isInherited())
108 OS << " Inherited";
109 if (A->isImplicit())
110 OS << " Implicit";
111
113}
114
116 const Decl *From, StringRef Label) {
117 OS << "TemplateArgument";
118 if (R.isValid())
120
121 if (From)
122 dumpDeclRef(From, Label);
123
125}
126
127void TextNodeDumper::Visit(const Stmt *Node) {
128 if (!Node) {
129 ColorScope Color(OS, ShowColors, ASTDumpColor::Null);
130 OS << "<<<NULL>>>";
131 return;
132 }
133 {
134 ColorScope Color(OS, ShowColors, ASTDumpColor::Stmt);
135 OS << Node->getStmtClassName();
136 }
137 dumpPointer(Node);
139
140 if (const auto *E = dyn_cast<Expr>(Node)) {
141 dumpType(E->getType());
142
143 if (E->containsErrors()) {
144 ColorScope Color(OS, ShowColors, ASTDumpColor::Errors);
145 OS << " contains-errors";
146 }
147
148 {
149 ColorScope Color(OS, ShowColors, ASTDumpColor::ValueKind);
150 switch (E->getValueKind()) {
151 case VK_PRValue:
152 break;
153 case VK_LValue:
154 OS << " lvalue";
155 break;
156 case VK_XValue:
157 OS << " xvalue";
158 break;
159 }
160 }
161
162 {
163 ColorScope Color(OS, ShowColors, ASTDumpColor::ObjectKind);
164 switch (E->getObjectKind()) {
165 case OK_Ordinary:
166 break;
167 case OK_BitField:
168 OS << " bitfield";
169 break;
170 case OK_ObjCProperty:
171 OS << " objcproperty";
172 break;
173 case OK_ObjCSubscript:
174 OS << " objcsubscript";
175 break;
177 OS << " vectorcomponent";
178 break;
180 OS << " matrixcomponent";
181 break;
182 }
183 }
184 }
185
187}
188
190 if (!T) {
191 ColorScope Color(OS, ShowColors, ASTDumpColor::Null);
192 OS << "<<<NULL>>>";
193 return;
194 }
195 if (isa<LocInfoType>(T)) {
196 {
197 ColorScope Color(OS, ShowColors, ASTDumpColor::Type);
198 OS << "LocInfo Type";
199 }
200 dumpPointer(T);
201 return;
202 }
203
204 {
205 ColorScope Color(OS, ShowColors, ASTDumpColor::Type);
206 OS << T->getTypeClassName() << "Type";
207 }
208 dumpPointer(T);
209 OS << " ";
210 dumpBareType(QualType(T, 0), false);
211
212 QualType SingleStepDesugar =
213 T->getLocallyUnqualifiedSingleStepDesugaredType();
214 if (SingleStepDesugar != QualType(T, 0))
215 OS << " sugar";
216
217 if (T->containsErrors()) {
218 ColorScope Color(OS, ShowColors, ASTDumpColor::Errors);
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";
239 dumpPointer(T.getAsOpaquePtr());
240 OS << " ";
241 dumpBareType(T, false);
242 OS << " " << T.split().Quals.getAsString();
243}
244
246 if (!TL) {
247 ColorScope Color(OS, ShowColors, ASTDumpColor::Null);
248 OS << "<<<NULL>>>";
249 return;
250 }
251
252 {
253 ColorScope Color(OS, ShowColors, ASTDumpColor::Type);
255 ? "Qualified"
256 : TL.getType()->getTypeClassName())
257 << "TypeLoc";
258 }
260 OS << ' ';
261 dumpBareType(TL.getType(), /*Desugar=*/false);
262
264}
265
267 if (!D) {
268 ColorScope Color(OS, ShowColors, ASTDumpColor::Null);
269 OS << "<<<NULL>>>";
270 return;
271 }
272
273 {
274 ColorScope Color(OS, ShowColors, ASTDumpColor::DeclKindName);
275 OS << D->getDeclKindName() << "Decl";
276 }
277 dumpPointer(D);
278 if (D->getLexicalDeclContext() != D->getDeclContext())
279 OS << " parent " << cast<Decl>(D->getDeclContext());
280 dumpPreviousDecl(OS, D);
282 OS << ' ';
284 if (D->isFromASTFile())
285 OS << " imported";
286 if (Module *M = D->getOwningModule())
287 OS << " in " << M->getFullModuleName();
288 if (auto *ND = dyn_cast<NamedDecl>(D))
290 const_cast<NamedDecl *>(ND)))
291 AddChild([=] { OS << "also in " << M->getFullModuleName(); });
292 if (const NamedDecl *ND = dyn_cast<NamedDecl>(D))
293 if (!ND->isUnconditionallyVisible())
294 OS << " hidden";
295 if (D->isImplicit())
296 OS << " implicit";
297
298 if (D->isUsed())
299 OS << " used";
300 else if (D->isThisDeclarationReferenced())
301 OS << " referenced";
302
303 if (D->isInvalidDecl())
304 OS << " invalid";
305 if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(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
316 if (!isa<FunctionDecl>(*D)) {
317 const auto *MD = dyn_cast<ObjCMethodDecl>(D);
318 if (!MD || !MD->isThisDeclarationADefinition()) {
319 const auto *DC = dyn_cast<DeclContext>(D);
320 if (DC && DC->hasExternalLexicalStorage()) {
321 ColorScope Color(OS, ShowColors, ASTDumpColor::Undeserialized);
322 OS << " <undeserialized declarations>";
323 }
324 }
325 }
326
327 switch (D->getFriendObjectKind()) {
328 case Decl::FOK_None:
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 << ' ';
345 dumpBareDeclRef(Init->getAnyMember());
346 } else if (Init->isBaseInitializer()) {
347 dumpType(QualType(Init->getBaseClass(), 0));
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 << ' ';
363 dumpBareDeclRef(C.getVariable());
364 }
365}
366
368 if (!C) {
369 ColorScope Color(OS, ShowColors, ASTDumpColor::Null);
370 OS << "<<<NULL>>> OMPClause";
371 return;
372 }
373 {
374 ColorScope Color(OS, ShowColors, ASTDumpColor::Attr);
375 OpenMPClauseKind CKind = C->getClauseKind();
376 StringRef ClauseName(CKind == llvm::omp::Clause::OMPC_update_depend_objects
377 ? StringRef("UpdateDependObjects")
378 : llvm::omp::getOpenMPClauseName(CKind));
379 OS << "OMP" << ClauseName.substr(/*Start=*/0, /*N=*/1).upper()
380 << ClauseName.drop_front() << "Clause";
381 }
382 dumpPointer(C);
383 dumpSourceRange(SourceRange(C->getBeginLoc(), C->getEndLoc()));
384 if (C->isImplicit())
385 OS << " <implicit>";
386}
387
389 const OpenACCAsteriskSizeExpr *E) {
390 // Nothing to do here, only location exists, and that is printed elsewhere.
391}
392
394 if (!C) {
395 ColorScope Color(OS, ShowColors, ASTDumpColor::Null);
396 OS << "<<<NULL>>> OpenACCClause";
397 return;
398 }
399 {
400 ColorScope Color(OS, ShowColors, ASTDumpColor::Attr);
401 OS << C->getClauseKind();
402
403 // Handle clauses with parens for types that have no children, likely
404 // because there is no sub expression.
405 switch (C->getClauseKind()) {
407 OS << '(' << cast<OpenACCDefaultClause>(C)->getDefaultClauseKind() << ')';
408 break;
441 // The condition expression will be printed as a part of the 'children',
442 // but print 'clause' here so it is clear what is happening from the dump.
443 OS << " clause";
444 break;
446 OS << " clause";
447 // print the list of all GangKinds, so that there is some sort of
448 // relationship to the expressions listed afterwards.
449 auto *GC = cast<OpenACCGangClause>(C);
450
451 for (unsigned I = 0; I < GC->getNumExprs(); ++I) {
452 OS << " " << GC->getExpr(I).first;
453 }
454 break;
455 }
457 OS << " clause";
458 if (cast<OpenACCCollapseClause>(C)->hasForce())
459 OS << ": force";
460 break;
461
465 OS << " clause";
466 if (cast<OpenACCCopyClause>(C)->getModifierList() !=
468 OS << " modifiers: " << cast<OpenACCCopyClause>(C)->getModifierList();
469 break;
473 OS << " clause";
474 if (cast<OpenACCCopyInClause>(C)->getModifierList() !=
476 OS << " modifiers: " << cast<OpenACCCopyInClause>(C)->getModifierList();
477 break;
481 OS << " clause";
482 if (cast<OpenACCCopyOutClause>(C)->getModifierList() !=
484 OS << " modifiers: "
485 << cast<OpenACCCopyOutClause>(C)->getModifierList();
486 break;
490 OS << " clause";
491 if (cast<OpenACCCreateClause>(C)->getModifierList() !=
493 OS << " modifiers: " << cast<OpenACCCreateClause>(C)->getModifierList();
494 break;
496 OS << " clause";
497 if (cast<OpenACCWaitClause>(C)->hasDevNumExpr())
498 OS << " has devnum";
499 if (cast<OpenACCWaitClause>(C)->hasQueuesTag())
500 OS << " has queues tag";
501 break;
504 OS << "(";
505 llvm::interleaveComma(
506 cast<OpenACCDeviceTypeClause>(C)->getArchitectures(), OS,
507 [&](const DeviceTypeArgument &Arch) {
508 if (Arch.getIdentifierInfo() == nullptr)
509 OS << "*";
510 else
511 OS << Arch.getIdentifierInfo()->getName();
512 });
513 OS << ")";
514 break;
516 OS << " clause Operator: "
517 << cast<OpenACCReductionClause>(C)->getReductionOp();
518 break;
520 OS << " clause";
521 if (cast<OpenACCBindClause>(C)->isIdentifierArgument())
522 OS << " identifier '"
523 << cast<OpenACCBindClause>(C)->getIdentifierArgument()->getName()
524 << "'";
525 else
526 AddChild(
527 [=] { Visit(cast<OpenACCBindClause>(C)->getStringArgument()); });
528 }
529 }
530 dumpPointer(C);
531 dumpSourceRange(SourceRange(C->getBeginLoc(), C->getEndLoc()));
532}
533
535 const TypeSourceInfo *TSI = A.getTypeSourceInfo();
536 if (TSI) {
537 OS << "case ";
538 dumpType(TSI->getType());
539 } else {
540 OS << "default";
541 }
542
543 if (A.isSelected())
544 OS << " selected";
545}
546
548 if (!R) {
549 ColorScope Color(OS, ShowColors, ASTDumpColor::Null);
550 OS << "<<<NULL>>> ConceptReference";
551 return;
552 }
553
554 OS << "ConceptReference";
555 dumpPointer(R);
556 dumpSourceRange(R->getSourceRange());
557 OS << ' ';
558 dumpBareConcept(R->getNamedConcept());
559}
560
562 if (!R) {
563 ColorScope Color(OS, ShowColors, ASTDumpColor::Null);
564 OS << "<<<NULL>>> Requirement";
565 return;
566 }
567
568 {
569 ColorScope Color(OS, ShowColors, ASTDumpColor::Stmt);
570 switch (R->getKind()) {
572 OS << "TypeRequirement";
573 break;
575 OS << "SimpleRequirement";
576 break;
578 OS << "CompoundRequirement";
579 break;
581 OS << "NestedRequirement";
582 break;
583 }
584 }
585
586 dumpPointer(R);
587
588 if (auto *ER = dyn_cast<concepts::ExprRequirement>(R)) {
589 if (ER->hasNoexceptRequirement())
590 OS << " noexcept";
591 }
592
593 if (R->isDependent())
594 OS << " dependent";
595 else
596 OS << (R->isSatisfied() ? " satisfied" : " unsatisfied");
597 if (R->containsUnexpandedParameterPack())
598 OS << " contains_unexpanded_pack";
599}
600
601static double GetApproxValue(const llvm::APFloat &F) {
602 llvm::APFloat V = F;
603 bool ignored;
604 V.convert(llvm::APFloat::IEEEdouble(), llvm::APFloat::rmNearestTiesToEven,
605 &ignored);
606 return V.convertToDouble();
607}
608
609/// True if the \p APValue \p Value can be folded onto the current line.
610static bool isSimpleAPValue(const APValue &Value) {
611 switch (Value.getKind()) {
612 case APValue::None:
614 case APValue::Int:
615 case APValue::Float:
619 case APValue::LValue:
622 return true;
623 case APValue::Vector:
624 case APValue::Array:
625 case APValue::Struct:
626 case APValue::Matrix:
627 return false;
628 case APValue::Union:
629 return isSimpleAPValue(Value.getUnionValue());
630 }
631 llvm_unreachable("unexpected APValue kind!");
632}
633
634/// Dump the children of the \p APValue \p Value.
635///
636/// \param[in] Value The \p APValue to visit
637/// \param[in] Ty The \p QualType passed to \p Visit
638///
639/// \param[in] IdxToChildFun A function mapping an \p APValue and an index
640/// to one of the child of the \p APValue
641///
642/// \param[in] NumChildren \p IdxToChildFun will be called on \p Value with
643/// the indices in the range \p [0,NumChildren(
644///
645/// \param[in] LabelSingular The label to use on a line with a single child
646/// \param[in] LabelPlurial The label to use on a line with multiple children
647void TextNodeDumper::dumpAPValueChildren(
648 const APValue &Value, QualType Ty,
649 const APValue &(*IdxToChildFun)(const APValue &, unsigned),
650 unsigned NumChildren, StringRef LabelSingular, StringRef LabelPlurial) {
651 // To save some vertical space we print up to MaxChildrenPerLine APValues
652 // considered to be simple (by isSimpleAPValue) on a single line.
653 constexpr unsigned MaxChildrenPerLine = 4;
654 unsigned I = 0;
655 while (I < NumChildren) {
656 unsigned J = I;
657 while (J < NumChildren) {
658 if (isSimpleAPValue(IdxToChildFun(Value, J)) &&
659 (J - I < MaxChildrenPerLine)) {
660 ++J;
661 continue;
662 }
663 break;
664 }
665
666 J = std::max(I + 1, J);
667
668 // Print [I,J) on a single line.
669 AddChild(J - I > 1 ? LabelPlurial : LabelSingular, [=]() {
670 for (unsigned X = I; X < J; ++X) {
671 Visit(IdxToChildFun(Value, X), Ty);
672 if (X + 1 != J)
673 OS << ", ";
674 }
675 });
676 I = J;
677 }
678}
679
681 ColorScope Color(OS, ShowColors, ASTDumpColor::ValueKind);
682 switch (Value.getKind()) {
683 case APValue::None:
684 OS << "None";
685 return;
687 OS << "Indeterminate";
688 return;
689 case APValue::Int:
690 OS << "Int ";
691 {
692 ColorScope Color(OS, ShowColors, ASTDumpColor::Value);
693 OS << Value.getInt();
694 }
695 return;
696 case APValue::Float:
697 OS << "Float ";
698 {
699 ColorScope Color(OS, ShowColors, ASTDumpColor::Value);
700 OS << GetApproxValue(Value.getFloat());
701 }
702 return;
704 OS << "FixedPoint ";
705 {
706 ColorScope Color(OS, ShowColors, ASTDumpColor::Value);
707 OS << Value.getFixedPoint();
708 }
709 return;
710 case APValue::Vector: {
711 unsigned VectorLength = Value.getVectorLength();
712 OS << "Vector length=" << VectorLength;
713
714 dumpAPValueChildren(
715 Value, Ty,
716 [](const APValue &Value, unsigned Index) -> const APValue & {
717 return Value.getVectorElt(Index);
718 },
719 VectorLength, "element", "elements");
720 return;
721 }
723 OS << "ComplexInt ";
724 {
725 ColorScope Color(OS, ShowColors, ASTDumpColor::Value);
726 OS << Value.getComplexIntReal() << " + " << Value.getComplexIntImag()
727 << 'i';
728 }
729 return;
731 OS << "ComplexFloat ";
732 {
733 ColorScope Color(OS, ShowColors, ASTDumpColor::Value);
734 OS << GetApproxValue(Value.getComplexFloatReal()) << " + "
735 << GetApproxValue(Value.getComplexFloatImag()) << 'i';
736 }
737 return;
738 case APValue::LValue: {
739 (void)Context;
740 OS << "LValue Base=";
741 APValue::LValueBase B = Value.getLValueBase();
742 if (B.isNull())
743 OS << "null";
744 else if (const auto *BE = B.dyn_cast<const Expr *>()) {
745 OS << BE->getStmtClassName() << ' ';
746 dumpPointer(BE);
747 } else if (const auto BTI = B.dyn_cast<TypeInfoLValue>()) {
748 OS << "TypeInfoLValue ";
749 ColorScope Color(OS, ShowColors, ASTDumpColor::Type);
750 BTI.print(OS, PrintPolicy);
751 } else if (B.is<DynamicAllocLValue>()) {
752 OS << "DynamicAllocLValue";
753 auto BDA = B.getDynamicAllocType();
754 dumpType(BDA);
755 } else {
756 const auto *VDB = B.get<const ValueDecl *>();
757 OS << VDB->getDeclKindName() << "Decl";
758 dumpPointer(VDB);
759 }
760 OS << ", Null=" << Value.isNullPointer()
761 << ", Offset=" << Value.getLValueOffset().getQuantity()
762 << ", OnePastTheEnd=" << Value.isLValueOnePastTheEnd()
763 << ", HasPath=" << Value.hasLValuePath();
764 if (Value.hasLValuePath()) {
765 OS << ", PathLength=" << Value.getLValuePath().size();
766 OS << ", Path=(";
767 llvm::ListSeparator Sep;
768 for (const auto &PathEntry : Value.getLValuePath()) {
769 // We're printing all entries as array indices because don't have the
770 // type information here to do anything else.
771 OS << Sep << PathEntry.getAsArrayIndex();
772 }
773 OS << ")";
774 }
775 return;
776 }
777 case APValue::Array: {
778 unsigned ArraySize = Value.getArraySize();
779 unsigned NumInitializedElements = Value.getArrayInitializedElts();
780 OS << "Array size=" << ArraySize;
781
782 dumpAPValueChildren(
783 Value, Ty,
784 [](const APValue &Value, unsigned Index) -> const APValue & {
785 return Value.getArrayInitializedElt(Index);
786 },
787 NumInitializedElements, "element", "elements");
788
789 if (Value.hasArrayFiller()) {
790 AddChild("filler", [=] {
791 {
792 ColorScope Color(OS, ShowColors, ASTDumpColor::Value);
793 OS << ArraySize - NumInitializedElements << " x ";
794 }
795 Visit(Value.getArrayFiller(), Ty);
796 });
797 }
798
799 return;
800 }
801 case APValue::Struct: {
802 OS << "Struct";
803
804 dumpAPValueChildren(
805 Value, Ty,
806 [](const APValue &Value, unsigned Index) -> const APValue & {
807 return Value.getStructBase(Index);
808 },
809 Value.getStructNumBases(), "base", "bases");
810
811 dumpAPValueChildren(
812 Value, Ty,
813 [](const APValue &Value, unsigned Index) -> const APValue & {
814 return Value.getStructField(Index);
815 },
816 Value.getStructNumFields(), "field", "fields");
817
818 dumpAPValueChildren(
819 Value, Ty,
820 [](const APValue &Value, unsigned Index) -> const APValue & {
821 return Value.getStructVirtualBase(Index);
822 },
823 Value.getStructNumVirtualBases(), "vbase", "vbases");
824 return;
825 }
826 case APValue::Matrix: {
827 unsigned NumRows = Value.getMatrixNumRows();
828 unsigned NumCols = Value.getMatrixNumColumns();
829 OS << "Matrix " << NumRows << "x" << NumCols;
830
831 dumpAPValueChildren(
832 Value, Ty,
833 [](const APValue &Value, unsigned Index) -> const APValue & {
834 return Value.getMatrixElt(Index);
835 },
836 Value.getMatrixNumElements(), "element", "elements");
837 return;
838 }
839 case APValue::Union: {
840 OS << "Union";
841 {
842 ColorScope Color(OS, ShowColors, ASTDumpColor::Value);
843 if (const FieldDecl *FD = Value.getUnionField())
844 OS << " ." << *cast<NamedDecl>(FD);
845 }
846 // If the union value is considered to be simple, fold it into the
847 // current line to save some vertical space.
848 const APValue &UnionValue = Value.getUnionValue();
849 if (isSimpleAPValue(UnionValue)) {
850 OS << ' ';
851 Visit(UnionValue, Ty);
852 } else {
853 AddChild([=] { Visit(UnionValue, Ty); });
854 }
855
856 return;
857 }
859 OS << "MemberPointer ";
860 auto Path = Value.getMemberPointerPath();
861 for (const CXXRecordDecl *D : Path) {
862 {
863 ColorScope Color(OS, ShowColors, ASTDumpColor::DeclName);
864 OS << D->getDeclName();
865 }
866 OS << "::";
867 }
868
869 ColorScope Color(OS, ShowColors, ASTDumpColor::DeclName);
870 if (const ValueDecl *MemDecl = Value.getMemberPointerDecl())
871 OS << MemDecl->getDeclName();
872 else
873 OS << "null";
874 return;
875 }
877 OS << "AddrLabelDiff ";
878 OS << "&&" << Value.getAddrLabelDiffLHS()->getLabel()->getName();
879 OS << " - ";
880 OS << "&&" << Value.getAddrLabelDiffRHS()->getLabel()->getName();
881 return;
882 }
883 llvm_unreachable("Unknown APValue kind!");
884}
885
886void TextNodeDumper::dumpPointer(const void *Ptr) {
887 ColorScope Color(OS, ShowColors, ASTDumpColor::Address);
888 OS << ' ' << Ptr;
889}
890
892 if (!SM)
893 return;
894
895 ColorScope Color(OS, ShowColors, ASTDumpColor::Location);
896 SourceLocation SpellingLoc = SM->getSpellingLoc(Loc);
897
898 // The general format we print out is filename:line:col, but we drop pieces
899 // that haven't changed since the last loc printed.
900 PresumedLoc PLoc = SM->getPresumedLoc(SpellingLoc);
901
902 if (PLoc.isInvalid()) {
903 OS << "<invalid sloc>";
904 return;
905 }
906
907 if (strcmp(PLoc.getFilename(), LastLocFilename) != 0) {
908 OS << PLoc.getFilename() << ':' << PLoc.getLine() << ':'
909 << PLoc.getColumn();
910 LastLocFilename = PLoc.getFilename();
911 LastLocLine = PLoc.getLine();
912 } else if (PLoc.getLine() != LastLocLine) {
913 OS << "line" << ':' << PLoc.getLine() << ':' << PLoc.getColumn();
914 LastLocLine = PLoc.getLine();
915 } else {
916 OS << "col" << ':' << PLoc.getColumn();
917 }
918}
919
921 // Can't translate locations if a SourceManager isn't available.
922 if (!SM)
923 return;
924
925 OS << " <";
926 dumpLocation(R.getBegin());
927 if (R.getBegin() != R.getEnd()) {
928 OS << ", ";
929 dumpLocation(R.getEnd());
930 }
931 OS << ">";
932
933 // <t2.c:123:421[blah], t2.c:412:321>
934}
935
937 ColorScope Color(OS, ShowColors, ASTDumpColor::Type);
938
939 SplitQualType T_split = T.split();
940 std::string T_str = QualType::getAsString(T_split, PrintPolicy);
941 OS << "'" << T_str << "'";
942
943 if (Desugar && !T.isNull()) {
944 // If the type is sugared, also dump a (shallow) desugared type when
945 // it is visibly different.
946 SplitQualType D_split = T.getSplitDesugaredType();
947 if (T_split != D_split) {
948 std::string D_str = QualType::getAsString(D_split, PrintPolicy);
949 if (T_str != D_str)
950 OS << ":'" << QualType::getAsString(D_split, PrintPolicy) << "'";
951 }
952 }
953}
954
956 OS << ' ';
958}
959
961 {
962 ColorScope Color(OS, ShowColors, ASTDumpColor::DeclKindName);
963 OS << "Concept";
964 }
965
966 const TemplateDecl *TD = TN.getAsTemplateDecl();
967 dumpPointer(TD);
968
969 ColorScope Color(OS, ShowColors, ASTDumpColor::DeclName);
970 OS << " '";
971 TN.print(OS, PrintPolicy, TemplateName::Qualified::None);
972 OS << '\'';
973}
974
976 if (!D) {
977 ColorScope Color(OS, ShowColors, ASTDumpColor::Null);
978 OS << "<<<NULL>>>";
979 return;
980 }
981
982 {
983 ColorScope Color(OS, ShowColors, ASTDumpColor::DeclKindName);
984 OS << D->getDeclKindName();
985 }
986 dumpPointer(D);
987
988 if (const NamedDecl *ND = dyn_cast<NamedDecl>(D)) {
989 ColorScope Color(OS, ShowColors, ASTDumpColor::DeclName);
990 if (DeclarationName Name = ND->getDeclName())
991 OS << " '" << Name << '\'';
992 else
993 switch (ND->getKind()) {
994 case Decl::Decomposition:
995 if (auto Bindings = cast<DecompositionDecl>(ND)->bindings();
996 !Bindings.empty())
997 OS << " first_binding '" << Bindings[0]->getDeclName() << '\'';
998 else
999 OS << " no_bindings";
1000 break;
1001 case Decl::Field: {
1002 auto *FD = cast<FieldDecl>(ND);
1003 OS << " field_index " << FD->getFieldIndex();
1004 break;
1005 }
1006 case Decl::ParmVar: {
1007 auto *PD = cast<ParmVarDecl>(ND);
1008 OS << " depth " << PD->getFunctionScopeDepth() << " index "
1009 << PD->getFunctionScopeIndex();
1010 break;
1011 }
1012 case Decl::TemplateTypeParm: {
1013 auto *TD = cast<TemplateTypeParmDecl>(ND);
1014 OS << " depth " << TD->getDepth() << " index " << TD->getIndex();
1015 break;
1016 }
1017 case Decl::NonTypeTemplateParm: {
1018 auto *TD = cast<NonTypeTemplateParmDecl>(ND);
1019 OS << " depth " << TD->getDepth() << " index " << TD->getIndex();
1020 break;
1021 }
1022 default:
1023 // Var, Namespace, (CXX)Record: Nothing else besides source location.
1024 dumpSourceRange(ND->getSourceRange());
1025 break;
1026 }
1027 }
1028
1029 if (const ValueDecl *VD = dyn_cast<ValueDecl>(D))
1030 dumpType(VD->getType());
1031}
1032
1034 if (ND->getDeclName()) {
1035 ColorScope Color(OS, ShowColors, ASTDumpColor::DeclName);
1036 OS << ' ' << ND->getDeclName();
1037 }
1038}
1039
1041 const auto AccessSpelling = getAccessSpelling(AS);
1042 if (AccessSpelling.empty())
1043 return;
1044 OS << AccessSpelling;
1045}
1046
1049 if (auto *BD = dyn_cast<BlockDecl *>(C))
1050 dumpDeclRef(BD, "cleanup");
1051 else if (auto *CLE = dyn_cast<CompoundLiteralExpr *>(C))
1052 AddChild([=] {
1053 OS << "cleanup ";
1054 {
1055 ColorScope Color(OS, ShowColors, ASTDumpColor::Stmt);
1056 OS << CLE->getStmtClassName();
1057 }
1058 dumpPointer(CLE);
1059 });
1060 else
1061 llvm_unreachable("unexpected cleanup type");
1062}
1063
1066 switch (TSK) {
1067 case TSK_Undeclared:
1068 break;
1070 OS << " implicit_instantiation";
1071 break;
1073 OS << " explicit_specialization";
1074 break;
1076 OS << " explicit_instantiation_declaration";
1077 break;
1079 OS << " explicit_instantiation_definition";
1080 break;
1081 }
1082}
1083
1085 if (!NNS)
1086 return;
1087
1088 AddChild([=] {
1089 OS << "NestedNameSpecifier";
1090
1091 switch (NNS.getKind()) {
1093 auto [Namespace, Prefix] = NNS.getAsNamespaceAndPrefix();
1094 OS << " "; // "Namespace" is printed as the decl kind.
1095 dumpBareDeclRef(Namespace);
1097 break;
1098 }
1100 OS << " TypeSpec";
1101 dumpType(QualType(NNS.getAsType(), 0));
1102 break;
1104 OS << " Global";
1105 break;
1107 OS << " Super";
1108 break;
1110 llvm_unreachable("unexpected null nested name specifier");
1111 }
1112 });
1113}
1114
1115void TextNodeDumper::dumpDeclRef(const Decl *D, StringRef Label) {
1116 if (!D)
1117 return;
1118
1119 AddChild([=] {
1120 if (!Label.empty())
1121 OS << Label << ' ';
1122 dumpBareDeclRef(D);
1123 });
1124}
1125
1128 {
1129 llvm::raw_svector_ostream SS(Str);
1130 TA.print(PrintPolicy, SS, /*IncludeType=*/true);
1131 }
1132 OS << " '" << Str << "'";
1133
1134 if (!Context)
1135 return;
1136
1137 if (TemplateArgument CanonTA = Context->getCanonicalTemplateArgument(TA);
1138 !CanonTA.structurallyEquals(TA)) {
1139 llvm::SmallString<128> CanonStr;
1140 {
1141 llvm::raw_svector_ostream SS(CanonStr);
1142 CanonTA.print(PrintPolicy, SS, /*IncludeType=*/true);
1143 }
1144 if (CanonStr != Str)
1145 OS << ":'" << CanonStr << "'";
1146 }
1147}
1148
1149const char *TextNodeDumper::getCommandName(unsigned CommandID) {
1150 if (Traits)
1151 return Traits->getCommandInfo(CommandID)->Name;
1152 const comments::CommandInfo *Info =
1154 if (Info)
1155 return Info->Name;
1156 return "<not a builtin command>";
1157}
1158
1159void TextNodeDumper::printFPOptions(FPOptionsOverride FPO) {
1160#define FP_OPTION(NAME, TYPE, WIDTH, PREVIOUS) \
1161 if (FPO.has##NAME##Override()) \
1162 OS << " " #NAME "=" << FPO.get##NAME##Override();
1163#include "clang/Basic/FPOptions.def"
1164}
1165
1167 const comments::FullComment *) {
1168 OS << " Text=\"" << C->getText() << "\"";
1169}
1170
1173 OS << " Name=\"" << getCommandName(C->getCommandID()) << "\"";
1174 switch (C->getRenderKind()) {
1176 OS << " RenderNormal";
1177 break;
1179 OS << " RenderBold";
1180 break;
1182 OS << " RenderMonospaced";
1183 break;
1185 OS << " RenderEmphasized";
1186 break;
1188 OS << " RenderAnchor";
1189 break;
1190 }
1191
1192 for (unsigned i = 0, e = C->getNumArgs(); i != e; ++i)
1193 OS << " Arg[" << i << "]=\"" << C->getArgText(i) << "\"";
1194}
1195
1198 OS << " Name=\"" << C->getTagName() << "\"";
1199 if (C->getNumAttrs() != 0) {
1200 OS << " Attrs: ";
1201 for (unsigned i = 0, e = C->getNumAttrs(); i != e; ++i) {
1202 const comments::HTMLStartTagComment::Attribute &Attr = C->getAttr(i);
1203 OS << " \"" << Attr.Name << "=\"" << Attr.Value << "\"";
1204 }
1205 }
1206 if (C->isSelfClosing())
1207 OS << " SelfClosing";
1208}
1209
1212 OS << " Name=\"" << C->getTagName() << "\"";
1213}
1214
1217 OS << " Name=\"" << getCommandName(C->getCommandID()) << "\"";
1218 for (unsigned i = 0, e = C->getNumArgs(); i != e; ++i)
1219 OS << " Arg[" << i << "]=\"" << C->getArgText(i) << "\"";
1220}
1221
1224 OS << " "
1226
1227 if (C->isDirectionExplicit())
1228 OS << " explicitly";
1229 else
1230 OS << " implicitly";
1231
1232 if (C->hasParamName()) {
1233 if (C->isParamIndexValid())
1234 OS << " Param=\"" << C->getParamName(FC) << "\"";
1235 else
1236 OS << " Param=\"" << C->getParamNameAsWritten() << "\"";
1237 }
1238
1239 if (C->isParamIndexValid() && !C->isVarArgParam())
1240 OS << " ParamIndex=" << C->getParamIndex();
1241}
1242
1245 if (C->hasParamName()) {
1246 if (C->isPositionValid())
1247 OS << " Param=\"" << C->getParamName(FC) << "\"";
1248 else
1249 OS << " Param=\"" << C->getParamNameAsWritten() << "\"";
1250 }
1251
1252 if (C->isPositionValid()) {
1253 OS << " Position=<";
1254 for (unsigned i = 0, e = C->getDepth(); i != e; ++i) {
1255 OS << C->getIndex(i);
1256 if (i != e - 1)
1257 OS << ", ";
1258 }
1259 OS << ">";
1260 }
1261}
1262
1265 OS << " Name=\"" << getCommandName(C->getCommandID())
1266 << "\""
1267 " CloseName=\""
1268 << C->getCloseName() << "\"";
1269}
1270
1273 const comments::FullComment *) {
1274 OS << " Text=\"" << C->getText() << "\"";
1275}
1276
1279 OS << " Text=\"" << C->getText() << "\"";
1280}
1281
1283 OS << " null";
1284}
1285
1287 OS << " type";
1289}
1290
1292 const TemplateArgument &TA) {
1293 OS << " decl";
1295 dumpDeclRef(TA.getAsDecl());
1296}
1297
1299 OS << " nullptr";
1301}
1302
1304 OS << " integral";
1306}
1307
1309 const TemplateArgument &TA) {
1310 OS << " structural value";
1312}
1313
1315 AddChild(Label, [=] {
1316 {
1318 {
1319 llvm::raw_svector_ostream SS(Str);
1320 TN.print(SS, PrintPolicy);
1321 }
1322 OS << "'" << Str << "'";
1323
1324 if (Context) {
1325 if (TemplateName CanonTN = Context->getCanonicalTemplateName(TN);
1326 CanonTN != TN) {
1327 llvm::SmallString<128> CanonStr;
1328 {
1329 llvm::raw_svector_ostream SS(CanonStr);
1330 CanonTN.print(SS, PrintPolicy);
1331 }
1332 if (CanonStr != Str)
1333 OS << ":'" << CanonStr << "'";
1334 }
1335 }
1336 }
1338 });
1339}
1340
1342 switch (TN.getKind()) {
1344 AddChild([=] { Visit(TN.getAsTemplateDecl()); });
1345 return;
1347 const UsingShadowDecl *USD = TN.getAsUsingShadowDecl();
1348 AddChild([=] { Visit(USD); });
1349 AddChild("target", [=] { Visit(USD->getTargetDecl()); });
1350 return;
1351 }
1353 OS << " qualified";
1355 if (QTN->hasTemplateKeyword())
1356 OS << " keyword";
1359 return;
1360 }
1362 OS << " dependent";
1365 return;
1366 }
1368 OS << " subst";
1371 OS << " index " << STS->getIndex();
1373 OS << " pack_index " << *PackIndex;
1374 if (STS->getFinal())
1375 OS << " final";
1376 if (const TemplateTemplateParmDecl *P = STS->getParameter())
1377 AddChild("parameter", [=] { Visit(P); });
1378 dumpDeclRef(STS->getAssociatedDecl(), "associated");
1379 dumpTemplateName(STS->getReplacement(), "replacement");
1380 return;
1381 }
1383 OS << " deduced";
1385 dumpTemplateName(DTS->getUnderlying(), "underlying");
1386 AddChild("defaults", [=] {
1387 auto [StartPos, Args] = DTS->getDefaultArguments();
1388 OS << " start " << StartPos;
1389 for (const TemplateArgument &Arg : Args)
1390 AddChild([=] { Visit(Arg, SourceRange()); });
1391 });
1392 return;
1393 }
1395 OS << " pack_indexing";
1397 if (PI->isFullySubstituted())
1398 OS << " fully_substituted";
1399 if (UnsignedOrNone Index = PI->getSelectedIndex())
1400 OS << " index " << *Index;
1401 dumpTemplateName(PI->getPattern(), "pattern");
1402 AddChild("index", [=] { Visit(PI->getIndexExpr()); });
1403 for (TemplateName Expansion : PI->getExpansions())
1404 dumpTemplateName(Expansion, "expansion");
1405 return;
1406 }
1407 // FIXME: Implement these.
1409 OS << " overloaded";
1410 return;
1412 OS << " assumed";
1413 return;
1415 OS << " subst_pack";
1416 return;
1417 }
1418 llvm_unreachable("Unexpected TemplateName Kind");
1419}
1420
1426
1433
1435 const TemplateArgument &TA) {
1436 OS << " expr";
1437 if (TA.isCanonicalExpr())
1438 OS << " canonical";
1440}
1441
1443 OS << " pack";
1445}
1446
1447static void dumpBasePath(raw_ostream &OS, const CastExpr *Node) {
1448 if (Node->path_empty())
1449 return;
1450
1451 OS << " (";
1452 bool First = true;
1454 E = Node->path_end();
1455 I != E; ++I) {
1456 const CXXBaseSpecifier *Base = *I;
1457 if (!First)
1458 OS << " -> ";
1459
1460 const auto *RD = cast<CXXRecordDecl>(
1461 Base->getType()->castAsCanonical<RecordType>()->getDecl());
1462
1463 if (Base->isVirtual())
1464 OS << "virtual ";
1465 OS << RD->getName();
1466 First = false;
1467 }
1468
1469 OS << ')';
1470}
1471
1473 switch (ND->getFormalLinkage()) {
1474 case Linkage::None:
1475 // A lot of declarations have no linkage, so we only dump linkage if there
1476 // is one.
1477 break;
1478 case Linkage::Internal:
1479 OS << " internal-linkage";
1480 break;
1481 case Linkage::External:
1482 OS << " external-linkage";
1483 break;
1484 case Linkage::Module:
1485 OS << " module-linkage";
1486 break;
1487 case Linkage::Invalid:
1488 llvm_unreachable("Linkage hasn't been computed!");
1491 llvm_unreachable("Not a formal linkage!");
1492 }
1493
1494 switch (ND->getVisibility()) {
1496 // A lot of declarations have default visibility, so we only dump other
1497 // kinds of visibility.
1498 break;
1500 OS << " hidden-visibility";
1501 break;
1503 OS << " protected-visibility";
1504 break;
1505 }
1506}
1507
1509 if (!Node->hasLabelTarget())
1510 return;
1511
1512 OS << " '" << Node->getLabelDecl()->getIdentifier()->getName() << "' (";
1513
1514 auto *Target = Node->getNamedLoopOrSwitch();
1515 if (!Target) {
1516 ColorScope Color(OS, ShowColors, ASTDumpColor::Null);
1517 OS << "<<<NULL>>>";
1518 } else {
1519 {
1520 ColorScope Color(OS, ShowColors, ASTDumpColor::Stmt);
1521 OS << Target->getStmtClassName();
1522 }
1524 }
1525 OS << ")";
1526}
1527
1529 if (Node->hasInitStorage())
1530 OS << " has_init";
1531 if (Node->hasVarStorage())
1532 OS << " has_var";
1533 if (Node->hasElseStorage())
1534 OS << " has_else";
1535 if (Node->isConstexpr())
1536 OS << " constexpr";
1537 if (Node->isConsteval()) {
1538 OS << " ";
1539 if (Node->isNegatedConsteval())
1540 OS << "!";
1541 OS << "consteval";
1542 }
1543}
1544
1546 if (Node->hasInitStorage())
1547 OS << " has_init";
1548 if (Node->hasVarStorage())
1549 OS << " has_var";
1550}
1551
1553 if (Node->hasVarStorage())
1554 OS << " has_var";
1555}
1556
1558 OS << " '" << Node->getName() << "'";
1559 if (Node->isSideEntry())
1560 OS << " side_entry";
1561}
1562
1564 OS << " '" << Node->getLabel()->getName() << "'";
1565 dumpPointer(Node->getLabel());
1566}
1567
1569 if (Node->caseStmtIsGNURange())
1570 OS << " gnu_range";
1571}
1572
1574 if (const VarDecl *Cand = Node->getNRVOCandidate()) {
1575 OS << " nrvo_candidate(";
1576 dumpBareDeclRef(Cand);
1577 OS << ")";
1578 }
1579}
1580
1582 if (Node->isImplicit())
1583 OS << " implicit";
1584}
1585
1587 if (Node->isImplicit())
1588 OS << " implicit";
1589}
1590
1592 const CXXExpansionStmtPattern *Node) {
1593 switch (Node->getKind()) {
1595 OS << " enumerating";
1596 return;
1598 OS << " iterating";
1599 return;
1601 OS << " destructuring";
1602 return;
1604 OS << " dependent";
1605 return;
1606 }
1607
1608 llvm_unreachable("invalid expansion statement kind");
1609}
1610
1612 const CXXExpansionStmtInstantiation *Node) {
1614 OS << " applies_lifetime_extension";
1615}
1616
1618 if (Node->hasAPValueResult())
1619 AddChild("value",
1620 [=] { Visit(Node->getAPValueResult(), Node->getType()); });
1621}
1622
1624 if (Node->usesADL())
1625 OS << " adl";
1626 if (Node->hasStoredFPFeatures())
1627 printFPOptions(Node->getFPFeatures());
1628}
1629
1631 const char *OperatorSpelling = clang::getOperatorSpelling(Node->getOperator());
1632 if (OperatorSpelling)
1633 OS << " '" << OperatorSpelling << "'";
1634
1635 VisitCallExpr(Node);
1636}
1637
1639 OS << " <";
1640 {
1641 ColorScope Color(OS, ShowColors, ASTDumpColor::Cast);
1642 OS << Node->getCastKindName();
1643 }
1644 dumpBasePath(OS, Node);
1645 OS << ">";
1646 if (Node->hasStoredFPFeatures())
1647 printFPOptions(Node->getFPFeatures());
1648}
1649
1651 VisitCastExpr(Node);
1652 if (Node->isPartOfExplicitCast())
1653 OS << " part_of_explicit_cast";
1654}
1655
1657 OS << " ";
1658 dumpBareDeclRef(Node->getDecl());
1660 if (Node->getDecl() != Node->getFoundDecl()) {
1661 OS << " (";
1663 OS << ")";
1664 }
1665 switch (Node->isNonOdrUse()) {
1666 case NOUR_None: break;
1667 case NOUR_Unevaluated: OS << " non_odr_use_unevaluated"; break;
1668 case NOUR_Constant: OS << " non_odr_use_constant"; break;
1669 case NOUR_Discarded: OS << " non_odr_use_discarded"; break;
1670 }
1672 OS << " dependent_capture";
1673 else if (Node->refersToEnclosingVariableOrCapture())
1674 OS << " refers_to_enclosing_variable_or_capture";
1675
1676 if (Node->isImmediateEscalating())
1677 OS << " immediate-escalating";
1678}
1679
1685
1687 const DependentTemplateIdExpr *Node) {
1688 OS << (Node->isConceptReference() ? " concept" : " variable template");
1689 dumpTemplateName(Node->getTemplateName(), "name");
1690}
1691
1693 const UnresolvedLookupExpr *Node) {
1694 OS << " (";
1695 if (!Node->requiresADL())
1696 OS << "no ";
1697 OS << "ADL) = '" << Node->getName() << '\'';
1698
1700 E = Node->decls_end();
1701 if (I == E)
1702 OS << " empty";
1703 for (; I != E; ++I)
1704 dumpPointer(*I);
1705}
1706
1708 {
1709 ColorScope Color(OS, ShowColors, ASTDumpColor::DeclKindName);
1710 OS << " " << Node->getDecl()->getDeclKindName() << "Decl";
1711 }
1712 OS << "='" << *Node->getDecl() << "'";
1713 dumpPointer(Node->getDecl());
1714 if (Node->isFreeIvar())
1715 OS << " isFreeIvar";
1716}
1717
1722
1726
1728 ColorScope Color(OS, ShowColors, ASTDumpColor::Value);
1729 OS << " " << Node->getValue();
1730}
1731
1733 bool isSigned = Node->getType()->isSignedIntegerType();
1734 ColorScope Color(OS, ShowColors, ASTDumpColor::Value);
1735 OS << " " << toString(Node->getValue(), 10, isSigned);
1736}
1737
1739 ColorScope Color(OS, ShowColors, ASTDumpColor::Value);
1740 OS << " " << Node->getValueAsString(/*Radix=*/10);
1741}
1742
1744 ColorScope Color(OS, ShowColors, ASTDumpColor::Value);
1745 OS << " " << Node->getValueAsApproximateDouble();
1746}
1747
1749 ColorScope Color(OS, ShowColors, ASTDumpColor::Value);
1750 OS << " ";
1751 Str->outputString(OS);
1752}
1753
1755 if (auto *Field = ILE->getInitializedFieldInUnion()) {
1756 OS << " field ";
1757 dumpBareDeclRef(Field);
1758 }
1759 OS << ' ' << (ILE->isExplicit() ? "explicit" : "implicit");
1760}
1761
1763 if (E->isResultDependent())
1764 OS << " result_dependent";
1765}
1766
1768 OS << " " << (Node->isPostfix() ? "postfix" : "prefix") << " '"
1769 << UnaryOperator::getOpcodeStr(Node->getOpcode()) << "'";
1770 if (!Node->canOverflow())
1771 OS << " cannot overflow";
1772 if (Node->hasStoredFPFeatures())
1773 printFPOptions(Node->getStoredFPFeatures());
1774}
1775
1777 const UnaryExprOrTypeTraitExpr *Node) {
1778 OS << " " << getTraitSpelling(Node->getKind());
1779
1780 if (Node->isArgumentType())
1781 dumpType(Node->getArgumentType());
1782}
1783
1785 OS << " " << (Node->isArrow() ? "->" : ".") << *Node->getMemberDecl();
1786 dumpPointer(Node->getMemberDecl());
1788 switch (Node->isNonOdrUse()) {
1789 case NOUR_None: break;
1790 case NOUR_Unevaluated: OS << " non_odr_use_unevaluated"; break;
1791 case NOUR_Constant: OS << " non_odr_use_constant"; break;
1792 case NOUR_Discarded: OS << " non_odr_use_discarded"; break;
1793 }
1794}
1795
1797 const ExtVectorElementExpr *Node) {
1798 OS << " " << Node->getAccessor().getNameStart();
1799}
1800
1802 OS << " " << Node->getAccessor().getNameStart();
1803}
1804
1806 OS << " '" << BinaryOperator::getOpcodeStr(Node->getOpcode()) << "'";
1807 if (Node->hasStoredFPFeatures())
1808 printFPOptions(Node->getStoredFPFeatures());
1809}
1810
1812 const CompoundAssignOperator *Node) {
1813 OS << " '" << BinaryOperator::getOpcodeStr(Node->getOpcode())
1814 << "' ComputeLHSTy=";
1816 OS << " ComputeResultTy=";
1818 if (Node->hasStoredFPFeatures())
1819 printFPOptions(Node->getStoredFPFeatures());
1820}
1821
1823 OS << " " << Node->getLabel()->getName();
1824 dumpPointer(Node->getLabel());
1825}
1826
1828 OS << " " << Node->getCastName() << "<"
1829 << Node->getTypeAsWritten().getAsString() << ">"
1830 << " <" << Node->getCastKindName();
1831 dumpBasePath(OS, Node);
1832 OS << ">";
1833}
1834
1836 OS << " " << (Node->getValue() ? "true" : "false");
1837}
1838
1840 if (Node->isImplicit())
1841 OS << " implicit";
1843 OS << " dependent_capture";
1844 OS << " this";
1845}
1846
1848 const CXXFunctionalCastExpr *Node) {
1849 OS << " functional cast to " << Node->getTypeAsWritten().getAsString() << " <"
1850 << Node->getCastKindName() << ">";
1851 if (Node->hasStoredFPFeatures())
1852 printFPOptions(Node->getFPFeatures());
1853}
1854
1857 if (Node->hasStoredFPFeatures())
1858 printFPOptions(Node->getFPFeatures());
1859}
1860
1862 const CXXUnresolvedConstructExpr *Node) {
1863 dumpType(Node->getTypeAsWritten());
1864 if (Node->isListInitialization())
1865 OS << " list";
1866}
1867
1869 CXXConstructorDecl *Ctor = Node->getConstructor();
1870 dumpType(Ctor->getType());
1871 if (Node->isElidable())
1872 OS << " elidable";
1873 if (Node->isListInitialization())
1874 OS << " list";
1875 if (Node->isStdInitListInitialization())
1876 OS << " std::initializer_list";
1877 if (Node->requiresZeroInitialization())
1878 OS << " zeroing";
1879 if (Node->isImmediateEscalating())
1880 OS << " immediate-escalating";
1881}
1882
1884 const CXXBindTemporaryExpr *Node) {
1885 OS << " (CXXTemporary";
1886 dumpPointer(Node);
1887 OS << ")";
1888}
1889
1891 if (Node->isGlobalNew())
1892 OS << " global";
1893 if (Node->isArray())
1894 OS << " array";
1895 if (Node->getOperatorNew()) {
1896 OS << ' ';
1898 }
1899 // We could dump the deallocation function used in case of error, but it's
1900 // usually not that interesting.
1901}
1902
1904 if (Node->isGlobalDelete())
1905 OS << " global";
1906 if (Node->isArrayForm())
1907 OS << " array";
1908 if (Node->getOperatorDelete()) {
1909 OS << ' ';
1911 }
1912}
1913
1915 OS << " " << getTraitSpelling(Node->getTrait());
1916}
1917
1919 OS << " " << getTraitSpelling(Node->getTrait());
1920}
1921
1925
1927 if (Node->hasRewrittenInit())
1928 OS << " has rewritten init";
1929}
1930
1932 if (Node->hasRewrittenInit())
1933 OS << " has rewritten init";
1934}
1935
1937 const MaterializeTemporaryExpr *Node) {
1938 if (const ValueDecl *VD = Node->getExtendingDecl()) {
1939 OS << " extended by ";
1940 dumpBareDeclRef(VD);
1941 }
1942}
1943
1945 for (unsigned i = 0, e = Node->getNumObjects(); i != e; ++i)
1946 dumpCleanupObject(Node->getObject(i));
1947}
1948
1950 dumpPointer(Node->getPack());
1951 dumpName(Node->getPack());
1952}
1953
1955 const CXXDependentScopeMemberExpr *Node) {
1956 OS << " " << (Node->isArrow() ? "->" : ".") << Node->getMember();
1957}
1958
1960 OS << " selector=";
1961 Node->getSelector().print(OS);
1962 switch (Node->getReceiverKind()) {
1964 break;
1965
1967 OS << " class=";
1969 break;
1970
1972 OS << " super (instance)";
1973 break;
1974
1976 OS << " super (class)";
1977 break;
1978 }
1979}
1980
1982 if (auto *BoxingMethod = Node->getBoxingMethod()) {
1983 OS << " selector=";
1984 BoxingMethod->getSelector().print(OS);
1985 }
1986}
1987
1989 if (!Node->getCatchParamDecl())
1990 OS << " catch all";
1991}
1992
1996
1998 OS << " ";
1999 Node->getSelector().print(OS);
2000}
2001
2003 OS << ' ' << *Node->getProtocol();
2004}
2005
2007 if (Node->isImplicitProperty()) {
2008 OS << " Kind=MethodRef Getter=\"";
2009 if (Node->getImplicitPropertyGetter())
2011 else
2012 OS << "(null)";
2013
2014 OS << "\" Setter=\"";
2015 if (ObjCMethodDecl *Setter = Node->getImplicitPropertySetter())
2016 Setter->getSelector().print(OS);
2017 else
2018 OS << "(null)";
2019 OS << "\"";
2020 } else {
2021 OS << " Kind=PropertyRef Property=\"" << *Node->getExplicitProperty()
2022 << '"';
2023 }
2024
2025 if (Node->isSuperReceiver())
2026 OS << " super";
2027
2028 OS << " Messaging=";
2029 if (Node->isMessagingGetter() && Node->isMessagingSetter())
2030 OS << "Getter&Setter";
2031 else if (Node->isMessagingGetter())
2032 OS << "Getter";
2033 else if (Node->isMessagingSetter())
2034 OS << "Setter";
2035}
2036
2038 const ObjCSubscriptRefExpr *Node) {
2039 if (Node->isArraySubscriptRefExpr())
2040 OS << " Kind=ArraySubscript GetterForArray=\"";
2041 else
2042 OS << " Kind=DictionarySubscript GetterForDictionary=\"";
2043 if (Node->getAtIndexMethodDecl())
2044 Node->getAtIndexMethodDecl()->getSelector().print(OS);
2045 else
2046 OS << "(null)";
2047
2048 if (Node->isArraySubscriptRefExpr())
2049 OS << "\" SetterForArray=\"";
2050 else
2051 OS << "\" SetterForDictionary=\"";
2052 if (Node->setAtIndexMethodDecl())
2053 Node->setAtIndexMethodDecl()->getSelector().print(OS);
2054 else
2055 OS << "(null)";
2056}
2057
2059 OS << " " << (Node->getValue() ? "__objc_yes" : "__objc_no");
2060}
2061
2063 OS << " ";
2064 for (unsigned I = 0, E = Node->numOfIterators(); I < E; ++I) {
2065 Visit(Node->getIteratorDecl(I));
2066 OS << " = ";
2067 const OMPIteratorExpr::IteratorRange Range = Node->getIteratorRange(I);
2068 OS << " begin ";
2069 Visit(Range.Begin);
2070 OS << " end ";
2071 Visit(Range.End);
2072 if (Range.Step) {
2073 OS << " step ";
2074 Visit(Range.Step);
2075 }
2076 }
2077}
2078
2084
2086 const RequiresExpr *Node) {
2087 if (!Node->isValueDependent())
2088 OS << (Node->isSatisfied() ? " satisfied" : " unsatisfied");
2089}
2090
2092 if (T->isSpelledAsLValue())
2093 OS << " written as lvalue reference";
2094}
2095
2097 switch (T->getSizeModifier()) {
2099 break;
2101 OS << " static";
2102 break;
2104 OS << " *";
2105 break;
2106 }
2107 OS << " " << T->getIndexTypeQualifiers().getAsString();
2108}
2109
2111 OS << " " << T->getSize();
2113}
2114
2118
2123
2126 OS << " ";
2127 dumpLocation(T->getAttributeLoc());
2128}
2129
2131 switch (T->getVectorKind()) {
2133 break;
2135 OS << " altivec";
2136 break;
2138 OS << " altivec pixel";
2139 break;
2141 OS << " altivec bool";
2142 break;
2143 case VectorKind::Neon:
2144 OS << " neon";
2145 break;
2147 OS << " neon poly";
2148 break;
2150 OS << " fixed-length sve data vector";
2151 break;
2153 OS << " fixed-length sve predicate vector";
2154 break;
2156 OS << " fixed-length rvv data vector";
2157 break;
2162 OS << " fixed-length rvv mask vector";
2163 break;
2164 }
2165 OS << " " << T->getNumElements();
2166}
2167
2169 auto EI = T->getExtInfo();
2170 if (EI.getNoReturn())
2171 OS << " noreturn";
2172 if (EI.getProducesResult())
2173 OS << " produces_result";
2174 if (EI.getHasRegParm())
2175 OS << " regparm " << EI.getRegParm();
2176 OS << " " << FunctionType::getNameForCallConv(EI.getCC());
2177}
2178
2180 auto EPI = T->getExtProtoInfo();
2181 if (EPI.HasTrailingReturn)
2182 OS << " trailing_return";
2183 if (T->isConst())
2184 OS << " const";
2185 if (T->isVolatile())
2186 OS << " volatile";
2187 if (T->isRestrict())
2188 OS << " restrict";
2189 if (T->getExtProtoInfo().Variadic)
2190 OS << " variadic";
2191 switch (EPI.RefQualifier) {
2192 case RQ_None:
2193 break;
2194 case RQ_LValue:
2195 OS << " &";
2196 break;
2197 case RQ_RValue:
2198 OS << " &&";
2199 break;
2200 }
2201
2202 switch (EPI.ExceptionSpec.Type) {
2203 case EST_None:
2204 break;
2205 case EST_DynamicNone:
2206 OS << " exceptionspec_dynamic_none";
2207 break;
2208 case EST_Dynamic:
2209 OS << " exceptionspec_dynamic";
2210 break;
2211 case EST_MSAny:
2212 OS << " exceptionspec_ms_any";
2213 break;
2214 case EST_NoThrow:
2215 OS << " exceptionspec_nothrow";
2216 break;
2217 case EST_BasicNoexcept:
2218 OS << " exceptionspec_basic_noexcept";
2219 break;
2221 OS << " exceptionspec_dependent_noexcept";
2222 break;
2223 case EST_NoexceptFalse:
2224 OS << " exceptionspec_noexcept_false";
2225 break;
2226 case EST_NoexceptTrue:
2227 OS << " exceptionspec_noexcept_true";
2228 break;
2229 case EST_Unevaluated:
2230 OS << " exceptionspec_unevaluated";
2231 break;
2232 case EST_Uninstantiated:
2233 OS << " exceptionspec_uninstantiated";
2234 break;
2235 case EST_Unparsed:
2236 OS << " exceptionspec_unparsed";
2237 break;
2238 }
2239 if (!EPI.ExceptionSpec.Exceptions.empty()) {
2240 AddChild([=] {
2241 OS << "Exceptions:";
2242 for (unsigned I = 0, N = EPI.ExceptionSpec.Exceptions.size(); I != N;
2243 ++I) {
2244 if (I)
2245 OS << ",";
2246 dumpType(EPI.ExceptionSpec.Exceptions[I]);
2247 }
2248 });
2249 }
2250 if (EPI.ExceptionSpec.NoexceptExpr) {
2251 AddChild([=] {
2252 OS << "NoexceptExpr: ";
2253 Visit(EPI.ExceptionSpec.NoexceptExpr);
2254 });
2255 }
2256 dumpDeclRef(EPI.ExceptionSpec.SourceDecl, "ExceptionSourceDecl");
2257 dumpDeclRef(EPI.ExceptionSpec.SourceTemplate, "ExceptionSourceTemplate");
2258
2259 // FIXME: Consumed parameters.
2261}
2262
2264 if (ElaboratedTypeKeyword K = T->getKeyword();
2266 OS << ' ' << TypeWithKeyword::getKeywordName(K);
2267 dumpNestedNameSpecifier(T->getQualifier());
2268 dumpDeclRef(T->getDecl());
2269}
2270
2272 if (ElaboratedTypeKeyword K = T->getKeyword();
2274 OS << ' ' << TypeWithKeyword::getKeywordName(K);
2275 dumpNestedNameSpecifier(T->getQualifier());
2276 dumpDeclRef(T->getDecl());
2277 dumpType(T->desugar());
2278}
2279
2281 if (ElaboratedTypeKeyword K = T->getKeyword();
2283 OS << ' ' << TypeWithKeyword::getKeywordName(K);
2284 dumpNestedNameSpecifier(T->getQualifier());
2285 dumpDeclRef(T->getDecl());
2286 if (!T->typeMatchesDecl()) {
2287 OS << " divergent";
2288 dumpType(T->desugar());
2289 }
2290}
2291
2292void TextNodeDumper::VisitUnaryTransformType(const UnaryTransformType *T) {
2293 switch (T->getUTTKind()) {
2294#define TRANSFORM_TYPE_TRAIT_DEF(Enum, Trait) \
2295 case UnaryTransformType::Enum: \
2296 OS << " " #Trait; \
2297 break;
2298#include "clang/Basic/BuiltinTraits.inc"
2299 }
2300}
2301
2302void TextNodeDumper::VisitTagType(const TagType *T) {
2303 if (T->isCanonicalUnqualified())
2304 OS << " canonical";
2305 if (T->isTagOwned())
2306 OS << " owns_tag";
2307 if (T->isInjected())
2308 OS << " injected";
2309 if (ElaboratedTypeKeyword K = T->getKeyword();
2311 OS << ' ' << TypeWithKeyword::getKeywordName(K);
2312 dumpNestedNameSpecifier(T->getQualifier());
2313 dumpDeclRef(T->getDecl());
2314}
2315
2316void TextNodeDumper::VisitTemplateTypeParmType(const TemplateTypeParmType *T) {
2317 OS << " depth " << T->getDepth() << " index " << T->getIndex();
2318 if (T->isParameterPack())
2319 OS << " pack";
2320 dumpDeclRef(T->getDecl());
2321}
2322
2324 const SubstTemplateTypeParmType *T) {
2325 dumpDeclRef(T->getAssociatedDecl());
2326 VisitTemplateTypeParmDecl(T->getReplacedParameter());
2327 if (auto PackIndex = T->getPackIndex())
2328 OS << " pack_index " << *PackIndex;
2329 if (T->getFinal())
2330 OS << " final";
2331}
2332
2334 const SubstTemplateTypeParmPackType *T) {
2335 dumpDeclRef(T->getAssociatedDecl());
2336 VisitTemplateTypeParmDecl(T->getReplacedParameter());
2337}
2338
2339void TextNodeDumper::VisitDeducedType(const DeducedType *T) {
2340 switch (T->getDeducedKind()) {
2342 OS << " undeduced";
2343 break;
2345 break;
2347 OS << " deduced-as-dependent";
2348 break;
2350 OS << " deduced-as-pack";
2351 break;
2352 }
2353}
2354
2355void TextNodeDumper::VisitAutoType(const AutoType *T) {
2357 // Not necessary to dump the keyword since it's spelled plainly in the printed
2358 // type anyway.
2359 if (T->isConstrained())
2360 AddChild([=] { dumpBareConcept(T->getTypeConstraintConcept()); });
2361}
2362
2364 const DeducedTemplateSpecializationType *T) {
2366 dumpTemplateName(T->getTemplateName(), "name");
2367}
2368
2370 const TemplateSpecializationType *T) {
2371 if (T->isTypeAlias())
2372 OS << " alias";
2373 if (ElaboratedTypeKeyword K = T->getKeyword();
2375 OS << ' ' << TypeWithKeyword::getKeywordName(K);
2376 dumpTemplateName(T->getTemplateName(), "name");
2377}
2378
2380 const InjectedClassNameType *T) {
2381 dumpDeclRef(T->getDecl());
2382}
2383
2387
2388void TextNodeDumper::VisitPackExpansionType(const PackExpansionType *T) {
2389 if (auto N = T->getNumExpansions())
2390 OS << " expansions " << *N;
2391}
2392
2394 // By default, add extra Type details with no extra loc info.
2396}
2397// FIXME: override behavior for TypeLocs that have interesting location
2398// information, such as the qualifier in ElaboratedTypeLoc.
2399
2401
2403 dumpName(D);
2405 if (D->isModulePrivate())
2406 OS << " __module_private__";
2407
2408 const TagDecl *TD = D->getUnderlyingType()->getAsTagDecl();
2409 if (TD && TD->getTypedefNameForAnonDecl()) {
2411 }
2412}
2413
2415 if (D->isScoped()) {
2416 if (D->isScopedUsingClassTag())
2417 OS << " class";
2418 else
2419 OS << " struct";
2420 }
2421 dumpName(D);
2422 if (D->isModulePrivate())
2423 OS << " __module_private__";
2424 if (D->isFixed())
2426
2427 if (const auto *Instance = D->getTemplateInstantiationPattern()) {
2428 OS << " instantiated_from";
2429 dumpPointer(Instance);
2430 }
2431
2433}
2434
2436 OS << ' ' << D->getKindName();
2437 dumpName(D);
2438 if (D->isModulePrivate())
2439 OS << " __module_private__";
2440 if (D->isCompleteDefinition())
2441 OS << " definition";
2442
2443 if (!D->isImplicit() && !D->getDescribedTemplate()) {
2445 }
2446}
2447
2452
2454 dumpName(D);
2455 dumpType(D->getType());
2456
2457 for (const auto *Child : D->chain())
2458 dumpDeclRef(Child);
2459}
2460
2462 dumpName(D);
2463 dumpType(D->getType());
2465
2466 StorageClass SC = D->getStorageClass();
2467 if (SC != SC_None)
2469 if (D->isInlineSpecified())
2470 OS << " inline";
2471 if (D->isVirtualAsWritten())
2472 OS << " virtual";
2473 if (D->isModulePrivate())
2474 OS << " __module_private__";
2475
2476 if (D->isPureVirtual())
2477 OS << " pure";
2478 if (D->isDefaulted()) {
2479 OS << " default";
2480 if (D->isDeleted())
2481 OS << "_delete";
2482 }
2483 if (D->isDeletedAsWritten())
2484 OS << " delete";
2485 if (D->isTrivial())
2486 OS << " trivial";
2487
2488 if (const StringLiteral *M = D->getDeletedMessage())
2489 AddChild("delete message", [=] { Visit(M); });
2490
2492 OS << (isa<CXXDestructorDecl>(D) ? " not_selected" : " ineligible");
2493
2494 if (const auto *FPT = D->getType()->getAs<FunctionProtoType>()) {
2495 FunctionProtoType::ExtProtoInfo EPI = FPT->getExtProtoInfo();
2496 switch (EPI.ExceptionSpec.Type) {
2497 default:
2498 break;
2499 case EST_Unevaluated:
2500 OS << " noexcept-unevaluated " << EPI.ExceptionSpec.SourceDecl;
2501 break;
2502 case EST_Uninstantiated:
2503 OS << " noexcept-uninstantiated " << EPI.ExceptionSpec.SourceTemplate;
2504 break;
2505 }
2506 }
2507
2508 if (const auto *MD = dyn_cast<CXXMethodDecl>(D)) {
2509 if (MD->size_overridden_methods() != 0) {
2510 auto dumpOverride = [=](const CXXMethodDecl *D) {
2511 SplitQualType T_split = D->getType().split();
2512 OS << D << " " << D->getParent()->getName() << "::" << D->getDeclName()
2513 << " '" << QualType::getAsString(T_split, PrintPolicy) << "'";
2514 };
2515
2516 AddChild([=] {
2517 auto Overrides = MD->overridden_methods();
2518 OS << "Overrides: [ ";
2519 dumpOverride(*Overrides.begin());
2520 for (const auto *Override : llvm::drop_begin(Overrides)) {
2521 OS << ", ";
2522 dumpOverride(Override);
2523 }
2524 OS << " ]";
2525 });
2526 }
2527 }
2528
2529 if (!D->isInlineSpecified() && D->isInlined()) {
2530 OS << " implicit-inline";
2531 }
2532 // Since NumParams comes from the FunctionProtoType of the FunctionDecl and
2533 // the Params are set later, it is possible for a dump during debugging to
2534 // encounter a FunctionDecl that has been created but hasn't been assigned
2535 // ParmVarDecls yet.
2536 if (!D->param_empty() && !D->param_begin())
2537 OS << " <<<NULL params x " << D->getNumParams() << ">>>";
2538
2539 if (const auto *Instance = D->getTemplateInstantiationPattern()) {
2540 OS << " instantiated_from";
2541 dumpPointer(Instance);
2542 }
2543
2546 }
2547}
2548
2550 const CXXDeductionGuideDecl *D) {
2552 switch (D->getDeductionCandidateKind()) {
2555 return;
2557 OS << " aggregate ";
2558 break;
2559 }
2560}
2561
2564 OS << " extended by ";
2566 OS << " mangling ";
2567 {
2568 ColorScope Color(OS, ShowColors, ASTDumpColor::Value);
2569 OS << D->getManglingNumber();
2570 }
2571}
2572
2574 dumpName(D);
2575 dumpType(D->getType());
2576 if (D->isMutable())
2577 OS << " mutable";
2578 if (D->isModulePrivate())
2579 OS << " __module_private__";
2580}
2581
2584 dumpName(D);
2585 if (const auto *P = dyn_cast<ParmVarDecl>(D);
2586 P && P->isExplicitObjectParameter())
2587 OS << " this";
2588
2589 dumpType(D->getType());
2591 StorageClass SC = D->getStorageClass();
2592 if (SC != SC_None)
2594 switch (D->getTLSKind()) {
2595 case VarDecl::TLS_None:
2596 break;
2598 OS << " tls";
2599 break;
2601 OS << " tls_dynamic";
2602 break;
2603 }
2604 if (D->isModulePrivate())
2605 OS << " __module_private__";
2606 if (D->isNRVOVariable())
2607 OS << " nrvo";
2608 if (D->isInline())
2609 OS << " inline";
2610 if (D->isConstexpr())
2611 OS << " constexpr";
2612 if (D->hasInit()) {
2613 switch (D->getInitStyle()) {
2614 case VarDecl::CInit:
2615 OS << " cinit";
2616 break;
2617 case VarDecl::CallInit:
2618 OS << " callinit";
2619 break;
2620 case VarDecl::ListInit:
2621 OS << " listinit";
2622 break;
2624 OS << " parenlistinit";
2625 }
2626 }
2627 if (D->needsDestruction(D->getASTContext()))
2628 OS << " destroyed";
2629 if (D->isParameterPack())
2630 OS << " pack";
2631
2632 if (const auto *Instance = D->getTemplateInstantiationPattern()) {
2633 OS << " instantiated_from";
2634 dumpPointer(Instance);
2635 }
2636
2637 if (D->hasInit()) {
2638 const Expr *E = D->getInit();
2639 // Only dump the value of constexpr VarDecls for now.
2640 if (E && !E->isValueDependent() && D->isConstexpr() &&
2641 !D->getType()->isDependentType()) {
2642 const APValue *Value = D->evaluateValue();
2643 if (Value)
2644 AddChild("value", [=] { Visit(*Value, E->getType()); });
2645 }
2646 }
2647
2648 if (!D->getDescribedVarTemplate()) {
2650 }
2651}
2652
2654 dumpName(D);
2655 dumpType(D->getType());
2656}
2657
2659 if (D->isNothrow())
2660 OS << " nothrow";
2661}
2662
2664 OS << ' ' << D->getImportedModule()->getFullModuleName();
2665
2666 for (Decl *InitD :
2668 dumpDeclRef(InitD, "initializer");
2669}
2670
2672 OS << ' ';
2673 switch (D->getCommentKind()) {
2674 case PCK_Unknown:
2675 llvm_unreachable("unexpected pragma comment kind");
2676 case PCK_Compiler:
2677 OS << "compiler";
2678 break;
2679 case PCK_ExeStr:
2680 OS << "exestr";
2681 break;
2682 case PCK_Lib:
2683 OS << "lib";
2684 break;
2685 case PCK_Linker:
2686 OS << "linker";
2687 break;
2688 case PCK_User:
2689 OS << "user";
2690 break;
2691 case PCK_Copyright:
2692 OS << "copyright";
2693 break;
2694 }
2695 StringRef Arg = D->getArg();
2696 if (!Arg.empty())
2697 OS << " \"" << Arg << "\"";
2698}
2699
2701 const PragmaDetectMismatchDecl *D) {
2702 OS << " \"" << D->getName() << "\" \"" << D->getValue() << "\"";
2703}
2704
2706 const OMPExecutableDirective *D) {
2707 if (D->isStandaloneDirective())
2708 OS << " openmp_standalone_directive";
2709}
2710
2712 const OMPDeclareReductionDecl *D) {
2713 dumpName(D);
2714 dumpType(D->getType());
2715 OS << " combiner";
2717 if (const auto *Initializer = D->getInitializer()) {
2718 OS << " initializer";
2720 switch (D->getInitializerKind()) {
2722 OS << " omp_priv = ";
2723 break;
2725 OS << " omp_priv ()";
2726 break;
2728 break;
2729 }
2730 }
2731}
2732
2734 for (const auto *C : D->clauselists()) {
2735 AddChild([=] {
2736 if (!C) {
2737 ColorScope Color(OS, ShowColors, ASTDumpColor::Null);
2738 OS << "<<<NULL>>> OMPClause";
2739 return;
2740 }
2741 {
2742 ColorScope Color(OS, ShowColors, ASTDumpColor::Attr);
2743 StringRef ClauseName(
2744 llvm::omp::getOpenMPClauseName(C->getClauseKind()));
2745 OS << "OMP" << ClauseName.substr(/*Start=*/0, /*N=*/1).upper()
2746 << ClauseName.drop_front() << "Clause";
2747 }
2748 dumpPointer(C);
2749 dumpSourceRange(SourceRange(C->getBeginLoc(), C->getEndLoc()));
2750 });
2751 }
2752}
2753
2758
2760 dumpName(D);
2761 if (D->isInline())
2762 OS << " inline";
2763 if (D->isNested())
2764 OS << " nested";
2765 if (!D->isFirstDecl())
2766 dumpDeclRef(D->getFirstDecl(), "original");
2767
2769}
2770
2775
2780
2782 dumpName(D);
2784
2785 const TagDecl *TD = D->getUnderlyingType()->getAsTagDecl();
2786 if (TD && TD->getTypedefNameForAnonDecl()) {
2788 }
2789}
2790
2796
2798 VisitRecordDecl(D);
2799 if (const auto *Instance = D->getTemplateInstantiationPattern()) {
2800 OS << " instantiated_from";
2801 dumpPointer(Instance);
2802 }
2803 if (const auto *CTSD = dyn_cast<ClassTemplateSpecializationDecl>(D)) {
2804 dumpTemplateSpecializationKind(CTSD->getSpecializationKind());
2805 if (CTSD->hasStrictPackMatch())
2806 OS << " strict-pack-match";
2807 }
2808
2810
2811 if (!D->isCompleteDefinition())
2812 return;
2813
2814 AddChild([=] {
2815 {
2816 ColorScope Color(OS, ShowColors, ASTDumpColor::DeclKindName);
2817 OS << "DefinitionData";
2818 }
2819#define FLAG(fn, name) \
2820 if (D->fn()) \
2821 OS << " " #name;
2822 FLAG(isParsingBaseSpecifiers, parsing_base_specifiers);
2823
2824 FLAG(isGenericLambda, generic);
2825 FLAG(isLambda, lambda);
2826
2827 FLAG(isAnonymousStructOrUnion, is_anonymous);
2828 FLAG(canPassInRegisters, pass_in_registers);
2829 FLAG(isEmpty, empty);
2830 FLAG(isAggregate, aggregate);
2831 FLAG(isStandardLayout, standard_layout);
2832 FLAG(isTriviallyCopyable, trivially_copyable);
2833 FLAG(isPOD, pod);
2834 FLAG(isTrivial, trivial);
2835 FLAG(isPolymorphic, polymorphic);
2836 FLAG(isAbstract, abstract);
2837 FLAG(isLiteral, literal);
2838
2839 FLAG(hasUserDeclaredConstructor, has_user_declared_ctor);
2840 FLAG(hasConstexprNonCopyMoveConstructor, has_constexpr_non_copy_move_ctor);
2841 FLAG(hasMutableFields, has_mutable_fields);
2842 FLAG(hasVariantMembers, has_variant_members);
2843 FLAG(allowConstDefaultInit, can_const_default_init);
2844
2845 AddChild([=] {
2846 {
2847 ColorScope Color(OS, ShowColors, ASTDumpColor::DeclKindName);
2848 OS << "DefaultConstructor";
2849 }
2850 FLAG(hasDefaultConstructor, exists);
2851 FLAG(hasTrivialDefaultConstructor, trivial);
2852 FLAG(hasNonTrivialDefaultConstructor, non_trivial);
2853 FLAG(hasUserProvidedDefaultConstructor, user_provided);
2854 FLAG(hasConstexprDefaultConstructor, constexpr);
2855 FLAG(needsImplicitDefaultConstructor, needs_implicit);
2856 FLAG(defaultedDefaultConstructorIsConstexpr, defaulted_is_constexpr);
2857 });
2858
2859 AddChild([=] {
2860 {
2861 ColorScope Color(OS, ShowColors, ASTDumpColor::DeclKindName);
2862 OS << "CopyConstructor";
2863 }
2864 FLAG(hasSimpleCopyConstructor, simple);
2865 FLAG(hasTrivialCopyConstructor, trivial);
2866 FLAG(hasNonTrivialCopyConstructor, non_trivial);
2867 FLAG(hasUserDeclaredCopyConstructor, user_declared);
2868 FLAG(hasCopyConstructorWithConstParam, has_const_param);
2869 FLAG(needsImplicitCopyConstructor, needs_implicit);
2870 FLAG(needsOverloadResolutionForCopyConstructor,
2871 needs_overload_resolution);
2873 FLAG(defaultedCopyConstructorIsDeleted, defaulted_is_deleted);
2874 FLAG(implicitCopyConstructorHasConstParam, implicit_has_const_param);
2875 });
2876
2877 AddChild([=] {
2878 {
2879 ColorScope Color(OS, ShowColors, ASTDumpColor::DeclKindName);
2880 OS << "MoveConstructor";
2881 }
2882 FLAG(hasMoveConstructor, exists);
2883 FLAG(hasSimpleMoveConstructor, simple);
2884 FLAG(hasTrivialMoveConstructor, trivial);
2885 FLAG(hasNonTrivialMoveConstructor, non_trivial);
2886 FLAG(hasUserDeclaredMoveConstructor, user_declared);
2887 FLAG(needsImplicitMoveConstructor, needs_implicit);
2888 FLAG(needsOverloadResolutionForMoveConstructor,
2889 needs_overload_resolution);
2891 FLAG(defaultedMoveConstructorIsDeleted, defaulted_is_deleted);
2892 });
2893
2894 AddChild([=] {
2895 {
2896 ColorScope Color(OS, ShowColors, ASTDumpColor::DeclKindName);
2897 OS << "CopyAssignment";
2898 }
2899 FLAG(hasSimpleCopyAssignment, simple);
2900 FLAG(hasTrivialCopyAssignment, trivial);
2901 FLAG(hasNonTrivialCopyAssignment, non_trivial);
2902 FLAG(hasCopyAssignmentWithConstParam, has_const_param);
2903 FLAG(hasUserDeclaredCopyAssignment, user_declared);
2904 FLAG(needsImplicitCopyAssignment, needs_implicit);
2905 FLAG(needsOverloadResolutionForCopyAssignment, needs_overload_resolution);
2906 FLAG(implicitCopyAssignmentHasConstParam, implicit_has_const_param);
2907 });
2908
2909 AddChild([=] {
2910 {
2911 ColorScope Color(OS, ShowColors, ASTDumpColor::DeclKindName);
2912 OS << "MoveAssignment";
2913 }
2914 FLAG(hasMoveAssignment, exists);
2915 FLAG(hasSimpleMoveAssignment, simple);
2916 FLAG(hasTrivialMoveAssignment, trivial);
2917 FLAG(hasNonTrivialMoveAssignment, non_trivial);
2918 FLAG(hasUserDeclaredMoveAssignment, user_declared);
2919 FLAG(needsImplicitMoveAssignment, needs_implicit);
2920 FLAG(needsOverloadResolutionForMoveAssignment, needs_overload_resolution);
2921 });
2922
2923 AddChild([=] {
2924 {
2925 ColorScope Color(OS, ShowColors, ASTDumpColor::DeclKindName);
2926 OS << "Destructor";
2927 }
2928 FLAG(hasSimpleDestructor, simple);
2929 FLAG(hasIrrelevantDestructor, irrelevant);
2930 FLAG(hasTrivialDestructor, trivial);
2931 FLAG(hasNonTrivialDestructor, non_trivial);
2932 FLAG(hasUserDeclaredDestructor, user_declared);
2933 FLAG(hasConstexprDestructor, constexpr);
2934 FLAG(needsImplicitDestructor, needs_implicit);
2935 FLAG(needsOverloadResolutionForDestructor, needs_overload_resolution);
2937 FLAG(defaultedDestructorIsDeleted, defaulted_is_deleted);
2938 });
2939 });
2940
2941 for (const auto &I : D->bases()) {
2942 AddChild([=] {
2943 if (I.isVirtual())
2944 OS << "virtual ";
2945 dumpAccessSpecifier(I.getAccessSpecifier());
2946 dumpType(I.getType());
2947 if (I.isPackExpansion())
2948 OS << "...";
2949 });
2950 }
2951}
2952
2957
2962
2967
2971
2973 if (const auto *TC = D->getTypeConstraint()) {
2974 OS << ' ';
2975 dumpBareConcept(TC->getNamedConcept());
2976 if (const auto *USD =
2977 dyn_cast_if_present<UsingShadowDecl>(TC->getFoundDecl())) {
2978 OS << " (";
2979 dumpBareDeclRef(USD);
2980 OS << ")";
2981 }
2982 } else if (D->wasDeclaredWithTypename())
2983 OS << " typename";
2984 else
2985 OS << " class";
2986 OS << " depth " << D->getDepth() << " index " << D->getIndex();
2987 if (D->isParameterPack())
2988 OS << " ...";
2989 dumpName(D);
2990}
2991
2993 const NonTypeTemplateParmDecl *D) {
2994 dumpType(D->getType());
2995 OS << " depth " << D->getDepth() << " index " << D->getIndex();
2996 if (D->isParameterPack())
2997 OS << " ...";
2998 dumpName(D);
2999}
3000
3002 const TemplateTemplateParmDecl *D) {
3003 OS << " depth " << D->getDepth() << " index " << D->getIndex();
3004 if (D->isParameterPack())
3005 OS << " ...";
3006 dumpName(D);
3007}
3008
3010 OS << ' ';
3012 OS << D->getDeclName();
3014}
3015
3017 OS << ' ';
3019}
3020
3022 const UnresolvedUsingTypenameDecl *D) {
3023 OS << ' ';
3025 OS << D->getDeclName();
3026}
3027
3029 const UnresolvedUsingValueDecl *D) {
3030 OS << ' ';
3032 OS << D->getDeclName();
3033 dumpType(D->getType());
3034}
3035
3040
3042 const ConstructorUsingShadowDecl *D) {
3043 if (D->constructsVirtualBase())
3044 OS << " virtual";
3045
3046 AddChild([=] {
3047 OS << "target ";
3049 });
3050
3051 AddChild([=] {
3052 OS << "nominated ";
3054 OS << ' ';
3056 });
3057
3058 AddChild([=] {
3059 OS << "constructed ";
3061 OS << ' ';
3063 });
3064}
3065
3067 switch (D->getLanguage()) {
3069 OS << " C";
3070 break;
3072 OS << " C++";
3073 break;
3074 }
3075}
3076
3078 OS << ' ';
3080}
3081
3083 const ExplicitInstantiationDecl *D) {
3085 if (D->isExternTemplate())
3086 OS << " extern";
3087 if (D->getQualifierLoc())
3089 if (const NamedDecl *Spec = D->getSpecialization()) {
3090 OS << " '" << Spec->getDeclName() << "'";
3091 dumpDeclRef(Spec);
3092 }
3093}
3094
3096 if (TypeSourceInfo *T = D->getFriendType())
3097 dumpType(T->getType());
3098 if (D->isPackExpansion())
3099 OS << "...";
3100}
3101
3103 if (D->getFriendKind() !=
3105 VisitFriendDecl(D);
3106 return;
3107 }
3108
3110 if (D->isPackExpansion())
3111 OS << "...";
3112}
3113
3115 dumpName(D);
3116 dumpType(D->getType());
3117 if (D->getSynthesize())
3118 OS << " synthesize";
3119
3120 switch (D->getAccessControl()) {
3121 case ObjCIvarDecl::None:
3122 OS << " none";
3123 break;
3125 OS << " private";
3126 break;
3128 OS << " protected";
3129 break;
3131 OS << " public";
3132 break;
3134 OS << " package";
3135 break;
3136 }
3137}
3138
3140 if (D->isInstanceMethod())
3141 OS << " -";
3142 else
3143 OS << " +";
3144 dumpName(D);
3145 dumpType(D->getReturnType());
3146
3147 if (D->isVariadic())
3148 OS << " variadic";
3149}
3150
3152 dumpName(D);
3153 switch (D->getVariance()) {
3155 break;
3156
3158 OS << " covariant";
3159 break;
3160
3162 OS << " contravariant";
3163 break;
3164 }
3165
3166 if (D->hasExplicitBound())
3167 OS << " bounded";
3169}
3170
3172 dumpName(D);
3175 for (const auto *P : D->protocols())
3176 dumpDeclRef(P);
3177}
3178
3184
3186 dumpName(D);
3187
3188 for (const auto *Child : D->protocols())
3189 dumpDeclRef(Child);
3190}
3191
3193 dumpName(D);
3194 dumpDeclRef(D->getSuperClass(), "super");
3195
3197 for (const auto *Child : D->protocols())
3198 dumpDeclRef(Child);
3199}
3200
3207
3213
3215 dumpName(D);
3216 dumpType(D->getType());
3217
3219 OS << " required";
3221 OS << " optional";
3222
3226 OS << " readonly";
3228 OS << " assign";
3230 OS << " readwrite";
3232 OS << " retain";
3234 OS << " copy";
3236 OS << " nonatomic";
3238 OS << " atomic";
3240 OS << " weak";
3242 OS << " strong";
3244 OS << " unsafe_unretained";
3246 OS << " class";
3248 OS << " direct";
3250 dumpDeclRef(D->getGetterMethodDecl(), "getter");
3252 dumpDeclRef(D->getSetterMethodDecl(), "setter");
3253 }
3254}
3255
3259 OS << " synthesize";
3260 else
3261 OS << " dynamic";
3264}
3265
3267 if (D->isVariadic())
3268 OS << " variadic";
3269
3270 if (D->capturesCXXThis())
3271 OS << " captures_this";
3272}
3273
3278
3280 VisitStmt(S);
3281 if (S->hasStoredFPFeatures())
3282 printFPOptions(S->getStoredFPFeatures());
3283}
3284
3286 if (D->isCBuffer())
3287 OS << " cbuffer";
3288 else
3289 OS << " tbuffer";
3290 dumpName(D);
3291}
3292
3294 const HLSLRootSignatureDecl *D) {
3295 dumpName(D);
3296 OS << " version: ";
3297 switch (D->getVersion()) {
3298 case llvm::dxbc::RootSignatureVersion::V1_0:
3299 OS << "1.0";
3300 break;
3301 case llvm::dxbc::RootSignatureVersion::V1_1:
3302 OS << "1.1";
3303 break;
3304 case llvm::dxbc::RootSignatureVersion::V1_2:
3305 OS << "1.2";
3306 break;
3307 }
3308 OS << ", ";
3309 llvm::hlsl::rootsig::dumpRootElements(OS, D->getRootElements());
3310}
3311
3313 OS << (E->isInOut() ? " inout" : " out");
3314}
3315
3320 if (S->isOrphanedLoopConstruct())
3321 OS << " <orphan>";
3322 else
3323 OS << " parent: " << S->getParentComputeConstructKind();
3324}
3325
3330
3334
3339
3344
3349
3354 const OpenACCCacheConstruct *S) {
3356 if (S->hasReadOnly())
3357 OS <<" readonly";
3358}
3373
3379
3381 OS << " " << D->getDirectiveKind();
3382
3383 for (const OpenACCClause *C : D->clauses())
3384 AddChild([=] {
3385 Visit(C);
3386 for (const Stmt *S : C->children())
3387 AddChild([=] { Visit(S); });
3388 });
3389}
3391 OS << " " << D->getDirectiveKind();
3392
3394
3395 AddChild([=] { Visit(D->getFunctionReference()); });
3396
3397 for (const OpenACCClause *C : D->clauses())
3398 AddChild([=] {
3399 Visit(C);
3400 for (const Stmt *S : C->children())
3401 AddChild([=] { Visit(S); });
3402 });
3403}
3404
3406 const OpenACCRoutineDeclAttr *A) {
3407 for (const OpenACCClause *C : A->Clauses)
3408 AddChild([=] {
3409 Visit(C);
3410 for (const Stmt *S : C->children())
3411 AddChild([=] { Visit(S); });
3412 });
3413}
3414
3416 AddChild("begin", [=] { OS << S->getStartingElementPos(); });
3417 AddChild("number of elements", [=] { OS << S->getDataElementCount(); });
3418}
3419
3421 OS << ' ' << AE->getOpAsString();
3422}
3423
3425 VisitStmt(S);
3426 if (S->hasStoredFPFeatures())
3427 printFPOptions(S->getStoredFPFeatures());
3428}
static double GetApproxValue(const llvm::APFloat &F)
Definition APValue.cpp:638
#define V(N, I)
Defines enumerations for traits support.
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.
#define X(type, name)
Definition Value.h:97
Defines the clang::Module class, which describes a module in the source code.
llvm::SmallVector< std::pair< const MemRegion *, SVal >, 4 > Bindings
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.
#define FLAG(fn, name)
static void dumpBasePath(raw_ostream &OS, const CastExpr *Node)
static void dumpPreviousDeclImpl(raw_ostream &OS,...)
static void dumpPreviousDecl(raw_ostream &OS, const Decl *D)
Dump the previous declaration in the redeclaration chain for a declaration, if any.
C Language Family Type Representation.
OpenACCAtomicKind getAtomicKind() const
bool hasReadOnly() 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
Definition APValue.cpp:122
APValue - This class implements a discriminated union of [uninitialized] [APSInt] [APFloat],...
Definition APValue.h:122
@ Indeterminate
This object has an indeterminate value (C++ [basic.indet]).
Definition APValue.h:131
@ None
There is no such object (it's outside its lifetime).
Definition APValue.h:129
Holds long-lived AST nodes (such as types and decls) that can be referred to throughout the semantic ...
Definition ASTContext.h:223
ArrayRef< Decl * > getModuleInitializers(Module *M)
Get the initializations to perform when importing a module, if any.
const clang::PrintingPolicy & getPrintingPolicy() const
Definition ASTContext.h:881
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 ':'.
Definition DeclCXX.h:86
AddrLabelExpr - The GNU address of label extension, representing &&label.
Definition Expr.h:4594
LabelDecl * getLabel() const
Definition Expr.h:4617
An Embarcadero array type trait, as used in the implementation of __array_rank and __array_extent.
Definition ExprCXX.h:3010
ArrayTypeTrait getTrait() const
Definition ExprCXX.h:3050
Represents an array type, per C99 6.7.5.2 - Array Declarators.
Definition TypeBase.h:3836
AtomicExpr - Variadic atomic builtins: __atomic_exchange, __atomic_fetch_*, __atomic_load,...
Definition Expr.h:6978
StringRef getOpAsString() const
Definition Expr.h:7042
Attr - This represents one attribute.
Definition Attr.h:46
attr::Kind getKind() const
Definition Attr.h:92
bool isInherited() const
Definition Attr.h:101
bool isImplicit() const
Returns true if the attribute has been implicitly created instead of explicitly written by the user.
Definition Attr.h:105
A builtin binary operation expression such as "x + y" or "x <= y".
Definition Expr.h:4082
StringRef getOpcodeStr() const
Definition Expr.h:4148
bool hasStoredFPFeatures() const
Definition Expr.h:4267
FPOptionsOverride getStoredFPFeatures() const
Get FPFeatures from trailing storage.
Definition Expr.h:4279
Opcode getOpcode() const
Definition Expr.h:4127
A binding in a decomposition declaration.
Definition DeclCXX.h:4214
A class which contains all the information about a particular captured value.
Definition Decl.h:4813
Represents a block literal declaration, which is like an unnamed FunctionDecl.
Definition Decl.h:4807
bool capturesCXXThis() const
Definition Decl.h:4939
bool isVariadic() const
Definition Decl.h:4882
Represents the builtin template declaration which is used to implement __make_integer_seq and other b...
Represents a base class of a C++ class.
Definition DeclCXX.h:146
Represents binding an expression to a temporary.
Definition ExprCXX.h:1497
A boolean literal, per ([C++ lex.bool] Boolean literals).
Definition ExprCXX.h:727
bool getValue() const
Definition ExprCXX.h:744
Represents a call to a C++ constructor.
Definition ExprCXX.h:1552
bool isElidable() const
Whether this construction is elidable.
Definition ExprCXX.h:1621
bool isStdInitListInitialization() const
Whether this constructor call was written as list-initialization, but was interpreted as forming a st...
Definition ExprCXX.h:1645
bool isImmediateEscalating() const
Definition ExprCXX.h:1710
bool requiresZeroInitialization() const
Whether this construction first requires zero-initialization before the initializer is called.
Definition ExprCXX.h:1654
CXXConstructorDecl * getConstructor() const
Get the constructor that this expression will (ultimately) call.
Definition ExprCXX.h:1615
bool isListInitialization() const
Whether this constructor call was written as list-initialization.
Definition ExprCXX.h:1634
Represents a C++ constructor within a class.
Definition DeclCXX.h:2641
Represents a C++ base or member initializer.
Definition DeclCXX.h:2406
Represents a C++ deduction guide declaration.
Definition DeclCXX.h:2000
DeductionCandidate getDeductionCandidateKind() const
Definition DeclCXX.h:2095
A default argument (C++ [dcl.fct.default]).
Definition ExprCXX.h:1274
bool hasRewrittenInit() const
Definition ExprCXX.h:1319
A use of a default initializer in a constructor or in aggregate initialization.
Definition ExprCXX.h:1381
bool hasRewrittenInit() const
Definition ExprCXX.h:1410
Represents a delete expression for memory deallocation and destructor calls, e.g.
Definition ExprCXX.h:2630
FunctionDecl * getOperatorDelete() const
Definition ExprCXX.h:2669
bool isArrayForm() const
Definition ExprCXX.h:2656
bool isGlobalDelete() const
Definition ExprCXX.h:2655
Represents a C++ member access expression where the actual member referenced could not be resolved be...
Definition ExprCXX.h:3923
bool isArrow() const
Determine whether this member expression used the '->' operator; otherwise, it used the '.
Definition ExprCXX.h:4022
DeclarationName getMember() const
Retrieve the name of the member that this expression refers to.
Definition ExprCXX.h:4061
Represents the code generated for an expanded expansion statement.
Definition StmtCXX.h:1028
bool shouldApplyLifetimeExtensionToPreamble() const
Definition StmtCXX.h:1077
CXXExpansionStmtPattern - Represents an unexpanded C++ expansion statement.
Definition StmtCXX.h:675
ExpansionStmtKind getKind() const
Definition StmtCXX.h:774
Represents an explicit C++ type conversion that uses "functional" notation (C++ [expr....
Definition ExprCXX.h:1835
Represents a static or instance method of a struct/union/class.
Definition DeclCXX.h:2149
Abstract class common to all of the C++ "named"/"keyword" casts.
Definition ExprCXX.h:379
const char * getCastName() const
getCastName - Get the name of the C++ cast being used, e.g., "static_cast", "dynamic_cast",...
Definition ExprCXX.cpp:801
Represents a new-expression for memory allocation and constructor calls, e.g: "new CXXNewExpr(foo)".
Definition ExprCXX.h:2359
bool isArray() const
Definition ExprCXX.h:2468
FunctionDecl * getOperatorNew() const
Definition ExprCXX.h:2463
bool isGlobalNew() const
Definition ExprCXX.h:2525
A call to an overloaded operator written using operator syntax.
Definition ExprCXX.h:85
OverloadedOperatorKind getOperator() const
Returns the kind of overloaded operator that this expression refers to.
Definition ExprCXX.h:115
Represents a C++ struct/union/class.
Definition DeclCXX.h:258
base_class_range bases()
Definition DeclCXX.h:608
const CXXRecordDecl * getTemplateInstantiationPattern() const
Retrieve the record declaration from which this record could be instantiated.
Definition DeclCXX.cpp:2087
bool needsOverloadResolutionForMoveConstructor() const
Determine whether we need to eagerly declare a defaulted move constructor for this class.
Definition DeclCXX.h:909
bool needsOverloadResolutionForDestructor() const
Determine whether we need to eagerly declare a destructor for this class.
Definition DeclCXX.h:1022
bool needsOverloadResolutionForCopyConstructor() const
Determine whether we need to eagerly declare a defaulted copy constructor for this class.
Definition DeclCXX.h:811
A C++ static_cast expression (C++ [expr.static.cast]).
Definition ExprCXX.h:440
Represents the this expression in C++.
Definition ExprCXX.h:1158
bool isCapturedByCopyInLambdaWithExplicitObjectParameter() const
Definition ExprCXX.h:1184
bool isImplicit() const
Definition ExprCXX.h:1181
Describes an explicit type conversion that uses functional notion but could not be resolved because o...
Definition ExprCXX.h:3797
bool isListInitialization() const
Determine whether this expression models list-initialization.
Definition ExprCXX.h:3852
QualType getTypeAsWritten() const
Retrieve the type that is being constructed, as specified in the source code.
Definition ExprCXX.h:3831
CallExpr - Represents a function call (C99 6.5.2.2, C++ [expr.call]).
Definition Expr.h:2987
bool hasStoredFPFeatures() const
Definition Expr.h:3146
bool usesADL() const
Definition Expr.h:3144
FPOptionsOverride getFPFeatures() const
Definition Expr.h:3286
Represents the body of a CapturedStmt, and serves as its DeclContext.
Definition Decl.h:5079
bool isNothrow() const
Definition Decl.cpp:5770
CaseStmt - Represent a case statement.
Definition Stmt.h:1932
bool caseStmtIsGNURange() const
True if this case statement is of the form case LHS ... RHS, which is a GNU extension.
Definition Stmt.h:1995
CastExpr - Base class for type casts, including both implicit casts (ImplicitCastExpr) and explicit c...
Definition Expr.h:3720
path_iterator path_begin()
Definition Expr.h:3790
bool hasStoredFPFeatures() const
Definition Expr.h:3819
static const char * getCastKindName(CastKind CK)
Definition Expr.cpp:1981
path_iterator path_end()
Definition Expr.h:3791
const CXXBaseSpecifier *const * path_const_iterator
Definition Expr.h:3787
bool path_empty() const
Definition Expr.h:3788
FPOptionsOverride getFPFeatures() const
Definition Expr.h:3840
unsigned getValue() const
Definition Expr.h:1649
Declaration of a class template.
Represents a 'co_await' expression.
Definition ExprCXX.h:5422
bool isImplicit() const
Definition ExprCXX.h:5444
CompoundAssignOperator - For compound assignments (e.g.
Definition Expr.h:4344
QualType getComputationLHSType() const
Definition Expr.h:4378
QualType getComputationResultType() const
Definition Expr.h:4381
CompoundStmt - This represents a group of statements like { stmt stmt }.
Definition Stmt.h:1752
FPOptionsOverride getStoredFPFeatures() const
Get FPOptionsOverride from trailing storage.
Definition Stmt.h:1802
bool hasStoredFPFeatures() const
Definition Stmt.h:1799
Declaration of a C++20 concept.
A reference to a concept and its template args, as it appears in the code.
Definition ASTConcept.h:130
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.
Definition TypeBase.h:3874
ConstantExpr - An expression that occurs in a constant context and optionally the result of evaluatin...
Definition Expr.h:1102
APValue getAPValueResult() const
Definition Expr.cpp:419
bool hasAPValueResult() const
Definition Expr.h:1177
Represents a shadow constructor declaration introduced into a class by a C++11 using-declaration that...
Definition DeclCXX.h:3706
CXXRecordDecl * getConstructedBaseClass() const
Get the base class whose constructor or constructor shadow declaration is passed the constructor argu...
Definition DeclCXX.h:3797
bool constructsVirtualBase() const
Returns true if the constructed base class is a virtual base class subobject of this declaration's cl...
Definition DeclCXX.h:3806
ConstructorUsingShadowDecl * getConstructedBaseClassShadowDecl() const
Get the inheriting constructor declaration for the base class for which we don't have an explicit ini...
Definition DeclCXX.h:3787
ConstructorUsingShadowDecl * getNominatedBaseClassShadowDecl() const
Get the inheriting constructor declaration for the direct base class from which this using shadow dec...
Definition DeclCXX.h:3781
CXXRecordDecl * getNominatedBaseClass() const
Get the base class that was named in the using declaration.
Definition DeclCXX.cpp:3510
ConvertVectorExpr - Clang builtin function __builtin_convertvector This AST node provides support for...
Definition Expr.h:4763
FPOptionsOverride getStoredFPFeatures() const
Get FPFeatures from trailing storage.
Definition Expr.h:4826
bool hasStoredFPFeatures() const
Is FPFeatures in Trailing Storage?
Definition Expr.h:4821
Represents a 'co_return' statement in the C++ Coroutines TS.
Definition StmtCXX.h:474
bool isImplicit() const
Definition StmtCXX.h:507
DeclContext * getParent()
getParent - Returns the containing DeclContext.
Definition DeclBase.h:2126
A reference to a declared variable, function, enum, etc.
Definition Expr.h:1290
NamedDecl * getFoundDecl()
Get the NamedDecl through which this reference occurred.
Definition Expr.h:1401
NestedNameSpecifier getQualifier() const
If the name was qualified, retrieves the nested-name-specifier that precedes the name.
Definition Expr.h:1391
bool refersToEnclosingVariableOrCapture() const
Does this DeclRefExpr refer to an enclosing local or a captured variable?
Definition Expr.h:1494
bool isCapturedByCopyInLambdaWithExplicitObjectParameter() const
Definition Expr.h:1506
ValueDecl * getDecl()
Definition Expr.h:1358
NonOdrUseReason isNonOdrUse() const
Is this expression a non-odr-use reference, and if so, why?
Definition Expr.h:1488
bool isImmediateEscalating() const
Definition Expr.h:1498
Decl - This represents one declaration (or definition), e.g.
Definition DeclBase.h:86
TemplateDecl * getDescribedTemplate() const
If this is a declaration that describes some template, this method returns that template declaration.
Definition DeclBase.cpp:285
FriendObjectKind getFriendObjectKind() const
Determines whether this declaration is the object of a friend declaration and, if so,...
Definition DeclBase.h:1243
ASTContext & getASTContext() const LLVM_READONLY
Definition DeclBase.cpp:550
bool isImplicit() const
isImplicit - Indicates whether the declaration was implicitly generated by the implementation.
Definition DeclBase.h:601
@ FOK_Undeclared
A friend of a previously-undeclared entity.
Definition DeclBase.h:1236
@ FOK_None
Not a friend object.
Definition DeclBase.h:1234
@ FOK_Declared
A friend of a previously-declared entity.
Definition DeclBase.h:1235
Module * getOwningModule() const
Get the module that owns this declaration (for visibility purposes).
Definition DeclBase.h:854
bool isFromASTFile() const
Determine whether this declaration came from an AST file (such as a precompiled header or module) rat...
Definition DeclBase.h:805
bool isInvalidDecl() const
Definition DeclBase.h:596
SourceLocation getLocation() const
Definition DeclBase.h:447
const char * getDeclKindName() const
Definition DeclBase.cpp:169
bool isThisDeclarationReferenced() const
Whether this declaration was referenced.
Definition DeclBase.h:629
bool isUsed(bool CheckUsedAttr=true) const
Whether any (re-)declaration of the entity was used, meaning that a definition is required.
Definition DeclBase.cpp:579
DeclContext * getDeclContext()
Definition DeclBase.h:456
AccessSpecifier getAccess() const
Definition DeclBase.h:515
DeclContext * getLexicalDeclContext()
getLexicalDeclContext - The declaration context where this Decl was lexically declared (LexicalDC).
Definition DeclBase.h:935
Kind getKind() const
Definition DeclBase.h:450
virtual SourceRange getSourceRange() const LLVM_READONLY
Source range that this declaration covers.
Definition DeclBase.h:435
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 ...
Definition Decl.h:838
TemplateName getUnderlying() const
DefaultArguments getDefaultArguments() const
A qualified reference to a name whose declaration cannot yet be resolved.
Definition ExprCXX.h:3563
NestedNameSpecifier getQualifier() const
Retrieve the nested-name-specifier that qualifies this declaration.
Definition ExprCXX.h:3615
Represents an array type in C++ whose size is a value-dependent expression.
Definition TypeBase.h:4125
Represents an extended vector type where either the type or size is dependent.
Definition TypeBase.h:4215
A template-id naming a variable template or a concept through a template template parameter.
Definition ExprCXX.h:3479
TemplateName getTemplateName() const
Definition ExprCXX.h:3507
NestedNameSpecifier getQualifier() const
Return the nested name specifier that qualifies this name.
Symbolic representation of a dynamic allocation.
Definition APValue.h:65
IdentifierInfo & getAccessor() const
Definition Expr.h:6635
Represents a reference to emded data.
Definition Expr.h:5179
unsigned getStartingElementPos() const
Definition Expr.h:5200
size_t getDataElementCount() const
Definition Expr.h:5201
An instance of this object exists for each enum constant that is defined.
Definition Decl.h:3558
Represents an enum.
Definition Decl.h:4146
bool isScoped() const
Returns true if this is a C++11 scoped enumeration.
Definition Decl.h:4364
bool isScopedUsingClassTag() const
Returns true if this is a C++11 scoped enumeration.
Definition Decl.h:4367
bool isFixed() const
Returns true if this is an Objective-C, C++11, or Microsoft-style enumeration with a fixed underlying...
Definition Decl.h:4373
QualType getIntegerType() const
Return the integer type this enum decl corresponds to.
Definition Decl.h:4319
EnumDecl * getTemplateInstantiationPattern() const
Retrieve the enum definition from which this enumeration could be instantiated, if it is an instantia...
Definition Decl.cpp:5203
QualType getTypeAsWritten() const
getTypeAsWritten - Returns the type that this expression is casting to, as written in the source code...
Definition Expr.h:3999
Represents an explicit instantiation of a template entity in source code.
TemplateSpecializationKind getTemplateSpecializationKind() const
NamedDecl * getSpecialization() const
NestedNameSpecifierLoc getQualifierLoc() const
Returns the qualifier regardless of where it is stored.
Represents an expression – generally a full-expression – that introduces cleanups to be run at the en...
Definition ExprCXX.h:3714
CleanupObject getObject(unsigned i) const
Definition ExprCXX.h:3744
unsigned getNumObjects() const
Definition ExprCXX.h:3742
llvm::PointerUnion< BlockDecl *, CompoundLiteralExpr * > CleanupObject
The type of objects that are kept in the cleanup.
Definition ExprCXX.h:3720
This represents one expression.
Definition Expr.h:113
bool isValueDependent() const
Determines whether the value of this expression depends on.
Definition Expr.h:178
QualType getType() const
Definition Expr.h:145
An expression trait intrinsic.
Definition ExprCXX.h:3083
ExpressionTrait getTrait() const
Definition ExprCXX.h:3118
ExtVectorElementExpr - This represents access to specific elements of a vector, and may occur on the ...
Definition Expr.h:6660
Represents difference between two FPOptions values.
Represents a member of a struct/union/class.
Definition Decl.h:3295
bool isMutable() const
Determines whether this field is mutable (C++ only).
Definition Decl.h:3395
std::string getValueAsString(unsigned Radix) const
Definition Expr.cpp:1016
double getValueAsApproximateDouble() const
getValueAsApproximateDouble - This returns the value as an inaccurate double.
Definition Expr.cpp:1095
FriendDecl - Represents the declaration of a friend entity, which can be a function,...
Definition DeclFriend.h:46
TypeSourceInfo * getFriendType() const
If this friend declaration names an (untemplated but possibly dependent) type, return the type; other...
Definition DeclFriend.h:96
bool isPackExpansion() const
Definition DeclFriend.h:113
Declaration of a friend template.
TemplateName getFriendTemplateName() const
FriendTemplateEntityKind getFriendKind() const
Represents a function declaration or definition.
Definition Decl.h:2059
StringLiteral * getDeletedMessage() const
Get the message that indicates why this function was deleted.
Definition Decl.h:2889
bool isInlined() const
Determine whether this function should be inlined, because it is either marked "inline" or "constexpr...
Definition Decl.h:3052
FunctionDecl * getTemplateInstantiationPattern(bool ForDefinition=true) const
Retrieve the function declaration from which this function could be instantiated, if it is an instant...
Definition Decl.cpp:4305
bool isTrivial() const
Whether this function is "trivial" in some specialized C++ senses.
Definition Decl.h:2504
param_iterator param_begin()
Definition Decl.h:2917
bool isDeleted() const
Whether this function has been deleted.
Definition Decl.h:2667
StorageClass getStorageClass() const
Returns the storage class as written in the source.
Definition Decl.h:3019
bool isDeletedAsWritten() const
Definition Decl.h:2671
bool isPureVirtual() const
Whether this virtual function is pure, i.e.
Definition Decl.h:2480
bool param_empty() const
Definition Decl.h:2916
bool isDefaulted() const
Whether this function is defaulted.
Definition Decl.h:2512
bool isIneligibleOrNotSelected() const
Definition Decl.h:2545
TemplateSpecializationKind getTemplateSpecializationKind() const
Determine what kind of template instantiation this function represents.
Definition Decl.cpp:4458
bool isVirtualAsWritten() const
Whether this function is marked as virtual explicitly.
Definition Decl.h:2471
unsigned getNumParams() const
Return the number of parameters this function must have based on its FunctionType.
Definition Decl.cpp:3870
bool isInlineSpecified() const
Determine whether the "inline" keyword was specified for this function.
Definition Decl.h:3030
Represents a prototype with parameter type info, e.g.
Definition TypeBase.h:5421
Declaration of a template function.
FunctionType - C99 6.7.5.3 - Function Declarators.
Definition TypeBase.h:4617
static StringRef getNameForCallConv(CallingConv CC)
Definition Type.cpp:3740
Represents a C11 generic selection.
Definition Expr.h:6232
AssociationTy< true > ConstAssociation
Definition Expr.h:6466
bool isResultDependent() const
Whether this generic selection is result-dependent.
Definition Expr.h:6486
GotoStmt - This represents a direct goto.
Definition Stmt.h:2981
LabelDecl * getLabel() const
Definition Stmt.h:2994
HLSLBufferDecl - Represent a cbuffer or tbuffer declaration.
Definition Decl.h:5329
bool isCBuffer() const
Definition Decl.h:5373
This class represents temporary values used to represent inout and out arguments in HLSL.
Definition Expr.h:7447
bool isInOut() const
returns true if the parameter is inout and false if the parameter is out.
Definition Expr.h:7506
ArrayRef< llvm::hlsl::rootsig::RootElement > getRootElements() const
Definition Decl.h:5446
llvm::dxbc::RootSignatureVersion getVersion() const
Definition Decl.h:5444
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.
Definition Stmt.h:2271
bool hasElseStorage() const
True if this IfStmt has storage for an else statement.
Definition Stmt.h:2346
bool hasVarStorage() const
True if this IfStmt has storage for a variable declaration.
Definition Stmt.h:2343
bool isConstexpr() const
Definition Stmt.h:2464
bool hasInitStorage() const
True if this IfStmt has the storage for an init statement.
Definition Stmt.h:2340
bool isNegatedConsteval() const
Definition Stmt.h:2460
bool isConsteval() const
Definition Stmt.h:2451
ImplicitCastExpr - Allows us to explicitly represent implicit type conversions, which have no direct ...
Definition Expr.h:3897
bool isPartOfExplicitCast() const
Definition Expr.h:3928
Describes a module import declaration, which makes the contents of the named module visible in the cu...
Definition Decl.h:5188
Module * getImportedModule() const
Retrieve the module that was imported by the import declaration.
Definition Decl.h:5246
Represents a field injected from an anonymous union/struct into the parent scope.
Definition Decl.h:3602
ArrayRef< NamedDecl * > chain() const
Definition Decl.h:3623
Describes an C or C++ initializer list.
Definition Expr.h:5352
FieldDecl * getInitializedFieldInUnion()
If this initializes a union, specifies which field in the union to initialize.
Definition Expr.h:5479
bool isExplicit() const
Definition Expr.h:5495
Represents the declaration of a label.
Definition Decl.h:525
LabelStmt - Represents a label, which has a substatement.
Definition Stmt.h:2158
bool isSideEntry() const
Definition Stmt.h:2205
const char * getName() const
Definition Stmt.cpp:437
Implicit declaration of a temporary that was materialized by a MaterializeTemporaryExpr and lifetime-...
Definition DeclCXX.h:3337
Represents a linkage specification.
Definition DeclCXX.h:3044
LinkageSpecLanguageIDs getLanguage() const
Return the language specified by this linkage specification.
Definition DeclCXX.h:3067
Base class for BreakStmt and ContinueStmt.
Definition Stmt.h:3069
LabelDecl * getLabelDecl()
Definition Stmt.h:3107
const Stmt * getNamedLoopOrSwitch() const
If this is a named break/continue, get the loop or switch statement that this targets.
Definition Stmt.cpp:1535
bool hasLabelTarget() const
Definition Stmt.h:3102
Represents a prvalue temporary that is written into memory so that a reference can bind to it.
Definition ExprCXX.h:4973
ValueDecl * getExtendingDecl()
Get the declaration which triggered the lifetime-extension of this temporary, if any.
Definition ExprCXX.h:5023
MemberExpr - [C99 6.5.2.3] Structure and Union Members.
Definition Expr.h:3408
NestedNameSpecifier getQualifier() const
If the member name was qualified, retrieves the nested-name-specifier that precedes the member name.
Definition Expr.h:3519
ValueDecl * getMemberDecl() const
Retrieve the member declaration to which this expression refers.
Definition Expr.h:3491
NonOdrUseReason isNonOdrUse() const
Is this expression a non-odr-use reference, and if so, why?
Definition Expr.h:3632
bool isArrow() const
Definition Expr.h:3592
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.
Definition Module.h:340
std::string getFullModuleName(bool AllowStringLiterals=false) const
Retrieve the full name of this module, including the path from its top-level module.
Definition Module.cpp:240
This represents a decl that may have a name.
Definition Decl.h:275
bool isModulePrivate() const
Whether this declaration was marked as being private to the module in which it was defined.
Definition DeclBase.h:656
IdentifierInfo * getIdentifier() const
Get the identifier that names this declaration, if there is one.
Definition Decl.h:296
StringRef getName() const
Get the name of identifier for this declaration as a StringRef.
Definition Decl.h:302
Visibility getVisibility() const
Determines the visibility of this entity.
Definition Decl.h:445
DeclarationName getDeclName() const
Get the actual, stored name of the declaration, which may be a special name.
Definition Decl.h:341
Linkage getFormalLinkage() const
Get the linkage from a semantic point of view.
Definition Decl.cpp:1208
Represents a C++ namespace alias.
Definition DeclCXX.h:3230
NamespaceBaseDecl * getAliasedNamespace() const
Retrieve the namespace that this alias refers to, which may either be a NamespaceDecl or a NamespaceA...
Definition DeclCXX.h:3323
Represent a C++ namespace.
Definition Decl.h:593
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.
Definition Decl.h:649
bool isNested() const
Returns true if this is a nested namespace declaration.
Definition Decl.h:658
NestedNameSpecifier getNestedNameSpecifier() const
Retrieve the nested-name-specifier to which this instance refers.
Represents a C++ nested name specifier, such as "\::std::vector<int>::".
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.
@ MicrosoftSuper
Microsoft's '__super' specifier, stored as a CXXRecordDecl* of the class it appeared in.
@ Global
The global specifier '::'. There is no stored value.
@ 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.
Definition DeclOpenMP.h:445
This is a basic class for representing single OpenMP clause.
This represents 'pragma omp declare reduction ...' directive.
Definition DeclOpenMP.h:239
Expr * getInitializer()
Get initializer expression (if specified) of the declare reduction construct.
Definition DeclOpenMP.h:300
Expr * getCombiner()
Get combiner expression of the declare reduction construct.
Definition DeclOpenMP.h:282
OMPDeclareReductionInitKind getInitializerKind() const
Get initializer kind.
Definition DeclOpenMP.h:303
OpenMP 5.0 [2.1.6 Iterators] Iterators are identifiers that expand to multiple values in the clause o...
Definition ExprOpenMP.h:151
IteratorRange getIteratorRange(unsigned I)
Gets the iterator range for the given iterator.
Definition Expr.cpp:5598
unsigned numOfIterators() const
Returns number of iterator definitions.
Definition ExprOpenMP.h:275
Decl * getIteratorDecl(unsigned I)
Gets the iterator declaration for the given iterator.
Definition Expr.cpp:5594
This represents 'pragma omp requires...' directive.
Definition DeclOpenMP.h:479
clauselist_range clauselists()
Definition DeclOpenMP.h:504
Represents Objective-C's @catch statement.
Definition StmtObjC.h:77
const VarDecl * getCatchParamDecl() const
Definition StmtObjC.h:97
ObjCBoolLiteralExpr - Objective-C Boolean Literal.
Definition ExprObjC.h:118
ObjCBoxedExpr - used for generalized expression boxing.
Definition ExprObjC.h:158
ObjCMethodDecl * getBoxingMethod() const
Definition ExprObjC.h:180
ObjCCategoryDecl - Represents a category declaration.
Definition DeclObjC.h:2335
ObjCCategoryImplDecl * getImplementation() const
ObjCInterfaceDecl * getClassInterface()
Definition DeclObjC.h:2378
protocol_range protocols() const
Definition DeclObjC.h:2409
ObjCCategoryImplDecl - An object of this class encapsulates a category @implementation declaration.
Definition DeclObjC.h:2551
ObjCCategoryDecl * getCategoryDecl() const
ObjCCompatibleAliasDecl - Represents alias of a class.
Definition DeclObjC.h:2781
const ObjCInterfaceDecl * getClassInterface() const
Definition DeclObjC.h:2799
ObjCEncodeExpr, used for @encode in Objective-C.
Definition ExprObjC.h:440
QualType getEncodedType() const
Definition ExprObjC.h:459
const ObjCInterfaceDecl * getClassInterface() const
Definition DeclObjC.h:2492
ObjCImplementationDecl - Represents a class definition - this is where method definitions are specifi...
Definition DeclObjC.h:2603
const ObjCInterfaceDecl * getSuperClass() const
Definition DeclObjC.h:2741
Represents an ObjC class declaration.
Definition DeclObjC.h:1160
protocol_range protocols() const
Definition DeclObjC.h:1365
ObjCImplementationDecl * getImplementation() const
ObjCInterfaceDecl * getSuperClass() const
Definition DeclObjC.cpp:349
Represents typeof(type), a C23 feature and GCC extension, or `typeof_unqual(type),...
Definition TypeBase.h:8063
ObjCIvarDecl - Represents an ObjC instance variable.
Definition DeclObjC.h:1958
AccessControl getAccessControl() const
Definition DeclObjC.h:2006
bool getSynthesize() const
Definition DeclObjC.h:2013
ObjCIvarRefExpr - A reference to an ObjC instance variable.
Definition ExprObjC.h:581
ObjCIvarDecl * getDecl()
Definition ExprObjC.h:611
bool isFreeIvar() const
Definition ExprObjC.h:620
An expression that sends a message to the given Objective-C object or class.
Definition ExprObjC.h:972
Selector getSelector() const
Definition ExprObjC.cpp:301
@ SuperInstance
The receiver is the instance of the superclass object.
Definition ExprObjC.h:986
@ Instance
The receiver is an object instance.
Definition ExprObjC.h:980
@ SuperClass
The receiver is a superclass.
Definition ExprObjC.h:983
@ Class
The receiver is a class.
Definition ExprObjC.h:977
QualType getClassReceiver() const
Returns the type of a class message send, or NULL if the message is not a class message.
Definition ExprObjC.h:1319
ReceiverKind getReceiverKind() const
Determine the kind of receiver that this message is being sent to.
Definition ExprObjC.h:1261
ObjCMethodDecl - Represents an instance or class method declaration.
Definition DeclObjC.h:140
bool isVariadic() const
Definition DeclObjC.h:434
Selector getSelector() const
Definition DeclObjC.h:330
bool isInstanceMethod() const
Definition DeclObjC.h:429
QualType getReturnType() const
Definition DeclObjC.h:332
Represents one property declaration in an Objective-C interface.
Definition DeclObjC.h:734
ObjCMethodDecl * getGetterMethodDecl() const
Definition DeclObjC.h:907
ObjCMethodDecl * getSetterMethodDecl() const
Definition DeclObjC.h:910
QualType getType() const
Definition DeclObjC.h:810
ObjCPropertyAttribute::Kind getPropertyAttributes() const
Definition DeclObjC.h:821
PropertyControl getPropertyImplementation() const
Definition DeclObjC.h:918
ObjCPropertyImplDecl - Represents implementation declaration of a property in a class or category imp...
Definition DeclObjC.h:2811
ObjCIvarDecl * getPropertyIvarDecl() const
Definition DeclObjC.h:2885
Kind getPropertyImplementation() const
Definition DeclObjC.h:2881
ObjCPropertyDecl * getPropertyDecl() const
Definition DeclObjC.h:2876
ObjCPropertyRefExpr - A dot-syntax expression to access an ObjC property.
Definition ExprObjC.h:649
bool isMessagingGetter() const
True if the property reference will result in a message to the getter.
Definition ExprObjC.h:768
ObjCPropertyDecl * getExplicitProperty() const
Definition ExprObjC.h:738
bool isMessagingSetter() const
True if the property reference will result in a message to the setter.
Definition ExprObjC.h:775
ObjCMethodDecl * getImplicitPropertyGetter() const
Definition ExprObjC.h:743
bool isImplicitProperty() const
Definition ExprObjC.h:735
ObjCMethodDecl * getImplicitPropertySetter() const
Definition ExprObjC.h:748
bool isSuperReceiver() const
Definition ExprObjC.h:803
Represents an Objective-C protocol declaration.
Definition DeclObjC.h:2090
protocol_range protocols() const
Definition DeclObjC.h:2167
ObjCProtocolExpr used for protocol expression in Objective-C.
Definition ExprObjC.h:537
ObjCProtocolDecl * getProtocol() const
Definition ExprObjC.h:554
ObjCSelectorExpr used for @selector in Objective-C.
Definition ExprObjC.h:485
Selector getSelector() const
Definition ExprObjC.h:499
ObjCSubscriptRefExpr - used for array and dictionary subscripting.
Definition ExprObjC.h:871
bool isArraySubscriptRefExpr() const
Definition ExprObjC.h:924
ObjCMethodDecl * getAtIndexMethodDecl() const
Definition ExprObjC.h:916
ObjCMethodDecl * setAtIndexMethodDecl() const
Definition ExprObjC.h:920
Represents the declaration of an Objective-C type parameter.
Definition DeclObjC.h:581
bool hasExplicitBound() const
Whether this type parameter has an explicitly-written type bound, e.g., "T : NSView".
Definition DeclObjC.h:643
ObjCTypeParamVariance getVariance() const
Determine the variance of this type parameter.
Definition DeclObjC.h:626
This expression type represents an asterisk in an OpenACC Size-Expr, used in the 'tile' and 'gang' cl...
Definition Expr.h:2134
This is the base type for all OpenACC Clauses.
OpenACCDirectiveKind getDirectiveKind() const
Definition DeclOpenACC.h:56
ArrayRef< const OpenACCClause * > clauses() const
Definition DeclOpenACC.h:62
This is the base class for an OpenACC statement-level construct, other construct types are expected t...
Definition StmtOpenACC.h:26
OpenACCDirectiveKind getDirectiveKind() const
Definition StmtOpenACC.h:57
SourceLocation getRParenLoc() const
const Expr * getFunctionReference() const
SourceLocation getLParenLoc() const
UnresolvedSetImpl::iterator decls_iterator
Definition ExprCXX.h:3233
decls_iterator decls_begin() const
Definition ExprCXX.h:3235
decls_iterator decls_end() const
Definition ExprCXX.h:3238
DeclarationName getName() const
Gets the name looked up.
Definition ExprCXX.h:3252
A structure for storing a pack-index-template-name ([temp.names]).
UnsignedOrNone getSelectedIndex() const
ArrayRef< TemplateName > getExpansions() const
Represents a #pragma comment line.
Definition Decl.h:168
StringRef getArg() const
Definition Decl.h:191
PragmaMSCommentKind getCommentKind() const
Definition Decl.h:189
Represents a #pragma detect_mismatch line.
Definition Decl.h:202
StringRef getName() const
Definition Decl.h:223
StringRef getValue() const
Definition Decl.h:224
[C99 6.4.2.2] - A predefined identifier such as func.
Definition Expr.h:2049
StringRef getIdentKindName() const
Definition Expr.h:2106
PredefinedIdentKind getIdentKind() const
Definition Expr.h:2084
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.
Definition TypeBase.h:938
SplitQualType split() const
Divides a QualType into its unqualified type and a set of local qualifiers.
Definition TypeBase.h:8522
std::string getAsString() const
static std::string getAsString(SplitQualType split, const PrintingPolicy &Policy)
Definition TypeBase.h:1348
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.
Definition Decl.h:4460
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.
Definition TypeBase.h:3687
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;.
Definition Stmt.h:3172
const VarDecl * getNRVOCandidate() const
Retrieve the variable that might be used for the named return value optimization.
Definition Stmt.h:3208
TypeSourceInfo * getTypeSourceInfo()
Definition Expr.h:2187
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.
Definition ExprCXX.h:4494
NamedDecl * getPack() const
Retrieve the parameter pack.
Definition ExprCXX.h:4562
Encodes a location in the source.
A trivial tuple used to represent a source range.
Stmt - This represents one statement.
Definition Stmt.h:85
SourceRange getSourceRange() const LLVM_READONLY
SourceLocation tokens are not useful in isolation - they are low level value objects created/interpre...
Definition Stmt.cpp:343
const char * getStmtClassName() const
Definition Stmt.cpp:86
StringLiteral - This represents a string literal expression, e.g.
Definition Expr.h:1819
void outputString(raw_ostream &OS) const
Prints the contents of the string to OS.
Definition Expr.cpp:1215
A structure for storing the information associated with a substituted template template parameter.
TemplateTemplateParmDecl * getParameter() const
unsigned getIndex() const
Returns the index of the replaced parameter in the associated declaration.
Decl * getAssociatedDecl() const
A template-like entity which owns the whole pattern being substituted.
SwitchStmt - This represents a 'switch' stmt.
Definition Stmt.h:2521
bool hasVarStorage() const
True if this SwitchStmt has storage for a condition variable.
Definition Stmt.h:2582
bool hasInitStorage() const
True if this SwitchStmt has storage for an init statement.
Definition Stmt.h:2579
Represents the declaration of a struct/union/class/enum.
Definition Decl.h:3852
StringRef getKindName() const
Definition Decl.h:4048
bool isCompleteDefinition() const
Return true if this decl has its body fully specified.
Definition Decl.h:3953
TypedefNameDecl * getTypedefNameForAnonDecl() const
Definition Decl.h:4089
NestedNameSpecifier getQualifier() const
Retrieve the nested-name-specifier that qualifies the name of this declaration, if it was present in ...
Definition Decl.h:4098
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,...
The base class of all kinds of template declarations (e.g., class, function, etc.).
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.
NameKind getKind() const
@ UsingTemplate
A template name that refers to a template declaration found through a specific using shadow declarati...
@ OverloadedTemplate
A set of overloaded template declarations.
@ PackIndexingTemplate
A pack-index-template-name.
@ 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.
PackIndexingTemplateStorage * getAsPackIndexingTemplate() const
Retrieve the pack-index-template-name storage, if any.
TemplateTemplateParmDecl - Declares a template template parameter, e.g., "T" in.
bool isParameterPack() const
Whether this template template parameter is a template parameter pack.
unsigned getIndex() const
Get the index of the template parameter within its parameter list.
unsigned getDepth() const
Get the nesting depth of the template parameter.
Declaration of a template type parameter.
bool wasDeclaredWithTypename() const
Whether this template type parameter was declared with the 'typename' keyword.
unsigned getIndex() const
Retrieve the index of the template parameter.
const TypeConstraint * getTypeConstraint() const
Returns the type constraint associated with this template parameter (if any).
bool isParameterPack() const
Returns whether this is a parameter pack.
unsigned getDepth() const
Retrieve the depth of the template parameter.
void VisitCXXFunctionalCastExpr(const CXXFunctionalCastExpr *Node)
void VisitDeducedType(const DeducedType *T)
void VisitEnumDecl(const EnumDecl *D)
void VisitExprWithCleanups(const ExprWithCleanups *Node)
void visitInlineCommandComment(const comments::InlineCommandComment *C, const comments::FullComment *)
void VisitCXXStaticCastExpr(const CXXStaticCastExpr *Node)
void visitVerbatimBlockComment(const comments::VerbatimBlockComment *C, const comments::FullComment *)
void dumpPointer(const void *Ptr)
void VisitDeclarationTemplateArgument(const TemplateArgument &TA)
void VisitOpenACCLoopConstruct(const OpenACCLoopConstruct *S)
void VisitLinkageSpecDecl(const LinkageSpecDecl *D)
void VisitVectorType(const VectorType *T)
void VisitLoopControlStmt(const LoopControlStmt *L)
void VisitHLSLRootSignatureDecl(const HLSLRootSignatureDecl *D)
void VisitCoawaitExpr(const CoawaitExpr *Node)
void VisitUnaryOperator(const UnaryOperator *Node)
void dumpAccessSpecifier(AccessSpecifier AS)
void VisitExplicitInstantiationDecl(const ExplicitInstantiationDecl *D)
void VisitHLSLOutArgExpr(const HLSLOutArgExpr *E)
void VisitDeducedTemplateSpecializationType(const DeducedTemplateSpecializationType *T)
void VisitObjCSelectorExpr(const ObjCSelectorExpr *Node)
void VisitCXXOperatorCallExpr(const CXXOperatorCallExpr *Node)
void VisitCXXUnresolvedConstructExpr(const CXXUnresolvedConstructExpr *Node)
void VisitPragmaCommentDecl(const PragmaCommentDecl *D)
void VisitOpenACCRoutineDecl(const OpenACCRoutineDecl *D)
void VisitDependentScopeDeclRefExpr(const DependentScopeDeclRefExpr *Node)
void VisitImportDecl(const ImportDecl *D)
void VisitUsingEnumDecl(const UsingEnumDecl *D)
void VisitOMPCapturedExprDecl(const OMPCapturedExprDecl *D)
void VisitUnresolvedUsingType(const UnresolvedUsingType *T)
void VisitObjCProtocolExpr(const ObjCProtocolExpr *Node)
void VisitIntegralTemplateArgument(const TemplateArgument &TA)
void VisitCXXExpansionStmtInstantiation(const CXXExpansionStmtInstantiation *Node)
void VisitObjCCategoryDecl(const ObjCCategoryDecl *D)
void VisitIndirectFieldDecl(const IndirectFieldDecl *D)
void VisitNullTemplateArgument(const TemplateArgument &TA)
void VisitPackTemplateArgument(const TemplateArgument &TA)
void VisitUsingType(const UsingType *T)
void VisitInjectedClassNameType(const InjectedClassNameType *T)
void VisitBinaryOperator(const BinaryOperator *Node)
void VisitUnresolvedLookupExpr(const UnresolvedLookupExpr *Node)
void VisitObjCInterfaceDecl(const ObjCInterfaceDecl *D)
void VisitBlockDecl(const BlockDecl *D)
void VisitCXXDeleteExpr(const CXXDeleteExpr *Node)
void VisitObjCBoxedExpr(const ObjCBoxedExpr *Node)
void VisitNullPtrTemplateArgument(const TemplateArgument &TA)
void VisitVarTemplateDecl(const VarTemplateDecl *D)
void VisitSubstTemplateTypeParmPackType(const SubstTemplateTypeParmPackType *T)
void VisitConceptSpecializationExpr(const ConceptSpecializationExpr *Node)
void VisitCXXDeductionGuideDecl(const CXXDeductionGuideDecl *D)
TextNodeDumper(raw_ostream &OS, const ASTContext &Context, bool ShowColors)
void VisitPredefinedExpr(const PredefinedExpr *Node)
void dumpType(QualType T)
void VisitDependentTemplateIdExpr(const DependentTemplateIdExpr *Node)
void VisitMatrixElementExpr(const MatrixElementExpr *Node)
void VisitObjCEncodeExpr(const ObjCEncodeExpr *Node)
void dumpNestedNameSpecifier(NestedNameSpecifier NNS)
void VisitStructuralValueTemplateArgument(const TemplateArgument &TA)
void VisitHLSLBufferDecl(const HLSLBufferDecl *D)
void VisitUnresolvedUsingValueDecl(const UnresolvedUsingValueDecl *D)
void VisitNamespaceAliasDecl(const NamespaceAliasDecl *D)
void VisitObjCMessageExpr(const ObjCMessageExpr *Node)
void dumpSourceRange(SourceRange R)
void VisitMemberExpr(const MemberExpr *Node)
void VisitOpenACCDataConstruct(const OpenACCDataConstruct *S)
void dumpBareTemplateName(TemplateName TN)
void VisitOpenACCConstructStmt(const OpenACCConstructStmt *S)
void VisitCompoundStmt(const CompoundStmt *Node)
void VisitConstantExpr(const ConstantExpr *Node)
void VisitObjCIvarRefExpr(const ObjCIvarRefExpr *Node)
void VisitOpenACCDeclareDecl(const OpenACCDeclareDecl *D)
void VisitOpenACCAsteriskSizeExpr(const OpenACCAsteriskSizeExpr *S)
void VisitMaterializeTemporaryExpr(const MaterializeTemporaryExpr *Node)
void VisitConstructorUsingShadowDecl(const ConstructorUsingShadowDecl *D)
void VisitWhileStmt(const WhileStmt *Node)
void VisitCharacterLiteral(const CharacterLiteral *Node)
void VisitAccessSpecDecl(const AccessSpecDecl *D)
void VisitFunctionType(const FunctionType *T)
void VisitObjCImplementationDecl(const ObjCImplementationDecl *D)
void VisitReturnStmt(const ReturnStmt *Node)
void VisitTypeLoc(TypeLoc TL)
void VisitAutoType(const AutoType *T)
void VisitObjCInterfaceType(const ObjCInterfaceType *T)
void visitVerbatimLineComment(const comments::VerbatimLineComment *C, const comments::FullComment *)
void VisitTypedefDecl(const TypedefDecl *D)
void VisitUnaryExprOrTypeTraitExpr(const UnaryExprOrTypeTraitExpr *Node)
void visitParamCommandComment(const comments::ParamCommandComment *C, const comments::FullComment *FC)
void VisitIntegerLiteral(const IntegerLiteral *Node)
void VisitObjCProtocolDecl(const ObjCProtocolDecl *D)
void VisitGotoStmt(const GotoStmt *Node)
void VisitDependentSizedExtVectorType(const DependentSizedExtVectorType *T)
void VisitFriendDecl(const FriendDecl *D)
void VisitSwitchStmt(const SwitchStmt *Node)
void VisitCXXBindTemporaryExpr(const CXXBindTemporaryExpr *Node)
void VisitEmbedExpr(const EmbedExpr *S)
void VisitFunctionTemplateDecl(const FunctionTemplateDecl *D)
void VisitTemplateTemplateParmDecl(const TemplateTemplateParmDecl *D)
void VisitUsingDecl(const UsingDecl *D)
void VisitConstantArrayType(const ConstantArrayType *T)
void VisitTypeTemplateArgument(const TemplateArgument &TA)
void VisitObjCPropertyDecl(const ObjCPropertyDecl *D)
void VisitObjCCategoryImplDecl(const ObjCCategoryImplDecl *D)
void VisitObjCSubscriptRefExpr(const ObjCSubscriptRefExpr *Node)
void VisitArrayType(const ArrayType *T)
void visitHTMLEndTagComment(const comments::HTMLEndTagComment *C, const comments::FullComment *)
void VisitObjCAtCatchStmt(const ObjCAtCatchStmt *Node)
void visitTextComment(const comments::TextComment *C, const comments::FullComment *)
void VisitLifetimeExtendedTemporaryDecl(const LifetimeExtendedTemporaryDecl *D)
void VisitCXXRecordDecl(const CXXRecordDecl *D)
void VisitTemplateTemplateArgument(const TemplateArgument &TA)
void dumpCleanupObject(const ExprWithCleanups::CleanupObject &C)
void VisitOpenACCExitDataConstruct(const OpenACCExitDataConstruct *S)
void VisitCaseStmt(const CaseStmt *Node)
void VisitRValueReferenceType(const ReferenceType *T)
void VisitPackExpansionType(const PackExpansionType *T)
void VisitConceptDecl(const ConceptDecl *D)
void VisitOpenACCEnterDataConstruct(const OpenACCEnterDataConstruct *S)
void VisitCallExpr(const CallExpr *Node)
void VisitCapturedDecl(const CapturedDecl *D)
void VisitOpenACCWaitConstruct(const OpenACCWaitConstruct *S)
void VisitBuiltinTemplateDecl(const BuiltinTemplateDecl *D)
void VisitObjCPropertyRefExpr(const ObjCPropertyRefExpr *Node)
void VisitOMPDeclareReductionDecl(const OMPDeclareReductionDecl *D)
void VisitCoreturnStmt(const CoreturnStmt *Node)
void VisitSizeOfPackExpr(const SizeOfPackExpr *Node)
void VisitDeclRefExpr(const DeclRefExpr *Node)
void VisitLabelStmt(const LabelStmt *Node)
void VisitOpenACCUpdateConstruct(const OpenACCUpdateConstruct *S)
void Visit(const comments::Comment *C, const comments::FullComment *FC)
void VisitLabelDecl(const LabelDecl *D)
void VisitUnaryTransformType(const UnaryTransformType *T)
void VisitStringLiteral(const StringLiteral *Str)
void VisitOMPRequiresDecl(const OMPRequiresDecl *D)
void dumpBareType(QualType T, bool Desugar=true)
void VisitTemplateSpecializationType(const TemplateSpecializationType *T)
void VisitOpenACCInitConstruct(const OpenACCInitConstruct *S)
void VisitTemplateTypeParmDecl(const TemplateTypeParmDecl *D)
void VisitCompoundAssignOperator(const CompoundAssignOperator *Node)
void VisitCXXThisExpr(const CXXThisExpr *Node)
void VisitOpenACCRoutineDeclAttr(const OpenACCRoutineDeclAttr *A)
void dumpName(const NamedDecl *ND)
void dumpTemplateName(TemplateName TN, StringRef Label={})
void VisitArrayTypeTraitExpr(const ArrayTypeTraitExpr *Node)
void VisitObjCIvarDecl(const ObjCIvarDecl *D)
void VisitFieldDecl(const FieldDecl *D)
void dumpDeclRef(const Decl *D, StringRef Label={})
void VisitRecordDecl(const RecordDecl *D)
void VisitCXXNewExpr(const CXXNewExpr *Node)
void VisitObjCBoolLiteralExpr(const ObjCBoolLiteralExpr *Node)
void VisitCastExpr(const CastExpr *Node)
void VisitObjCTypeParamDecl(const ObjCTypeParamDecl *D)
void VisitSubstTemplateTypeParmType(const SubstTemplateTypeParmType *T)
void VisitExpressionTraitExpr(const ExpressionTraitExpr *Node)
void VisitAddrLabelExpr(const AddrLabelExpr *Node)
void VisitUnresolvedUsingTypenameDecl(const UnresolvedUsingTypenameDecl *D)
void VisitCXXDependentScopeMemberExpr(const CXXDependentScopeMemberExpr *Node)
void VisitOpenACCAtomicConstruct(const OpenACCAtomicConstruct *S)
void dumpLinkageAndVisibility(const NamedDecl *ND)
void visitBlockCommandComment(const comments::BlockCommandComment *C, const comments::FullComment *)
void VisitExpressionTemplateArgument(const TemplateArgument &TA)
void VisitTypeAliasDecl(const TypeAliasDecl *D)
void VisitVarDecl(const VarDecl *D)
void VisitOpenACCCacheConstruct(const OpenACCCacheConstruct *S)
void VisitFixedPointLiteral(const FixedPointLiteral *Node)
void VisitOMPIteratorExpr(const OMPIteratorExpr *Node)
void VisitUsingDirectiveDecl(const UsingDirectiveDecl *D)
void VisitObjCMethodDecl(const ObjCMethodDecl *D)
void VisitObjCPropertyImplDecl(const ObjCPropertyImplDecl *D)
void VisitUsingShadowDecl(const UsingShadowDecl *D)
void VisitNamespaceDecl(const NamespaceDecl *D)
void VisitTypeAliasTemplateDecl(const TypeAliasTemplateDecl *D)
void VisitOpenACCHostDataConstruct(const OpenACCHostDataConstruct *S)
void VisitCXXBoolLiteralExpr(const CXXBoolLiteralExpr *Node)
void VisitIfStmt(const IfStmt *Node)
void VisitCXXConstructExpr(const CXXConstructExpr *Node)
void VisitFunctionProtoType(const FunctionProtoType *T)
void dumpTemplateArgument(const TemplateArgument &TA)
void dumpLocation(SourceLocation Loc)
void VisitDependentSizedArrayType(const DependentSizedArrayType *T)
void VisitOpenACCCombinedConstruct(const OpenACCCombinedConstruct *S)
void VisitOMPExecutableDirective(const OMPExecutableDirective *D)
void VisitImplicitCastExpr(const ImplicitCastExpr *Node)
void VisitCXXDefaultArgExpr(const CXXDefaultArgExpr *Node)
void VisitCXXNamedCastExpr(const CXXNamedCastExpr *Node)
void VisitTagType(const TagType *T)
void VisitTemplateExpansionTemplateArgument(const TemplateArgument &TA)
void VisitSYCLUniqueStableNameExpr(const SYCLUniqueStableNameExpr *Node)
void VisitNonTypeTemplateParmDecl(const NonTypeTemplateParmDecl *D)
void VisitOpenACCSetConstruct(const OpenACCSetConstruct *S)
void VisitFunctionDecl(const FunctionDecl *D)
void visitTParamCommandComment(const comments::TParamCommandComment *C, const comments::FullComment *FC)
void VisitTypeTraitExpr(const TypeTraitExpr *Node)
void dumpBareDeclRef(const Decl *D)
void VisitExtVectorElementExpr(const ExtVectorElementExpr *Node)
void VisitConvertVectorExpr(const ConvertVectorExpr *S)
void visitVerbatimBlockLineComment(const comments::VerbatimBlockLineComment *C, const comments::FullComment *)
void VisitOpenACCShutdownConstruct(const OpenACCShutdownConstruct *S)
void dumpBareConcept(TemplateName TN)
void VisitFloatingLiteral(const FloatingLiteral *Node)
void VisitInitListExpr(const InitListExpr *ILE)
void VisitRequiresExpr(const RequiresExpr *Node)
void VisitVariableArrayType(const VariableArrayType *T)
void VisitGenericSelectionExpr(const GenericSelectionExpr *E)
void VisitTemplateTypeParmType(const TemplateTypeParmType *T)
void VisitCXXDefaultInitExpr(const CXXDefaultInitExpr *Node)
void VisitFriendTemplateDecl(const FriendTemplateDecl *D)
void visitHTMLStartTagComment(const comments::HTMLStartTagComment *C, const comments::FullComment *)
void VisitEnumConstantDecl(const EnumConstantDecl *D)
void VisitPragmaDetectMismatchDecl(const PragmaDetectMismatchDecl *D)
void dumpTemplateSpecializationKind(TemplateSpecializationKind TSK)
void VisitAtomicExpr(const AtomicExpr *AE)
void VisitObjCCompatibleAliasDecl(const ObjCCompatibleAliasDecl *D)
void VisitClassTemplateDecl(const ClassTemplateDecl *D)
void VisitBindingDecl(const BindingDecl *D)
void VisitCXXExpansionStmtPattern(const CXXExpansionStmtPattern *Node)
void VisitTypedefType(const TypedefType *T)
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.
Definition Decl.h:3823
Declaration of an alias template.
Symbolic representation of typeid(T) for some type T.
Definition APValue.h:44
RetTy Visit(TypeLoc TyLoc)
Base wrapper for a particular "section" of type source info.
Definition TypeLoc.h:59
QualType getType() const
Get the type for which this source info wrapper provides information.
Definition TypeLoc.h:133
SourceRange getSourceRange() const LLVM_READONLY
Get the full source range.
Definition TypeLoc.h:154
TypeLocClass getTypeLocClass() const
Definition TypeLoc.h:116
const Type * getTypePtr() const
Definition TypeLoc.h:137
A container of type source information.
Definition TypeBase.h:8472
QualType getType() const
Return the type wrapped by this type source info.
Definition TypeBase.h:8483
A type trait used in the implementation of various C++11 and Library TR1 trait templates.
Definition ExprCXX.h:2900
TypeTrait getTrait() const
Determine which type trait this expression uses.
Definition ExprCXX.h:2949
RetTy Visit(const Type *T)
Performs the operation associated with this visitor object.
Definition TypeVisitor.h:68
The base class of the type hierarchy.
Definition TypeBase.h:1879
bool isSignedIntegerType() const
Return true if this is an integer type that is signed, according to C99 6.2.5p4 [char,...
Definition Type.cpp:2296
TagDecl * getAsTagDecl() const
Retrieves the TagDecl that this type refers to, either because the type is a TagType or because it is...
Definition Type.h:63
bool isDependentType() const
Whether this type is a dependent type, meaning that its definition somehow depends on a template para...
Definition TypeBase.h:2859
const char * getTypeClassName() const
Definition Type.cpp:3509
const T * getAs() const
Member-template getAs<specific type>'.
Definition TypeBase.h:9337
Represents the declaration of a typedef-name via the 'typedef' type specifier.
Definition Decl.h:3802
QualType getUnderlyingType() const
Definition Decl.h:3752
UnaryExprOrTypeTraitExpr - expression with either a type or (unevaluated) expression operand.
Definition Expr.h:2669
QualType getArgumentType() const
Definition Expr.h:2712
UnaryExprOrTypeTrait getKind() const
Definition Expr.h:2701
UnaryOperator - This represents the unary-expression's (except sizeof and alignof),...
Definition Expr.h:2288
static bool isPostfix(Opcode Op)
isPostfix - Return true if this is a postfix operation, like x++.
Definition Expr.h:2358
Opcode getOpcode() const
Definition Expr.h:2324
bool hasStoredFPFeatures() const
Is FPFeatures in Trailing Storage?
Definition Expr.h:2425
FPOptionsOverride getStoredFPFeatures() const
Get FPFeatures from trailing storage.
Definition Expr.h:2428
static StringRef getOpcodeStr(Opcode Op)
getOpcodeStr - Turn an Opcode enum value into the punctuation char it corresponds to,...
Definition Expr.cpp:1434
bool canOverflow() const
Returns true if the unary operator can cause an overflow.
Definition Expr.h:2342
A reference to a name which we were able to look up during parsing but could not resolve to a specifi...
Definition ExprCXX.h:3372
bool requiresADL() const
True if this declaration should be extended by argument-dependent lookup.
Definition ExprCXX.h:3441
Represents the dependent type named by a dependently-scoped typename using declaration,...
Definition TypeBase.h:6136
Represents a dependent using declaration which was marked with typename.
Definition DeclCXX.h:4066
NestedNameSpecifier getQualifier() const
Retrieve the nested-name-specifier that qualifies the name.
Definition DeclCXX.h:4103
Represents a dependent using declaration which was not marked with typename.
Definition DeclCXX.h:3969
NestedNameSpecifier getQualifier() const
Retrieve the nested-name-specifier that qualifies the name.
Definition DeclCXX.h:4013
Represents a C++ using-declaration.
Definition DeclCXX.h:3620
NestedNameSpecifier getQualifier() const
Retrieve the nested-name-specifier that qualifies the name.
Definition DeclCXX.h:3657
Represents C++ using-directive.
Definition DeclCXX.h:3125
NamespaceDecl * getNominatedNamespace()
Returns the namespace nominated by this using-directive.
Definition DeclCXX.cpp:3357
Represents a C++ using-enum-declaration.
Definition DeclCXX.h:3821
EnumDecl * getEnumDecl() const
Definition DeclCXX.h:3863
Represents a shadow declaration implicitly introduced into a scope by a (resolved) using-declaration ...
Definition DeclCXX.h:3428
NamedDecl * getTargetDecl() const
Gets the underlying declaration which has been brought into the local scope.
Definition DeclCXX.h:3492
Represent the declaration of a variable (in which case it is an lvalue) a function (in which case it ...
Definition Decl.h:713
QualType getType() const
Definition Decl.h:724
bool isParameterPack() const
Determine whether this value is actually a function parameter pack, init-capture pack,...
Definition Decl.cpp:5657
Kind getKind() const
Definition Value.h:137
Represents a variable declaration or definition.
Definition Decl.h:933
VarTemplateDecl * getDescribedVarTemplate() const
Retrieves the variable template that is described by this variable declaration.
Definition Decl.cpp:2782
bool isConstexpr() const
Whether this variable is (C++11) constexpr.
Definition Decl.h:1594
TLSKind getTLSKind() const
Definition Decl.cpp:2150
bool hasInit() const
Definition Decl.cpp:2380
InitializationStyle getInitStyle() const
The style of initialization for this declaration.
Definition Decl.h:1491
static const char * getStorageClassSpecifierString(StorageClass SC)
Return the string used to specify the storage class SC.
Definition Decl.cpp:2103
@ ListInit
Direct list-initialization (C++11)
Definition Decl.h:944
@ CInit
C-style initialization with assignment.
Definition Decl.h:938
@ ParenListInit
Parenthesized list-initialization (C++20)
Definition Decl.h:947
@ CallInit
Call-style initialization (C++98)
Definition Decl.h:941
VarDecl * getTemplateInstantiationPattern() const
Retrieve the variable declaration from which this variable could be instantiated, if it is an instant...
Definition Decl.cpp:2699
bool isNRVOVariable() const
Determine whether this local variable can be used with the named return value optimization (NRVO).
Definition Decl.h:1537
QualType::DestructionKind needsDestruction(const ASTContext &Ctx) const
Would the destruction of this variable have any effect, and if so, what kind?
Definition Decl.cpp:2823
bool isInline() const
Whether this variable is (C++1z) inline.
Definition Decl.h:1576
const Expr * getInit() const
Definition Decl.h:1392
const APValue * evaluateValue() const
Attempt to evaluate the value of the initializer attached to this declaration, and produce notes expl...
Definition Decl.cpp:2557
@ TLS_Static
TLS with a known-constant initializer.
Definition Decl.h:956
@ TLS_Dynamic
TLS with a dynamic initializer.
Definition Decl.h:959
@ TLS_None
Not a TLS variable.
Definition Decl.h:953
StorageClass getStorageClass() const
Returns the storage class as written in the source.
Definition Decl.h:1175
TemplateSpecializationKind getTemplateSpecializationKind() const
If this variable is an instantiation of a variable template or a static data member of a class templa...
Definition Decl.cpp:2751
Declaration of a variable template.
Represents a C array with a specified size that is not an integer-constant-expression.
Definition TypeBase.h:4080
Represents a GCC generic vector type.
Definition TypeBase.h:4289
WhileStmt - This represents a 'while' stmt.
Definition Stmt.h:2709
bool hasVarStorage() const
True if this WhileStmt has storage for a condition variable.
Definition Stmt.h:2759
A command that has zero or more word-like arguments (number of word-like arguments depends on command...
Definition Comment.h:616
static const CommandInfo * getBuiltinCommandInfo(StringRef Name)
Any part of the comment.
Definition Comment.h:66
A full comment attached to a declaration, contains block content.
Definition Comment.h:1097
An opening HTML tag with attributes.
Definition Comment.h:445
A command with word-like arguments that is considered inline content.
Definition Comment.h:341
Doxygen \param command.
Definition Comment.h:723
static const char * getDirectionAsString(ParamCommandPassDirection D)
Definition Comment.cpp:189
Doxygen \tparam command, describes a template parameter.
Definition Comment.h:805
A verbatim block command (e.
Definition Comment.h:891
A line of text contained in a verbatim block.
Definition Comment.h:866
A verbatim line command.
Definition Comment.h:942
A static requirement that can be used in a requires-expression to check properties of types and expre...
Top level wrappers for InstallAPI frontend operations.
const char * getTraitSpelling(TypeTrait T) LLVM_READONLY
Return the spelling of the trait T. Never null.
bool isa(CodeGen::Address addr)
Definition Address.h:330
llvm::StringRef getAccessSpelling(AccessSpecifier AS)
Definition Specifiers.h:420
@ PCK_ExeStr
Definition PragmaKinds.h:19
@ PCK_Compiler
Definition PragmaKinds.h:18
@ PCK_Linker
Definition PragmaKinds.h:16
@ PCK_Lib
Definition PragmaKinds.h:17
@ PCK_Copyright
Definition PragmaKinds.h:21
@ PCK_Unknown
Definition PragmaKinds.h:15
@ PCK_User
Definition PragmaKinds.h:20
@ RQ_None
No ref-qualifier was provided.
Definition TypeBase.h:1801
@ RQ_LValue
An lvalue ref-qualifier was provided (&).
Definition TypeBase.h:1804
@ RQ_RValue
An rvalue ref-qualifier was provided (&&).
Definition TypeBase.h:1807
@ OK_VectorComponent
A vector component is an element or range of elements of a vector.
Definition Specifiers.h:158
@ OK_ObjCProperty
An Objective-C property is a logical field of an Objective-C object which is read and written via Obj...
Definition Specifiers.h:162
@ OK_ObjCSubscript
An Objective-C array/dictionary subscripting which reads an object or writes at the subscripted array...
Definition Specifiers.h:167
@ OK_Ordinary
An ordinary object is located at an address in memory.
Definition Specifiers.h:152
@ OK_BitField
A bitfield object is a bitfield on a C or C++ record.
Definition Specifiers.h:155
@ OK_MatrixComponent
A matrix component is a single element or range of elements of a matrix.
Definition Specifiers.h:170
@ Override
Merge availability attributes for an override, which requires an exact match or a weakening of constr...
Definition Sema.h:630
@ 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...
Definition Specifiers.h:124
StorageClass
Storage classes.
Definition Specifiers.h:249
@ SC_None
Definition Specifiers.h:251
IdentifierLoc DeviceTypeArgument
@ VisibleNone
No linkage according to the standard, but is visible from other translation units because of types de...
Definition Linkage.h:48
@ None
No linkage, which means that the entity is unique and can only be referred to from within its scope.
Definition Linkage.h:30
@ UniqueExternal
External linkage within a unique namespace.
Definition Linkage.h:44
@ Internal
Internal linkage, which indicates that the entity can be referred to from within the translation unit...
Definition Linkage.h:35
@ External
External linkage, which indicates that the entity can be referred to from other translation units.
Definition Linkage.h:58
@ Module
Module linkage, which indicates that the entity can be referred to from other translation units withi...
Definition Linkage.h:54
OptionalUnsigned< unsigned > UnsignedOrNone
const FunctionProtoType * T
@ Deduced
The normal deduced case.
Definition TypeBase.h:1818
@ Undeduced
Not deduced yet. This is for example an 'auto' which was just parsed.
Definition TypeBase.h:1813
@ DeducedAsPack
Same as above, but additionally this represents a case where the deduced entity itself is a pack.
Definition TypeBase.h:1834
@ DeducedAsDependent
This is a special case where the initializer is dependent, so we can't deduce a type yet.
Definition TypeBase.h:1828
@ VK_PRValue
A pr-value expression (in the C++11 taxonomy) produces a temporary value.
Definition Specifiers.h:136
@ VK_XValue
An x-value expression is a reference to an object with independent storage but which can be "moved",...
Definition Specifiers.h:145
@ VK_LValue
An l-value expression is a reference to an object with independent storage.
Definition Specifiers.h:140
TemplateSpecializationKind
Describes the kind of template specialization that a particular template specialization declaration r...
Definition Specifiers.h:189
@ TSK_ExplicitInstantiationDefinition
This template specialization was instantiated from a template due to an explicit instantiation defini...
Definition Specifiers.h:207
@ TSK_ExplicitInstantiationDeclaration
This template specialization was instantiated from a template due to an explicit instantiation declar...
Definition Specifiers.h:203
@ TSK_ExplicitSpecialization
This template specialization was declared or defined by an explicit specialization (C++ [temp....
Definition Specifiers.h:199
@ TSK_ImplicitInstantiation
This template specialization was implicitly instantiated from a template.
Definition Specifiers.h:195
@ TSK_Undeclared
This template specialization was formed from a template-id but has not yet been declared,...
Definition Specifiers.h:192
@ Invariant
The parameter is invariant: must match exactly.
Definition DeclObjC.h:558
@ Contravariant
The parameter is contravariant, e.g., X<T> is a subtype of X when the type parameter is covariant and...
Definition DeclObjC.h:566
@ Covariant
The parameter is covariant, e.g., X<T> is a subtype of X when the type parameter is covariant and T i...
Definition DeclObjC.h:562
const char * getOperatorSpelling(OverloadedOperatorKind Operator)
Retrieve the spelling of the given overloaded operator, without the preceding "operator" keyword.
@ AltiVecBool
is AltiVec 'vector bool ...'
Definition TypeBase.h:4259
@ SveFixedLengthData
is AArch64 SVE fixed-length data vector
Definition TypeBase.h:4268
@ AltiVecVector
is AltiVec vector
Definition TypeBase.h:4253
@ AltiVecPixel
is AltiVec 'vector Pixel'
Definition TypeBase.h:4256
@ Neon
is ARM Neon vector
Definition TypeBase.h:4262
@ Generic
not a target-specific vector type
Definition TypeBase.h:4250
@ RVVFixedLengthData
is RISC-V RVV fixed-length data vector
Definition TypeBase.h:4274
@ RVVFixedLengthMask
is RISC-V RVV fixed-length mask vector
Definition TypeBase.h:4277
@ NeonPoly
is ARM Neon polynomial vector
Definition TypeBase.h:4265
@ SveFixedLengthPredicate
is AArch64 SVE fixed-length predicate vector
Definition TypeBase.h:4271
U cast(CodeGen::Address addr)
Definition Address.h:327
@ PackIndex
Index of a pack indexing expression or specifier.
Definition Sema.h:845
ElaboratedTypeKeyword
The elaboration keyword that precedes a qualified type name or introduces an elaborated-type-specifie...
Definition TypeBase.h:6019
@ None
No keyword precedes the qualified type name.
Definition TypeBase.h:6040
llvm::omp::Clause OpenMPClauseKind
OpenMP clauses.
Definition OpenMPKinds.h:28
@ 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)
@ HiddenVisibility
Objects with "hidden" visibility are not seen by the dynamic linker.
Definition Visibility.h:37
@ ProtectedVisibility
Objects with "protected" visibility are seen by the dynamic linker but always dynamically resolve to ...
Definition Visibility.h:42
@ DefaultVisibility
Objects with "default" visibility are seen by the dynamic linker and act like normal objects.
Definition Visibility.h:46
@ NOUR_Discarded
This name appears as a potential result of a discarded value expression.
Definition Specifiers.h:184
@ NOUR_Unevaluated
This name appears in an unevaluated operand.
Definition Specifiers.h:178
@ NOUR_None
This is an odr-use.
Definition Specifiers.h:176
@ NOUR_Constant
This name appears as a potential result of an lvalue-to-rvalue conversion that is a constant expressi...
Definition Specifiers.h:181
static constexpr TerminalColor Value
static constexpr TerminalColor Address
static constexpr TerminalColor Comment
static constexpr TerminalColor DeclKindName
static constexpr TerminalColor ObjectKind
static constexpr TerminalColor Null
static constexpr TerminalColor Location
static constexpr TerminalColor Attr
static constexpr TerminalColor DeclName
static constexpr TerminalColor Stmt
static constexpr TerminalColor Cast
static constexpr TerminalColor ValueKind
static constexpr TerminalColor Undeserialized
static constexpr TerminalColor Type
static constexpr TerminalColor Errors
FunctionDecl * SourceDecl
The function whose exception specification this is, for EST_Unevaluated and EST_Uninstantiated.
Definition TypeBase.h:5490
FunctionDecl * SourceTemplate
The function template whose exception specification this is instantiated from, for EST_Uninstantiated...
Definition TypeBase.h:5494
ExceptionSpecificationType Type
The kind of exception specification this is.
Definition TypeBase.h:5480
Extra information about a function prototype.
Definition TypeBase.h:5506
static StringRef getKeywordName(ElaboratedTypeKeyword Keyword)
Definition Type.cpp:3468
Iterator range representation begin:end[:step].
Definition ExprOpenMP.h:154
A std::pair-like structure for storing a qualified type split into its local qualifiers and its local...
Definition TypeBase.h:871
Information about a single command.