summaryrefslogtreecommitdiffstats
path: root/clang/test/Layout/ms-x86-alias-avoidance-padding.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang/test/Layout/ms-x86-alias-avoidance-padding.cpp')
-rw-r--r--clang/test/Layout/ms-x86-alias-avoidance-padding.cpp44
1 files changed, 44 insertions, 0 deletions
diff --git a/clang/test/Layout/ms-x86-alias-avoidance-padding.cpp b/clang/test/Layout/ms-x86-alias-avoidance-padding.cpp
index 48249137017..3112b39c9bc 100644
--- a/clang/test/Layout/ms-x86-alias-avoidance-padding.cpp
+++ b/clang/test/Layout/ms-x86-alias-avoidance-padding.cpp
@@ -255,10 +255,54 @@ struct F : virtual D, virtual B {};
// CHECK-X64-NEXT: | [sizeof=32, align=8
// CHECK-X64-NEXT: | nvsize=8, nvalign=8]
+struct JC0 {
+ JC0() { printf("JC0 : %d\n", (int)((char*)this - buffer)); }
+};
+struct JC1 : JC0 {
+ virtual void f() {}
+ JC1() { printf("JC1 : %d\n", (int)((char*)this - buffer)); }
+};
+struct JC2 : JC1 {
+ JC2() { printf("JC2 : %d\n", (int)((char*)this - buffer)); }
+};
+struct JC4 : JC1, JC2 {
+ JC4() { printf("JC4 : %d\n", (int)((char*)this - buffer)); }
+};
+
+// CHECK: *** Dumping AST Record Layout
+// CHECK: *** Dumping AST Record Layout
+// CHECK: *** Dumping AST Record Layout
+// CHECK: *** Dumping AST Record Layout
+// CHECK-NEXT: 0 | struct JC4
+// CHECK-NEXT: 0 | struct JC1 (primary base)
+// CHECK-NEXT: 0 | (JC1 vftable pointer)
+// CHECK-NEXT: 4 | struct JC0 (base) (empty)
+// CHECK-NEXT: 8 | struct JC2 (base)
+// CHECK-NEXT: 8 | struct JC1 (primary base)
+// CHECK-NEXT: 8 | (JC1 vftable pointer)
+// CHECK-NEXT: 12 | struct JC0 (base) (empty)
+// CHECK-NEXT: | [sizeof=12, align=4
+// CHECK-NEXT: | nvsize=12, nvalign=4]
+// CHECK-x64: *** Dumping AST Record Layout
+// CHECK-x64: *** Dumping AST Record Layout
+// CHECK-x64: *** Dumping AST Record Layout
+// CHECK-x64: *** Dumping AST Record Layout
+// CHECK-x64-NEXT: 0 | struct JC4
+// CHECK-x64-NEXT: 0 | struct JC1 (primary base)
+// CHECK-x64-NEXT: 0 | (JC1 vftable pointer)
+// CHECK-x64-NEXT: 8 | struct JC0 (base) (empty)
+// CHECK-x64-NEXT: 16 | struct JC2 (base)
+// CHECK-x64-NEXT: 16 | struct JC1 (primary base)
+// CHECK-x64-NEXT: 16 | (JC1 vftable pointer)
+// CHECK-x64-NEXT: 24 | struct JC0 (base) (empty)
+// CHECK-x64-NEXT: | [sizeof=24, align=8
+// CHECK-x64-NEXT: | nvsize=24, nvalign=8]
+
int a[
sizeof(AT3) +
sizeof(BT3) +
sizeof(T3) +
sizeof(E) +
sizeof(F) +
+sizeof(JC4) +
0];
OpenPOWER on IntegriCloud