| ; 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: } |