summaryrefslogtreecommitdiffstats
path: root/llvm/test/tools/llvm-readobj/codeview-vftable.test
diff options
context:
space:
mode:
authorReid Kleckner <rnk@google.com>2016-05-12 22:46:41 +0000
committerReid Kleckner <rnk@google.com>2016-05-12 22:46:41 +0000
commit0e85b9730771f3f792dd3faccd06798e707b623f (patch)
tree5c1f8a6a09fe6257ed9086a8d8e810dc64783678 /llvm/test/tools/llvm-readobj/codeview-vftable.test
parent1059a067f9936f76fac2ad20d184481505cfd8ac (diff)
downloadbcm5719-llvm-0e85b9730771f3f792dd3faccd06798e707b623f.tar.gz
bcm5719-llvm-0e85b9730771f3f792dd3faccd06798e707b623f.zip
[codeview] Fix dumping VFTables, stop when we see LF_PAD*
Also stop visiting type records when we encounter an error. llvm-svn: 269374
Diffstat (limited to 'llvm/test/tools/llvm-readobj/codeview-vftable.test')
-rw-r--r--llvm/test/tools/llvm-readobj/codeview-vftable.test51
1 files changed, 51 insertions, 0 deletions
diff --git a/llvm/test/tools/llvm-readobj/codeview-vftable.test b/llvm/test/tools/llvm-readobj/codeview-vftable.test
new file mode 100644
index 00000000000..4091ccacf78
--- /dev/null
+++ b/llvm/test/tools/llvm-readobj/codeview-vftable.test
@@ -0,0 +1,51 @@
+; 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: VFTableType {
+CHECK-NEXT: TypeLeafKind: LF_VFTABLE (0x151D)
+CHECK-NEXT: TypeIndex: 0x10F0
+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: VFTableType {
+CHECK-NEXT: TypeLeafKind: LF_VFTABLE (0x151D)
+CHECK-NEXT: TypeIndex: 0x10F1
+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: VFTableType {
+CHECK-NEXT: TypeLeafKind: LF_VFTABLE (0x151D)
+CHECK-NEXT: TypeIndex: 0x10F2
+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: }
OpenPOWER on IntegriCloud