diff options
author | Alex Lorenz <arphaman@gmail.com> | 2017-01-03 12:07:20 +0000 |
---|---|---|
committer | Alex Lorenz <arphaman@gmail.com> | 2017-01-03 12:07:20 +0000 |
commit | 14abc7f0079db6a48db324b54be39f84036bdee5 (patch) | |
tree | 3c5d8c0ecf093300f863bd4876015f77376ca527 /clang | |
parent | 847fda1419d287843f87fc315fc4919466eca8fb (diff) | |
download | bcm5719-llvm-14abc7f0079db6a48db324b54be39f84036bdee5.tar.gz bcm5719-llvm-14abc7f0079db6a48db324b54be39f84036bdee5.zip |
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
llvm-svn: 290880
Diffstat (limited to 'clang')
-rw-r--r-- | clang/lib/Frontend/ASTConsumers.cpp | 7 | ||||
-rw-r--r-- | clang/test/Coverage/cxx-language-features.inc | 8 |
2 files changed, 15 insertions, 0 deletions
diff --git a/clang/lib/Frontend/ASTConsumers.cpp b/clang/lib/Frontend/ASTConsumers.cpp index bd2ee06d165..329f15fbef1 100644 --- a/clang/lib/Frontend/ASTConsumers.cpp +++ b/clang/lib/Frontend/ASTConsumers.cpp @@ -478,6 +478,13 @@ void DeclContextPrinter::PrintDeclContext(const DeclContext* DC, Out << "<omp threadprivate> " << '"' << I << "\"\n"; break; } + case Decl::Friend: { + Out << "<friend>"; + if (const NamedDecl *ND = cast<FriendDecl>(I)->getFriendDecl()) + Out << ' ' << *ND; + Out << "\n"; + break; + } default: Out << "DeclKind: " << DK << '"' << I << "\"\n"; llvm_unreachable("decl unhandled"); diff --git a/clang/test/Coverage/cxx-language-features.inc b/clang/test/Coverage/cxx-language-features.inc index 31b50be3358..18e28e0fabc 100644 --- a/clang/test/Coverage/cxx-language-features.inc +++ b/clang/test/Coverage/cxx-language-features.inc @@ -25,3 +25,11 @@ enum E1 { EC1 }; template <E1 v> class C1 {}; template <E1 v> C1<v> f1() { return C1<v>(); } void f2() { f1<EC1>(); } + +// Friend declarations +struct FriendlyStruct { + friend bool operator==(FriendlyStruct, FriendlyStruct) { return true; } + friend struct FriendedStruct; +}; + +struct FriendedStruct { }; |