| ; The following two object files were generated using the following command: |
| ; $ cl /Z7 /c t.cpp |
| ; The contents of t.cpp follow: |
| ; struct A { |
| ; virtual void f(); |
| ; }; |
| ; struct B { |
| ; virtual void f(); |
| ; virtual void g(); |
| ; }; |
| ; struct C { |
| ; virtual void f(); |
| ; virtual void g(); |
| ; virtual void h(); |
| ; }; |
| ; A a; |
| ; B b; |
| ; C c; |
| |
| RUN: llvm-readobj -codeview %p/Inputs/codeview-vftable.obj.coff | FileCheck %s |
| |
| CHECK: VFTable (0x10F0) { |
| CHECK-NEXT: TypeLeafKind: LF_VFTABLE (0x151D) |
| CHECK-NEXT: CompleteClass: A |
| CHECK-NEXT: OverriddenVFTable: 0x0 |
| CHECK-NEXT: VFPtrOffset: 0x0 |
| CHECK-NEXT: VFTableName: ??_7A@@6B@ |
| CHECK-NEXT: MethodName: ?f@A@@UEAAXXZ |
| CHECK-NEXT: } |
| CHECK-NEXT: VFTable (0x10F1) { |
| CHECK-NEXT: TypeLeafKind: LF_VFTABLE (0x151D) |
| CHECK-NEXT: CompleteClass: B |
| CHECK-NEXT: OverriddenVFTable: ??_7A@@6B@ (0x10F0) |
| CHECK-NEXT: VFPtrOffset: 0x0 |
| CHECK-NEXT: VFTableName: ??_7B@@6B@ |
| CHECK-NEXT: MethodName: ?f@B@@UEAAXXZ |
| CHECK-NEXT: MethodName: ?g@B@@UEAAXXZ |
| CHECK-NEXT: } |
| CHECK-NEXT: VFTable (0x10F2) { |
| CHECK-NEXT: TypeLeafKind: LF_VFTABLE (0x151D) |
| CHECK-NEXT: CompleteClass: C |
| CHECK-NEXT: OverriddenVFTable: ??_7B@@6B@ (0x10F1) |
| CHECK-NEXT: VFPtrOffset: 0x0 |
| CHECK-NEXT: VFTableName: ??_7C@@6B@ |
| CHECK-NEXT: MethodName: ?f@C@@UEAAXXZ |
| CHECK-NEXT: MethodName: ?g@C@@UEAAXXZ |
| CHECK-NEXT: MethodName: ?h@C@@UEAAXXZ |
| CHECK-NEXT: } |