diff options
author | Anders Carlsson <andersca@mac.com> | 2010-01-18 04:25:18 +0000 |
---|---|---|
committer | Anders Carlsson <andersca@mac.com> | 2010-01-18 04:25:18 +0000 |
commit | 1af3df854f31e33f550149e576c819d94dc74f7b (patch) | |
tree | 1c7835efca92dbb4d92ea715e961481d185e69b0 /clang/test | |
parent | 5fcd99b10f72aa216c6ebe51e0af3a52736c0c09 (diff) | |
download | bcm5719-llvm-1af3df854f31e33f550149e576c819d94dc74f7b.tar.gz bcm5719-llvm-1af3df854f31e33f550149e576c819d94dc74f7b.zip |
Fix a bunch of VTT layout bugs, add simple tests for VTT layout.
llvm-svn: 93709
Diffstat (limited to 'clang/test')
-rw-r--r-- | clang/test/CodeGenCXX/virt.cpp | 14 | ||||
-rw-r--r-- | clang/test/CodeGenCXX/vtt-layout.cpp | 26 |
2 files changed, 33 insertions, 7 deletions
diff --git a/clang/test/CodeGenCXX/virt.cpp b/clang/test/CodeGenCXX/virt.cpp index 45780394421..bdb05eadec6 100644 --- a/clang/test/CodeGenCXX/virt.cpp +++ b/clang/test/CodeGenCXX/virt.cpp @@ -375,13 +375,13 @@ class test8_D : test8_B1, test8_B2, test8_B3 { // CHECK-LP64-NEXT: .quad (__ZTV7test8_D) + 32 // CHECK-LP64-NEXT: .quad (__ZTC7test8_D8_8test8_B2) + 32 // CHECK-LP64-NEXT: .quad (__ZTC7test8_D8_9test8_B2a) + 32 -// CHECK-LP64-NEXT .quad (__ZTC7test8_D8_9test8_B2a) + 64 -// CHECK-LP64-NEXT .quad (__ZTC7test8_D8_9test8_B2a) + 96 -// CHECK-LP64-NEXT .quad (__ZTC7test8_D8_8test8_B2) + 72 -// CHECK-LP64-NEXT .quad (__ZTC7test8_D8_8test8_B2) + 104 -// CHECK-LP64-NEXT .quad (__ZTV7test8_D) + 72 -// CHECK-LP64: .quad (__ZTV7test8_D) + 160 -// CHECK-LP64: .quad (__ZTV7test8_D) + 192 +// CHECK-LP64-NEXT: .quad (__ZTC7test8_D8_9test8_B2a) + 64 +// CHECK-LP64-NEXT: .quad (__ZTC7test8_D8_9test8_B2a) + 96 +// CHECK-LP64-NEXT: .quad (__ZTC7test8_D8_8test8_B2) + 72 +// CHECK-LP64-NEXT: .quad (__ZTC7test8_D8_8test8_B2) + 104 +// CHECK-LP64-NEXT: .quad (__ZTV7test8_D) + 72 +// CHECK-LP64-NEXT: .quad (__ZTV7test8_D) + 160 +// CHECK-LP64-NEXT: .quad (__ZTV7test8_D) + 192 struct test9_B3 { virtual void funcB3(); int i; }; diff --git a/clang/test/CodeGenCXX/vtt-layout.cpp b/clang/test/CodeGenCXX/vtt-layout.cpp new file mode 100644 index 00000000000..1e78c9048db --- /dev/null +++ b/clang/test/CodeGenCXX/vtt-layout.cpp @@ -0,0 +1,26 @@ +// RUN: %clang_cc1 %s -triple=x86_64-apple-darwin10 -emit-llvm -o - | FileCheck %s + +namespace Test1 { +struct A { }; + +struct B : virtual A { + virtual void f(); +}; + +void B::f() { } +} + +// Test1::B should just have a single entry in its VTT, which points to the vtable. +// CHECK: @_ZTTN5Test11BE = constant [1 x i8*] [i8* bitcast (i8** getelementptr inbounds ([4 x i8*]* @_ZTVN5Test11BE, i64 0, i64 3) to i8*)] + +namespace Test2 { + struct A { }; + + struct B : A { virtual void f(); }; + struct C : virtual B { }; + + C c; +} + +// Check that we don't add a secondary virtual pointer for Test2::A, since Test2::A doesn't have any virtual member functions or bases. +// CHECK: @_ZTTN5Test21CE = weak_odr constant [2 x i8*] [i8* bitcast (i8** getelementptr inbounds ([5 x i8*]* @_ZTVN5Test21CE, i64 0, i64 4) to i8*), i8* bitcast (i8** getelementptr inbounds ([5 x i8*]* @_ZTVN5Test21CE, i64 0, i64 4) to i8*)] ; <[2 x i8*]*> [#uses=0] |