Note deleted functions when dumping vtables.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@166056 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/AST/VTableBuilder.cpp b/lib/AST/VTableBuilder.cpp
index 104530f..33dad40 100644
--- a/lib/AST/VTableBuilder.cpp
+++ b/lib/AST/VTableBuilder.cpp
@@ -1891,6 +1891,9 @@
       if (MD->isPure())
         Out << " [pure]";
 
+      if (MD->isDeleted())
+        Out << " [deleted]";
+
       ThunkInfo Thunk = VTableThunks.lookup(I);
       if (!Thunk.isEmpty()) {
         // If this function pointer has a return adjustment, dump it.
diff --git a/test/CodeGenCXX/vtable-layout.cpp b/test/CodeGenCXX/vtable-layout.cpp
index d7644b9..1e831d2 100644
--- a/test/CodeGenCXX/vtable-layout.cpp
+++ b/test/CodeGenCXX/vtable-layout.cpp
@@ -43,6 +43,7 @@
 // RUN: FileCheck --check-prefix=CHECK-42 %s < %t
 // RUN: FileCheck --check-prefix=CHECK-43 %s < %t
 // RUN: FileCheck --check-prefix=CHECK-44 %s < %t
+// RUN: FileCheck --check-prefix=CHECK-45 %s < %t
 
 // For now, just verify this doesn't crash.
 namespace test0 {
@@ -1727,3 +1728,23 @@
 
   void *B::foo() { return 0; }
 }
+
+namespace Test39 {
+  struct A {
+    virtual void foo() = delete;
+  };
+
+  // CHECK-45:      Vtable for 'Test39::B' (4 entries).
+  // CHECK-45-NEXT:    0 | offset_to_top (0)
+  // CHECK-45-NEXT:    1 | Test39::B RTTI
+  // CHECK-45-NEXT:        -- (Test39::A, 0) vtable address --
+  // CHECK-45-NEXT:        -- (Test39::B, 0) vtable address --
+  // CHECK-45-NEXT:    2 | void Test39::A::foo() [deleted]
+  // CHECK-45-NEXT:    3 | void Test39::B::foo2()
+  struct B: A {
+    virtual void foo2();
+  };
+
+  void B::foo2() {
+  }
+}