xref: /minix3/external/bsd/llvm/dist/clang/test/Layout/ms-x86-bitfields-vbases.cpp (revision 5ba302fdeaa9e153d58b5dcaef42d660aedee92e)
1 // RUN: %clang_cc1 -fno-rtti -emit-llvm-only -triple i686-pc-win32 -fdump-record-layouts -fsyntax-only -cxx-abi microsoft %s 2>&1 \
2 // RUN:            | FileCheck %s
3 // RUN: %clang_cc1 -fno-rtti -emit-llvm-only -triple x86_64-pc-win32 -fdump-record-layouts -fsyntax-only -cxx-abi microsoft %s 2>/dev/null \
4 // RUN:            | FileCheck %s -check-prefix CHECK-X64
5 
6 struct B0 { };
7 
8 struct A : virtual B0 { char a : 1; };
9 
10 // CHECK: *** Dumping AST Record Layout
11 // CHECK:    0 | struct A
12 // CHECK:    0 |   (A vbtable pointer)
13 // CHECK:    4 |   char a
14 // CHECK:    9 |   struct B0 (virtual base) (empty)
15 // CHECK:      | [sizeof=9, align=4
16 // CHECK:      |  nvsize=8, nvalign=4]
17 // CHECK-X64: *** Dumping AST Record Layout
18 // CHECK-X64:    0 | struct A
19 // CHECK-X64:    0 |   (A vbtable pointer)
20 // CHECK-X64:    8 |   char a
21 // CHECK-X64:   17 |   struct B0 (virtual base) (empty)
22 // CHECK-X64:      | [sizeof=24, align=8
23 // CHECK-X64:      |  nvsize=16, nvalign=8]
24 
25 struct B : virtual B0 { short a : 1; };
26 
27 // CHECK: *** Dumping AST Record Layout
28 // CHECK:    0 | struct B
29 // CHECK:    0 |   (B vbtable pointer)
30 // CHECK:    4 |   short a
31 // CHECK:   10 |   struct B0 (virtual base) (empty)
32 // CHECK:      | [sizeof=10, align=4
33 // CHECK:      |  nvsize=8, nvalign=4]
34 // CHECK-X64: *** Dumping AST Record Layout
35 // CHECK-X64:    0 | struct B
36 // CHECK-X64:    0 |   (B vbtable pointer)
37 // CHECK-X64:    8 |   short a
38 // CHECK-X64:   18 |   struct B0 (virtual base) (empty)
39 // CHECK-X64:      | [sizeof=24, align=8
40 // CHECK-X64:      |  nvsize=16, nvalign=8]
41 
42 struct C : virtual B0 { char a : 1; char : 0; };
43 
44 // CHECK: *** Dumping AST Record Layout
45 // CHECK:    0 | struct C
46 // CHECK:    0 |   (C vbtable pointer)
47 // CHECK:    4 |   char a
48 // CHECK:    5 |   char
49 // CHECK:    8 |   struct B0 (virtual base) (empty)
50 // CHECK:      | [sizeof=8, align=4
51 // CHECK:      |  nvsize=8, nvalign=4]
52 // CHECK-X64: *** Dumping AST Record Layout
53 // CHECK-X64:    0 | struct C
54 // CHECK-X64:    0 |   (C vbtable pointer)
55 // CHECK-X64:    8 |   char a
56 // CHECK-X64:    9 |   char
57 // CHECK-X64:   16 |   struct B0 (virtual base) (empty)
58 // CHECK-X64:      | [sizeof=16, align=8
59 // CHECK-X64:      |  nvsize=16, nvalign=8]
60 
61 struct D : virtual B0 { char a : 1; char b; };
62 
63 // CHECK: *** Dumping AST Record Layout
64 // CHECK:    0 | struct D
65 // CHECK:    0 |   (D vbtable pointer)
66 // CHECK:    4 |   char a
67 // CHECK:    5 |   char b
68 // CHECK:    8 |   struct B0 (virtual base) (empty)
69 // CHECK:      | [sizeof=8, align=4
70 // CHECK:      |  nvsize=8, nvalign=4]
71 // CHECK-X64: *** Dumping AST Record Layout
72 // CHECK-X64:    0 | struct D
73 // CHECK-X64:    0 |   (D vbtable pointer)
74 // CHECK-X64:    8 |   char a
75 // CHECK-X64:    9 |   char b
76 // CHECK-X64:   16 |   struct B0 (virtual base) (empty)
77 // CHECK-X64:      | [sizeof=16, align=8
78 // CHECK-X64:      |  nvsize=16, nvalign=8]
79 
80 int a[
81 sizeof(A)+
82 sizeof(B)+
83 sizeof(C)+
84 sizeof(D)];
85