1 ; The following two object files were generated using the following command: 2 ; $ cl /Z7 /c t.cpp 3 ; The contents of t.cpp follow: 4 ; struct A { 5 ; virtual void f(); 6 ; }; 7 ; struct B { 8 ; virtual void f(); 9 ; virtual void g(); 10 ; }; 11 ; struct C { 12 ; virtual void f(); 13 ; virtual void g(); 14 ; virtual void h(); 15 ; }; 16 ; A a; 17 ; B b; 18 ; C c; 19 20 RUN: llvm-readobj -codeview %p/Inputs/codeview-vftable.obj.coff | FileCheck %s 21 22 CHECK: VFTable (0x10F0) { 23 CHECK-NEXT: TypeLeafKind: LF_VFTABLE (0x151D) 24 CHECK-NEXT: CompleteClass: A 25 CHECK-NEXT: OverriddenVFTable: 0x0 26 CHECK-NEXT: VFPtrOffset: 0x0 27 CHECK-NEXT: VFTableName: ??_7A@@6B@ 28 CHECK-NEXT: MethodName: ?f@A@@UEAAXXZ 29 CHECK-NEXT: } 30 CHECK-NEXT: VFTable (0x10F1) { 31 CHECK-NEXT: TypeLeafKind: LF_VFTABLE (0x151D) 32 CHECK-NEXT: CompleteClass: B 33 CHECK-NEXT: OverriddenVFTable: ??_7A@@6B@ (0x10F0) 34 CHECK-NEXT: VFPtrOffset: 0x0 35 CHECK-NEXT: VFTableName: ??_7B@@6B@ 36 CHECK-NEXT: MethodName: ?f@B@@UEAAXXZ 37 CHECK-NEXT: MethodName: ?g@B@@UEAAXXZ 38 CHECK-NEXT: } 39 CHECK-NEXT: VFTable (0x10F2) { 40 CHECK-NEXT: TypeLeafKind: LF_VFTABLE (0x151D) 41 CHECK-NEXT: CompleteClass: C 42 CHECK-NEXT: OverriddenVFTable: ??_7B@@6B@ (0x10F1) 43 CHECK-NEXT: VFPtrOffset: 0x0 44 CHECK-NEXT: VFTableName: ??_7C@@6B@ 45 CHECK-NEXT: MethodName: ?f@C@@UEAAXXZ 46 CHECK-NEXT: MethodName: ?g@C@@UEAAXXZ 47 CHECK-NEXT: MethodName: ?h@C@@UEAAXXZ 48 CHECK-NEXT: } 49