Index: include/clang/AST/TextNodeDumper.h =================================================================== --- include/clang/AST/TextNodeDumper.h +++ include/clang/AST/TextNodeDumper.h @@ -172,6 +172,8 @@ void Visit(const BlockDecl::Capture &C); + void Visit(const GenericSelectionExpr::ConstAssociation &A); + void dumpPointer(const void *Ptr); void dumpLocation(SourceLocation Loc); void dumpSourceRange(SourceRange R); Index: lib/AST/ASTDumper.cpp =================================================================== --- lib/AST/ASTDumper.cpp +++ lib/AST/ASTDumper.cpp @@ -297,6 +297,7 @@ void VisitInitListExpr(const InitListExpr *ILE); void VisitBlockExpr(const BlockExpr *Node); void VisitOpaqueValueExpr(const OpaqueValueExpr *Node); + void Visit(const GenericSelectionExpr::ConstAssociation &A); void VisitGenericSelectionExpr(const GenericSelectionExpr *E); // C++ @@ -1456,6 +1457,15 @@ dumpStmt(Source); } +void ASTDumper::Visit(const GenericSelectionExpr::ConstAssociation &A) { + dumpChild([=] { + NodeDumper.Visit(A); + if (const TypeSourceInfo *TSI = A.getTypeSourceInfo()) + dumpTypeAsChild(TSI->getType()); + dumpStmt(A.getAssociationExpr()); + }); +} + void ASTDumper::VisitGenericSelectionExpr(const GenericSelectionExpr *E) { if (E->isResultDependent()) OS << " result_dependent"; @@ -1463,21 +1473,7 @@ dumpTypeAsChild(E->getControllingExpr()->getType()); // FIXME: remove for (const auto &Assoc : E->associations()) { - dumpChild([=] { - if (const TypeSourceInfo *TSI = Assoc.getTypeSourceInfo()) { - OS << "case "; - NodeDumper.dumpType(TSI->getType()); - } else { - OS << "default"; - } - - if (Assoc.isSelected()) - OS << " selected"; - - if (const TypeSourceInfo *TSI = Assoc.getTypeSourceInfo()) - dumpTypeAsChild(TSI->getType()); - dumpStmt(Assoc.getAssociationExpr()); - }); + Visit(Assoc); } } Index: lib/AST/TextNodeDumper.cpp =================================================================== --- lib/AST/TextNodeDumper.cpp +++ lib/AST/TextNodeDumper.cpp @@ -312,6 +312,19 @@ OS << " "; } +void TextNodeDumper::Visit(const GenericSelectionExpr::ConstAssociation &A) { + const TypeSourceInfo *TSI = A.getTypeSourceInfo(); + if (TSI) { + OS << "case "; + dumpType(TSI->getType()); + } else { + OS << "default"; + } + + if (A.isSelected()) + OS << " selected"; +} + void TextNodeDumper::dumpPointer(const void *Ptr) { ColorScope Color(OS, ShowColors, AddressColor); OS << ' ' << Ptr;