From a2c5a552d42ca2e3d8e0e526c552d25795778b5c Mon Sep 17 00:00:00 2001 From: Alex Lorenz Date: Tue, 3 Jan 2017 12:07:20 +0000 Subject: [PATCH] Handle FriendDecl in DeclContextPrinter This commit fixes a crash that occurs when -print-decl-contexts AST consumer tries to print an unhandled declaration. rdar://19467234 Differential Revision: https://reviews.llvm.org/D26964 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@290880 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Frontend/ASTConsumers.cpp | 7 +++++++ test/Coverage/cxx-language-features.inc | 8 ++++++++ 2 files changed, 15 insertions(+) diff --git a/lib/Frontend/ASTConsumers.cpp b/lib/Frontend/ASTConsumers.cpp index bd2ee06d16..329f15fbef 100644 --- a/lib/Frontend/ASTConsumers.cpp +++ b/lib/Frontend/ASTConsumers.cpp @@ -478,6 +478,13 @@ void DeclContextPrinter::PrintDeclContext(const DeclContext* DC, Out << " " << '"' << I << "\"\n"; break; } + case Decl::Friend: { + Out << ""; + if (const NamedDecl *ND = cast(I)->getFriendDecl()) + Out << ' ' << *ND; + Out << "\n"; + break; + } default: Out << "DeclKind: " << DK << '"' << I << "\"\n"; llvm_unreachable("decl unhandled"); diff --git a/test/Coverage/cxx-language-features.inc b/test/Coverage/cxx-language-features.inc index 31b50be335..18e28e0fab 100644 --- a/test/Coverage/cxx-language-features.inc +++ b/test/Coverage/cxx-language-features.inc @@ -25,3 +25,11 @@ enum E1 { EC1 }; template class C1 {}; template C1 f1() { return C1(); } void f2() { f1(); } + +// Friend declarations +struct FriendlyStruct { + friend bool operator==(FriendlyStruct, FriendlyStruct) { return true; } + friend struct FriendedStruct; +}; + +struct FriendedStruct { }; -- 2.40.0