diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2013-12-22 00:07:40 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2013-12-22 00:07:40 +0000 |
commit | bfef399519ca9b8a4b4c6b563253bad7e0eeffe0 (patch) | |
tree | df8df0b0067b381eab470a3b8f28d14a552a6340 /test/Sema/ms_class_layout.cpp | |
parent | 6a0372513edbc473b538d2f724efac50405d6fef (diff) | |
download | src-test2-bfef399519ca9b8a4b4c6b563253bad7e0eeffe0.tar.gz src-test2-bfef399519ca9b8a4b4c6b563253bad7e0eeffe0.zip |
Notes
Diffstat (limited to 'test/Sema/ms_class_layout.cpp')
-rw-r--r-- | test/Sema/ms_class_layout.cpp | 88 |
1 files changed, 44 insertions, 44 deletions
diff --git a/test/Sema/ms_class_layout.cpp b/test/Sema/ms_class_layout.cpp index f48494733184..bb8052e12ec3 100644 --- a/test/Sema/ms_class_layout.cpp +++ b/test/Sema/ms_class_layout.cpp @@ -164,7 +164,7 @@ int main() { // CHECK-NEXT: 0 | (D vftable pointer) // CHECK-NEXT: 8 | double a -// CHECK-NEXT: sizeof=16, dsize=16, align=8 +// CHECK-NEXT: sizeof=16, align=8 // CHECK-NEXT: nvsize=16, nvalign=8 // CHECK: %class.D = type { i32 (...)**, double } @@ -173,7 +173,7 @@ int main() { // CHECK-NEXT: 0 | (B vftable pointer) // CHECK-NEXT: 4 | int b_field -// CHECK-NEXT: sizeof=8, dsize=8, align=4 +// CHECK-NEXT: sizeof=8, align=4 // CHECK-NEXT: nvsize=8, nvalign=4 // CHECK: %class.B = type { i32 (...)**, i32 } @@ -185,7 +185,7 @@ int main() { // CHECK-NEXT: 8 | int a_field // CHECK-NEXT: 12 | char one -// CHECK-NEXT: sizeof=16, dsize=16, align=4 +// CHECK-NEXT: sizeof=16, align=4 // CHECK-NEXT: nvsize=16, nvalign=4 // CHECK: 0 | class C @@ -207,7 +207,7 @@ int main() { // CHECK-NEXT: 72 | int a_field // CHECK-NEXT: 76 | char one -// CHECK-NEXT: sizeof=80, dsize=80, align=8 +// CHECK-NEXT: sizeof=80, align=8 // CHECK-NEXT: nvsize=64, nvalign=8 // CHECK: %class.A = type { %class.B, i32, i8 } @@ -237,10 +237,10 @@ int main() { // CHECK-NEXT: 88 | int a_field // CHECK-NEXT: 92 | char one -// CHECK-NEXT: sizeof=80, dsize=80, align=8 +// CHECK-NEXT: sizeof=80, align=8 // CHECK-NEXT: nvsize=64, nvalign=8 -// CHECK: sizeof=96, dsize=96, align=8 +// CHECK: sizeof=96, align=8 // CHECK-NEXT: nvsize=96, nvalign=8 // CHECK: %struct.BaseStruct = type { double, float, %class.C } @@ -267,18 +267,18 @@ int main() { // CHECK-NEXT: 84 | int b_field // CHECK-NEXT: 88 | int a_field // CHECK-NEXT: 92 | char one -// CHECK-NEXT: sizeof=80, dsize=80, align=8 +// CHECK-NEXT: sizeof=80, align=8 // CHECK-NEXT: nvsize=64, nvalign=8 // CHECK: 96 | int x -// CHECK-NEXT: sizeof=104, dsize=104, align=8 +// CHECK-NEXT: sizeof=104, align=8 // CHECK-NEXT: nvsize=104, nvalign=8 // CHECK: %struct.DerivedStruct = type { %struct.BaseStruct, i32 } // CHECK: 0 | struct G // CHECK-NEXT: 0 | int g_field -// CHECK-NEXT: sizeof=4, dsize=4, align=4 +// CHECK-NEXT: sizeof=4, align=4 // CHECK-NEXT: nvsize=4, nvalign=4 // CHECK: 0 | struct H @@ -288,7 +288,7 @@ int main() { // CHECK-NEXT: 8 | class D (virtual base) // CHECK-NEXT: 8 | (D vftable pointer) // CHECK-NEXT: 16 | double a -// CHECK-NEXT: sizeof=24, dsize=24, align=8 +// CHECK-NEXT: sizeof=24, align=8 // CHECK-NEXT: nvsize=8, nvalign=4 // CHECK: %struct.H = type { %struct.G, i32*, %class.D } @@ -300,7 +300,7 @@ int main() { // CHECK-NEXT: 24 | class D (virtual base) // CHECK-NEXT: 24 | (D vftable pointer) // CHECK-NEXT: 32 | double a -// CHECK-NEXT: sizeof=40, dsize=40, align=8 +// CHECK-NEXT: sizeof=40, align=8 // CHECK-NEXT: nvsize=24, nvalign=8 // CHECK: %struct.I = type { i32 (...)**, [4 x i8], i32*, double, %class.D } @@ -308,12 +308,12 @@ int main() { // CHECK: 0 | struct L // CHECK-NEXT: 0 | int l -// CHECK-NEXT: sizeof=4, dsize=4, align=4 +// CHECK-NEXT: sizeof=4, align=4 // CHECK-NEXT: nvsize=4, nvalign=4 // CHECK: 0 | struct K // CHECK-NEXT: 0 | int k -// CHECK-NEXT: sizeof=4, dsize=4, align=4 +// CHECK-NEXT: sizeof=4, align=4 // CHECK-NEXT: nvsize=4, nvalign=4 // CHECK: 0 | struct M @@ -321,42 +321,42 @@ int main() { // CHECK-NEXT: 4 | int m // CHECK-NEXT: 8 | struct K (virtual base) // CHECK-NEXT: 8 | int k -// CHECK-NEXT: sizeof=12, dsize=12, align=4 +// CHECK-NEXT: sizeof=12, align=4 //CHECK: %struct.M = type { i32*, i32, %struct.K } //CHECK: %struct.M.base = type { i32*, i32 } // CHECK: 0 | struct N +// CHECK-NEXT: 0 | (N vftable pointer) // CHECK-NEXT: 4 | struct L (base) // CHECK-NEXT: 4 | int l // CHECK-NEXT: 8 | struct M (base) // CHECK-NEXT: 8 | (M vbtable pointer) // CHECK-NEXT: 12 | int m -// CHECK-NEXT: 0 | (N vftable pointer) // CHECK-NEXT: 16 | struct K (virtual base) // CHECK-NEXT: 16 | int k -// CHECK-NEXT: sizeof=20, dsize=20, align=4 +// CHECK-NEXT: sizeof=20, align=4 // CHECK-NEXT: nvsize=16, nvalign=4 //CHECK: %struct.N = type { i32 (...)**, %struct.L, %struct.M.base, %struct.K } -// FIXME: MSVC place struct H at offset 8. // CHECK: 0 | struct O -// CHECK-NEXT: 4 | struct H (base) -// CHECK-NEXT: 4 | struct G (base) -// CHECK-NEXT: 4 | int g_field -// CHECK-NEXT: 8 | (H vbtable pointer) -// CHECK-NEXT: 12 | struct G (base) -// CHECK-NEXT: 12 | int g_field // CHECK-NEXT: 0 | (O vftable pointer) -// CHECK-NEXT: 16 | class D (virtual base) -// CHECK-NEXT: 16 | (D vftable pointer) -// CHECK-NEXT: 24 | double a -// CHECK-NEXT: sizeof=32, dsize=32, align=8 -// CHECK-NEXT: nvsize=16, nvalign=4 +// CHECK-NEXT: 8 | struct H (base) +// CHECK-NEXT: 8 | struct G (base) +// CHECK-NEXT: 8 | int g_field +// CHECK-NEXT: 12 | (H vbtable pointer) +// CHECK-NEXT: 16 | struct G (base) +// CHECK-NEXT: 16 | int g_field +// CHECK-NEXT: 24 | class D (virtual base) +// CHECK-NEXT: 24 | (D vftable pointer) +// CHECK-NEXT: 32 | double a +// CHECK-NEXT: | [sizeof=40, align=8 +// CHECK-NEXT: | nvsize=24, nvalign=8] + +// CHECK: struct.O = type { i32 (...)**, [4 x i8], %struct.H.base, %struct.G, [4 x i8], %class.D } +// CHECK: struct.O.base = type { i32 (...)**, [4 x i8], %struct.H.base, %struct.G, [4 x i8] } -//CHECK: %struct.O = type { i32 (...)**, %struct.H.base, %struct.G, %class.D } -//CHECK: %struct.O.base = type { i32 (...)**, %struct.H.base, %struct.G } // CHECK: 0 | struct P // CHECK-NEXT: 0 | struct M (base) @@ -367,20 +367,20 @@ int main() { // CHECK-NEXT: 12 | int k // CHECK-NEXT: 16 | struct L (virtual base) // CHECK-NEXT: 16 | int l -// CHECK-NEXT: sizeof=20, dsize=20, align=4 +// CHECK-NEXT: sizeof=20, align=4 // CHECK-NEXT: nvsize=12, nvalign=4 //CHECK: %struct.P = type { %struct.M.base, i32, %struct.K, %struct.L } // CHECK: 0 | struct R (empty) -// CHECK-NEXT: sizeof=1, dsize=0, align=1 +// CHECK-NEXT: sizeof=1, align=1 // CHECK-NEXT: nvsize=0, nvalign=1 //CHECK: %struct.R = type { i8 } // CHECK: 0 | struct f // CHECK-NEXT: 0 | (f vftable pointer) -// CHECK-NEXT: sizeof=4, dsize=4, align=4 +// CHECK-NEXT: sizeof=4, align=4 // CHECK-NEXT: nvsize=4, nvalign=4 // CHECK: 0 | struct s @@ -390,12 +390,12 @@ int main() { // CHECK-NEXT: 12 | (vtordisp for vbase f) // CHECK-NEXT: 16 | struct f (virtual base) // CHECK-NEXT: 16 | (f vftable pointer) -// CHECK-NEXT: sizeof=20, dsize=20, align=4 +// CHECK-NEXT: sizeof=20, align=4 // CHECK-NEXT: nvsize=12, nvalign=4 // CHECK: 0 | class IA // CHECK-NEXT: 0 | (IA vftable pointer) -// CHECK-NEXT: sizeof=4, dsize=4, align=4 +// CHECK-NEXT: sizeof=4, align=4 // CHECK-NEXT: nvsize=4, nvalign=4 // CHECK: 0 | class ICh @@ -404,7 +404,7 @@ int main() { // CHECK-NEXT: 8 | (vtordisp for vbase IA) // CHECK-NEXT: 12 | class IA (virtual base) // CHECK-NEXT: 12 | (IA vftable pointer) -// CHECK-NEXT: sizeof=16, dsize=16, align=4 +// CHECK-NEXT: sizeof=16, align=4 // CHECK-NEXT: nvsize=8, nvalign=4 // CHECK: 0 | struct sd @@ -424,7 +424,7 @@ int main() { // CHECK-NEXT: 40 | class ICh (virtual base) // CHECK-NEXT: 40 | (ICh vftable pointer) // CHECK-NEXT: 44 | (ICh vbtable pointer) -// CHECK-NEXT: sizeof=48, dsize=48, align=4 +// CHECK-NEXT: sizeof=48, align=4 // CHECK-NEXT: nvsize=12, nvalign=4 // CHECK: %struct.f = type { i32 (...)** } @@ -435,14 +435,14 @@ int main() { // CHECK: 0 | struct AV // CHECK-NEXT: 0 | (AV vftable pointer) -// CHECK-NEXT: sizeof=4, dsize=4, align=4 +// CHECK-NEXT: sizeof=4, align=4 // CHECK-NEXT: nvsize=4, nvalign=4 // CHECK: 0 | struct BV // CHECK-NEXT: 0 | struct AV (primary base) // CHECK-NEXT: 0 | (AV vftable pointer) -// CHECK-NEXT: sizeof=4, dsize=4, align=4 +// CHECK-NEXT: sizeof=4, align=4 // CHECK-NEXT: nvsize=4, nvalign=4 @@ -452,7 +452,7 @@ int main() { // CHECK-NEXT: 8 | struct BV (virtual base) // CHECK-NEXT: 8 | struct AV (primary base) // CHECK-NEXT: 8 | (AV vftable pointer) -// CHECK-NEXT: sizeof=12, dsize=12, align=4 +// CHECK-NEXT: sizeof=12, align=4 // CHECK-NEXT: nvsize=4, nvalign=4 // CHECK: %struct.AV = type { i32 (...)** } @@ -464,7 +464,7 @@ int main() { // CHECK-NEXT: 0 | struct BV (primary base) // CHECK-NEXT: 0 | struct AV (primary base) // CHECK-NEXT: 0 | (AV vftable pointer) -// CHECK-NEXT: sizeof=4, dsize=4, align=4 +// CHECK-NEXT: sizeof=4, align=4 // CHECK-NEXT: nvsize=4, nvalign=4 // CHECK: %struct.DV = type { %struct.BV } @@ -480,14 +480,14 @@ int main() { // CHECK-NEXT: 12 | struct BV (virtual base) // CHECK-NEXT: 12 | struct AV (primary base) // CHECK-NEXT: 12 | (AV vftable pointer) -// CHECK-NEXT: sizeof=16, dsize=16, align=4 +// CHECK-NEXT: sizeof=16, align=4 // CHECK-NEXT: nvsize=8, nvalign=4 // CHECK: %struct.EV = type { %struct.DV, %struct.CV.base, [4 x i8], %struct.BV } // CHECK: %struct.EV.base = type { %struct.DV, %struct.CV.base } // Overriding a method means that all the vbases containing that -// method need a vtordisp. +// method need a vtordisp. Note: this code will cause an error in cl.exe. namespace test1 { struct A { virtual void foo(); }; struct B : A {}; @@ -503,6 +503,6 @@ namespace test1 { // CHECK-NEXT: 16 | struct test1::B (virtual base) // CHECK-NEXT: 16 | struct test1::A (primary base) // CHECK-NEXT: 16 | (A vftable pointer) -// CHECK-NEXT: sizeof=20, dsize=20, align=4 +// CHECK-NEXT: sizeof=20, align=4 // CHECK-NEXT: nvsize=4, nvalign=4 } |