]> granicus.if.org Git - clang/commitdiff
Handle FriendDecl in DeclContextPrinter
authorAlex Lorenz <arphaman@gmail.com>
Tue, 3 Jan 2017 12:07:20 +0000 (12:07 +0000)
committerAlex Lorenz <arphaman@gmail.com>
Tue, 3 Jan 2017 12:07:20 +0000 (12:07 +0000)
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
test/Coverage/cxx-language-features.inc

index bd2ee06d1653c6fc7d154654b250c58297adb3fc..329f15fbef1f2de10b4cd8bbacf9d13eb5526b61 100644 (file)
@@ -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");
index 31b50be3358981117601447a1aef5064fe28d5f5..18e28e0fabce3635e556d579edd1a7179c9d1d61 100644 (file)
@@ -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 { };