summaryrefslogtreecommitdiffstats
path: root/clang/test/Layout/ms-x86-empty-nonvirtual-bases.cpp
diff options
context:
space:
mode:
authorWarren Hunt <whunt@google.com>2014-01-09 00:30:56 +0000
committerWarren Hunt <whunt@google.com>2014-01-09 00:30:56 +0000
commitd640d7d96e93f138e1aa844d91c868485a6b113d (patch)
treedd1de46e0a7bfeddd1ba5f7c045a817e986d1b2d /clang/test/Layout/ms-x86-empty-nonvirtual-bases.cpp
parentd2d23ed04a08eb04ef2d6d0a89284f1f510e9d96 (diff)
downloadbcm5719-llvm-d640d7d96e93f138e1aa844d91c868485a6b113d.tar.gz
bcm5719-llvm-d640d7d96e93f138e1aa844d91c868485a6b113d.zip
[ms-abi] Refactor Microsoft Record Layout
This patch refactors microsoft record layout to be more "natural". The most dominant change is that vbptrs and vfptrs are injected after the fact. This simplifies the implementation and the math for the offest for the first base/field after the vbptr. llvm-svn: 198818
Diffstat (limited to 'clang/test/Layout/ms-x86-empty-nonvirtual-bases.cpp')
-rw-r--r--clang/test/Layout/ms-x86-empty-nonvirtual-bases.cpp176
1 files changed, 92 insertions, 84 deletions
diff --git a/clang/test/Layout/ms-x86-empty-nonvirtual-bases.cpp b/clang/test/Layout/ms-x86-empty-nonvirtual-bases.cpp
index 01d10c9994f..dd1cbe739bd 100644
--- a/clang/test/Layout/ms-x86-empty-nonvirtual-bases.cpp
+++ b/clang/test/Layout/ms-x86-empty-nonvirtual-bases.cpp
@@ -23,11 +23,12 @@ struct A : B0 {
};
// CHECK: *** Dumping AST Record Layout
-// CHECK: 0 | struct A
-// CHECK: 0 | struct B0 (base) (empty)
-// CHECK: 0 | int a
-// CHECK: | [sizeof=8, align=8
-// CHECK: | nvsize=8, nvalign=8]
+// CHECK: *** Dumping AST Record Layout
+// CHECK-NEXT: 0 | struct A
+// CHECK-NEXT: 0 | struct B0 (base) (empty)
+// CHECK-NEXT: 0 | int a
+// CHECK-NEXT: | [sizeof=8, align=8
+// CHECK-NEXT: | nvsize=8, nvalign=8]
struct B : B0 {
B0 b0;
@@ -36,14 +37,14 @@ struct B : B0 {
};
// CHECK: *** Dumping AST Record Layout
-// CHECK: 0 | struct B
-// CHECK: 0 | struct B0 (base) (empty)
-// CHECK: 0 | struct B0 b0 (empty)
-// CHECK: | [sizeof=8, align=8
-// CHECK: | nvsize=0, nvalign=1]
-// CHECK: 8 | int a
-// CHECK: | [sizeof=16, align=8
-// CHECK: | nvsize=16, nvalign=8]
+// CHECK-NEXT: 0 | struct B
+// CHECK-NEXT: 0 | struct B0 (base) (empty)
+// CHECK-NEXT: 0 | struct B0 b0 (empty)
+// CHECK-NEXT: | [sizeof=8, align=8
+// CHECK-NEXT: | nvsize=0, nvalign=8]
+// CHECK: 8 | int a
+// CHECK-NEXT: | [sizeof=16, align=8
+// CHECK-NEXT: | nvsize=16, nvalign=8]
struct C : B0, B1, B2, B3, B4 {
int a;
@@ -51,15 +52,19 @@ struct C : B0, B1, B2, B3, B4 {
};
// CHECK: *** Dumping AST Record Layout
-// CHECK: 0 | struct C
-// CHECK: 0 | struct B0 (base) (empty)
-// CHECK: 8 | struct B1 (base) (empty)
-// CHECK: 16 | struct B2 (base) (empty)
-// CHECK: 24 | struct B3 (base) (empty)
-// CHECK: 32 | struct B4 (base) (empty)
-// CHECK: 32 | int a
-// CHECK: | [sizeof=40, align=8
-// CHECK: | nvsize=40, nvalign=8]
+// CHECK: *** Dumping AST Record Layout
+// CHECK: *** Dumping AST Record Layout
+// CHECK: *** Dumping AST Record Layout
+// CHECK: *** Dumping AST Record Layout
+// CHECK-NEXT: 0 | struct C
+// CHECK-NEXT: 0 | struct B0 (base) (empty)
+// CHECK-NEXT: 8 | struct B1 (base) (empty)
+// CHECK-NEXT: 16 | struct B2 (base) (empty)
+// CHECK-NEXT: 24 | struct B3 (base) (empty)
+// CHECK-NEXT: 32 | struct B4 (base) (empty)
+// CHECK-NEXT: 32 | int a
+// CHECK-NEXT: | [sizeof=40, align=8
+// CHECK-NEXT: | nvsize=40, nvalign=8]
struct D {
B0 b0;
@@ -72,28 +77,31 @@ struct D {
};
// CHECK: *** Dumping AST Record Layout
-// CHECK: 0 | struct D
-// CHECK: 0 | struct B0 b0 (empty)
-// CHECK: | [sizeof=8, align=8
-// CHECK: | nvsize=0, nvalign=1]
-// CHECK: 8 | struct C0 c0
-// CHECK: 8 | int a
-// CHECK: | [sizeof=4, align=4
-// CHECK: | nvsize=4, nvalign=4]
-// CHECK: 12 | struct C1 c1
-// CHECK: 12 | int a
-// CHECK: | [sizeof=4, align=4
-// CHECK: | nvsize=4, nvalign=4]
-// CHECK: 16 | struct C2 c2
-// CHECK: 16 | int a
-// CHECK: | [sizeof=4, align=4
-// CHECK: | nvsize=4, nvalign=4]
-// CHECK: 24 | struct B1 b1 (empty)
-// CHECK: | [sizeof=8, align=8
-// CHECK: | nvsize=0, nvalign=1]
-// CHECK: 32 | int a
-// CHECK: | [sizeof=40, align=8
-// CHECK: | nvsize=40, nvalign=8]
+// CHECK: *** Dumping AST Record Layout
+// CHECK: *** Dumping AST Record Layout
+// CHECK: *** Dumping AST Record Layout
+// CHECK-NEXT: 0 | struct D
+// CHECK-NEXT: 0 | struct B0 b0 (empty)
+// CHECK-NEXT: | [sizeof=8, align=8
+// CHECK-NEXT: | nvsize=0, nvalign=8]
+// CHECK: 8 | struct C0 c0
+// CHECK-NEXT: 8 | int a
+// CHECK-NEXT: | [sizeof=4, align=4
+// CHECK-NEXT: | nvsize=4, nvalign=4]
+// CHECK: 12 | struct C1 c1
+// CHECK-NEXT: 12 | int a
+// CHECK-NEXT: | [sizeof=4, align=4
+// CHECK-NEXT: | nvsize=4, nvalign=4]
+// CHECK: 16 | struct C2 c2
+// CHECK-NEXT: 16 | int a
+// CHECK-NEXT: | [sizeof=4, align=4
+// CHECK-NEXT: | nvsize=4, nvalign=4]
+// CHECK: 24 | struct B1 b1 (empty)
+// CHECK-NEXT: | [sizeof=8, align=8
+// CHECK-NEXT: | nvsize=0, nvalign=8]
+// CHECK: 32 | int a
+// CHECK-NEXT: | [sizeof=40, align=8
+// CHECK-NEXT: | nvsize=40, nvalign=8]
struct E : B0, C0, C1, C2, B1 {
int a;
@@ -101,18 +109,18 @@ struct E : B0, C0, C1, C2, B1 {
};
// CHECK: *** Dumping AST Record Layout
-// CHECK: 0 | struct E
-// CHECK: 0 | struct B0 (base) (empty)
-// CHECK: 0 | struct C0 (base)
-// CHECK: 0 | int a
-// CHECK: 4 | struct C1 (base)
-// CHECK: 4 | int a
-// CHECK: 8 | struct C2 (base)
-// CHECK: 8 | int a
-// CHECK: 16 | struct B1 (base) (empty)
-// CHECK: 16 | int a
-// CHECK: | [sizeof=24, align=8
-// CHECK: | nvsize=24, nvalign=8]
+// CHECK-NEXT: 0 | struct E
+// CHECK-NEXT: 0 | struct B0 (base) (empty)
+// CHECK-NEXT: 0 | struct C0 (base)
+// CHECK-NEXT: 0 | int a
+// CHECK-NEXT: 4 | struct C1 (base)
+// CHECK-NEXT: 4 | int a
+// CHECK-NEXT: 8 | struct C2 (base)
+// CHECK-NEXT: 8 | int a
+// CHECK-NEXT: 16 | struct B1 (base) (empty)
+// CHECK-NEXT: 16 | int a
+// CHECK-NEXT: | [sizeof=24, align=8
+// CHECK-NEXT: | nvsize=24, nvalign=8]
struct F : C0, B0, B1, C1 {
int a;
@@ -120,16 +128,16 @@ struct F : C0, B0, B1, C1 {
};
// CHECK: *** Dumping AST Record Layout
-// CHECK: 0 | struct F
-// CHECK: 0 | struct C0 (base)
-// CHECK: 0 | int a
-// CHECK: 8 | struct B0 (base) (empty)
-// CHECK: 16 | struct B1 (base) (empty)
-// CHECK: 16 | struct C1 (base)
-// CHECK: 16 | int a
-// CHECK: 20 | int a
-// CHECK: | [sizeof=24, align=8
-// CHECK: | nvsize=24, nvalign=8]
+// CHECK-NEXT: 0 | struct F
+// CHECK-NEXT: 0 | struct C0 (base)
+// CHECK-NEXT: 0 | int a
+// CHECK-NEXT: 8 | struct B0 (base) (empty)
+// CHECK-NEXT: 16 | struct B1 (base) (empty)
+// CHECK-NEXT: 16 | struct C1 (base)
+// CHECK-NEXT: 16 | int a
+// CHECK-NEXT: 20 | int a
+// CHECK-NEXT: | [sizeof=24, align=8
+// CHECK-NEXT: | nvsize=24, nvalign=8]
struct G : B0, B1, B2, B3, B4 {
__declspec(align(32)) int a;
@@ -137,15 +145,15 @@ struct G : B0, B1, B2, B3, B4 {
};
// CHECK: *** Dumping AST Record Layout
-// CHECK: 0 | struct G
-// CHECK: 0 | struct B0 (base) (empty)
-// CHECK: 8 | struct B1 (base) (empty)
-// CHECK: 16 | struct B2 (base) (empty)
-// CHECK: 24 | struct B3 (base) (empty)
-// CHECK: 32 | struct B4 (base) (empty)
-// CHECK: 32 | int a
-// CHECK: | [sizeof=64, align=32
-// CHECK: | nvsize=64, nvalign=32]
+// CHECK-NEXT: 0 | struct G
+// CHECK-NEXT: 0 | struct B0 (base) (empty)
+// CHECK-NEXT: 8 | struct B1 (base) (empty)
+// CHECK-NEXT: 16 | struct B2 (base) (empty)
+// CHECK-NEXT: 24 | struct B3 (base) (empty)
+// CHECK-NEXT: 32 | struct B4 (base) (empty)
+// CHECK-NEXT: 32 | int a
+// CHECK-NEXT: | [sizeof=64, align=32
+// CHECK-NEXT: | nvsize=64, nvalign=32]
struct __declspec(align(32)) H : B0, B1, B2, B3, B4 {
int a;
@@ -153,15 +161,15 @@ struct __declspec(align(32)) H : B0, B1, B2, B3, B4 {
};
// CHECK: *** Dumping AST Record Layout
-// CHECK: 0 | struct H
-// CHECK: 0 | struct B0 (base) (empty)
-// CHECK: 8 | struct B1 (base) (empty)
-// CHECK: 16 | struct B2 (base) (empty)
-// CHECK: 24 | struct B3 (base) (empty)
-// CHECK: 32 | struct B4 (base) (empty)
-// CHECK: 32 | int a
-// CHECK: | [sizeof=64, align=32
-// CHECK: | nvsize=40, nvalign=8]
+// CHECK-NEXT: 0 | struct H
+// CHECK-NEXT: 0 | struct B0 (base) (empty)
+// CHECK-NEXT: 8 | struct B1 (base) (empty)
+// CHECK-NEXT: 16 | struct B2 (base) (empty)
+// CHECK-NEXT: 24 | struct B3 (base) (empty)
+// CHECK-NEXT: 32 | struct B4 (base) (empty)
+// CHECK-NEXT: 32 | int a
+// CHECK-NEXT: | [sizeof=64, align=32
+// CHECK-NEXT: | nvsize=40, nvalign=32]
int a[
sizeof(A)+
OpenPOWER on IntegriCloud