1 // RUN: %clang_cc1 -emit-llvm-only -triple s390x-none-zos -fdump-record-layouts %s | FileCheck %s
2 
3 struct s0 {
4   short a:3;
5   long b:5;
6   int c:1;
7   long d:10;
8   char e:5;
9 } S0;
10 // CHECK:              0 | struct s0
11 // CHECK-NEXT:     0:0-2 |   short a
12 // CHECK-NEXT:     0:3-7 |   long b
13 // CHECK-NEXT:     1:0-0 |   int c
14 // CHECK-NEXT:    1:1-10 |   long d
15 // CHECK-NEXT:     2:3-7 |   char e
16 // CHECK-NEXT:           | [sizeof=3, align=1]
17 
18 struct s1 {
19   char a:7;
20   long b:27;
21   int c:2;
22 } S1;
23 // CHECK:              0 | struct s1
24 // CHECK-NEXT:     0:0-6 |   char a
25 // CHECK-NEXT:    0:7-33 |   long b
26 // CHECK-NEXT:     4:2-3 |   int c
27 // CHECK-NEXT:           | [sizeof=5, align=1]
28 
29 struct s2 {
30   char a:7;
31   char  :0;
32   short :0;
33   short :0;
34 } S2;
35 // CHECK:              0 | struct s2
36 // CHECK-NEXT:     0:0-6 |   char a
37 // CHECK-NEXT:       4:- |   char
38 // CHECK-NEXT:       4:- |   short
39 // CHECK-NEXT:       4:- |   short
40 // CHECK-NEXT:           | [sizeof=4, align=4]
41 
42 struct s3 {
43   int a;
44   int b:16;
45   char  :0;
46   char c:1;
47 } S3;
48 // CHECK:              0 | struct s3
49 // CHECK-NEXT:         0 |   int a
50 // CHECK-NEXT:    4:0-15 |   int b
51 // CHECK-NEXT:       8:- |   char
52 // CHECK-NEXT:     8:0-0 |   char c
53 // CHECK-NEXT:           | [sizeof=12, align=4]
54 
55 struct s4 {
56  unsigned int __attribute__((aligned(32))) a;
57 } S4;
58 // CHECK:              0 | struct s4
59 // CHECK-NEXT:         0 |   unsigned int a
60 // CHECK-NEXT:           | [sizeof=32, align=32]
61 
62 struct s5 {
63   char a;
64   int  b:19 __attribute__((aligned(4)));
65   int  c:22 __attribute__((aligned(8)));
66   int  :0;
67   int  d:10;
68 } S5;
69 // CHECK:              0 | struct s5
70 // CHECK-NEXT:         0 |   char a
71 // CHECK-NEXT:    4:0-18 |   int b
72 // CHECK-NEXT:    8:0-21 |   int c
73 // CHECK-NEXT:      12:- |   int
74 // CHECK-NEXT:    12:0-9 |   int d
75 // CHECK-NEXT:           | [sizeof=16, align=8]
76 
77 struct s6 {
78   char * a;
79   char * b[];
80 } S6;
81 // CHECK:              0 | struct s6
82 // CHECK-NEXT:         0 |   char * a
83 // CHECK-NEXT:         8 |   char *[] b
84 // CHECK-NEXT:           | [sizeof=8, align=8]
85 
86 struct s10 {
87  unsigned int __attribute__((aligned)) a;
88 } S10;
89 // CHECK:              0 | struct s10
90 // CHECK-NEXT:         0 |   unsigned int a
91 // CHECK-NEXT:           | [sizeof=16, align=16]
92 
93 struct s11 {
94   char a;
95   long :0;
96   char b;
97 } S11;
98 // CHECK:              0 | struct s11
99 // CHECK-NEXT:         0 |   char a
100 // CHECK-NEXT:       8:- |   long
101 // CHECK-NEXT:         8 |   char b
102 // CHECK-NEXT:           | [sizeof=16, align=8]
103 
104 union u0 {
105   unsigned short     d1 __attribute__((packed));
106   int                d2:10;
107   long               d3;
108 } U0 __attribute__((aligned(8)));
109 // CHECK:              0 | union u0
110 // CHECK-NEXT:         0 |   unsigned short d1
111 // CHECK-NEXT:     0:0-9 |   int d2
112 // CHECK-NEXT:         0 |   long d3
113 // CHECK-NEXT:           | [sizeof=8, align=8]
114 
115 union u1 {
116   unsigned int        :0;
117   short               a;
118 } U1;
119 // CHECK:              0 | union u1
120 // CHECK-NEXT:       0:- |   unsigned int
121 // CHECK-NEXT:         0 |   short a
122 // CHECK-NEXT:           | [sizeof=4, align=4]
123 
124 union u2 {
125   long      :0;
126   short      a;
127 } U2;
128 // CHECK:              0 | union u2
129 // CHECK-NEXT:       0:- |   long
130 // CHECK-NEXT:         0 |   short a
131 // CHECK-NEXT:           | [sizeof=8, align=8]
132 
133 union u3 {
134   unsigned char :0;
135   unsigned short :0;
136 } U3;
137 // CHECK:              0 | union u3
138 // CHECK-NEXT:       0:- |   unsigned char
139 // CHECK-NEXT:       0:- |   unsigned short
140 // CHECK-NEXT:           | [sizeof=0, align=4]
141