summaryrefslogtreecommitdiffstats
path: root/clang/test/CodeGenCXX/debug-info.cpp
diff options
context:
space:
mode:
authorReid Kleckner <reid@kleckner.net>2014-08-07 21:29:25 +0000
committerReid Kleckner <reid@kleckner.net>2014-08-07 21:29:25 +0000
commitd3b23d611b9cdd117d86c1b073335d2641482a77 (patch)
tree828a2a279d0796fea0b0f708c36072ecbfd055cb /clang/test/CodeGenCXX/debug-info.cpp
parent6c19ab1b5d47466974a6965a1e9dfe5907e60117 (diff)
downloadbcm5719-llvm-d3b23d611b9cdd117d86c1b073335d2641482a77.tar.gz
bcm5719-llvm-d3b23d611b9cdd117d86c1b073335d2641482a77.zip
Debug info: Use the vbtable offset for virtual bases in the MS ABI
There are no vtable offset offsets in the MS ABI, but vbtable offsets are analogous. There are no consumers of this information yet, but at least we don't crash now. llvm-svn: 215149
Diffstat (limited to 'clang/test/CodeGenCXX/debug-info.cpp')
-rw-r--r--clang/test/CodeGenCXX/debug-info.cpp17
1 files changed, 15 insertions, 2 deletions
diff --git a/clang/test/CodeGenCXX/debug-info.cpp b/clang/test/CodeGenCXX/debug-info.cpp
index 7c89dfc04ce..b8446bedbf3 100644
--- a/clang/test/CodeGenCXX/debug-info.cpp
+++ b/clang/test/CodeGenCXX/debug-info.cpp
@@ -1,4 +1,6 @@
// RUN: %clang_cc1 -triple x86_64-none-linux-gnu -emit-llvm -g %s -o - | FileCheck %s
+// RUN: %clang_cc1 -triple i686-pc-windows-msvc -emit-llvm -g %s -o - | FileCheck %s --check-prefix=MSVC
+
template<typename T> struct Identity {
typedef T Type;
};
@@ -43,14 +45,25 @@ namespace VirtualDtor {
}
namespace VirtualBase {
- struct A { };
- struct B : virtual A { };
+ struct A { int a; };
+ struct B : virtual A { int b; };
void f() {
B b;
}
}
+// MSVC: [[VBASE_B:![0-9]+]] = metadata !{i32 {{.*}}, metadata !"B", i32 {{[0-9]*}}, i64 96, i64 32, i32 0, i32 0, null, metadata [[VBASE_B_DEF:![0-9]+]], i32 0, {{.*}}} ; [ DW_TAG_structure_type ] [B] [line 49, size 96, align 32, offset 0] [def] [from ]
+// MSVC: [[VBASE_B_DEF]] = metadata !{metadata [[VBASE_A_IN_B:![0-9]+]],
+//
+// Look for the vbtable offset of A, which should be 4.
+// MSVC: [[VBASE_A_IN_B]] = metadata !{i32 786460, null, metadata [[VBASE_B]], null, i32 0, i64 0, i64 0, i64 4, i32 32, metadata !{{[0-9]*}}} ; [ DW_TAG_inheritance ] [line 0, size 0, align 0, offset 4] [from A]
+
+// CHECK: metadata !{{{.*}}, metadata !"B", i32 {{[0-9]*}}, i64 128, i64 64, i32 0, i32 0, null, metadata [[VBASE_B_DEF:![0-9]+]], i32 0, {{.*}}} ; [ DW_TAG_structure_type ] [B] [line 49, size 128, align 64, offset 0] [def] [from ]
+// CHECK: [[VBASE_B_DEF]] = metadata !{metadata [[VBASE_A_IN_B:![0-9]+]],
+//
+// Look for the vtable offset offset, which should be -24.
+// CHECK: [[VBASE_A_IN_B]] = metadata !{i32 786460, null, metadata !"_ZTSN11VirtualBase1BE", null, i32 0, i64 0, i64 0, i64 24, i32 32, metadata !"_ZTSN11VirtualBase1AE"} ; [ DW_TAG_inheritance ] [line 0, size 0, align 0, offset 24] [from _ZTSN11VirtualBase1AE]
namespace b5249287 {
template <typename T> class A {
struct B;
OpenPOWER on IntegriCloud