1 // RUN: %clang_cc1 -emit-llvm-only -triple s390x-none-zos -fdump-record-layouts %s | FileCheck %s --check-prefix=CHECK 2 // RUN: %clang_cc1 -emit-llvm -triple s390x-none-zos %s -o - | FileCheck %s --check-prefix=DECL 3 4 static int __attribute__((aligned(32))) v0; 5 int __attribute__((aligned(32))) v1; 6 typedef int __attribute__((aligned(32))) int32; 7 static int32 v2; 8 int32 v3; 9 int f0(void) { return v0 + v1 + v2 + v3; } 10 // DECL: @v0 {{.*}} align 16 11 // DECL-NEXT: @v1 {{.*}} align 32 12 // DECL-NEXT: @v2 {{.*}} align 16 13 // DECL-NEXT: @v3 {{.*}} align 32 14 15 const struct cs0 { 16 unsigned long : 0; 17 long long a; 18 } CS0 = {}; 19 // CHECK: 0 | struct cs0 20 // CHECK-NEXT: 0:- | unsigned long 21 // CHECK-NEXT: 0 | long long a 22 // CHECK-NEXT: | [sizeof=8, align=8] 23 24 volatile struct vs0 { 25 long : 0; 26 short a; 27 } VS0; 28 // CHECK: 0 | struct vs0 29 // CHECK-NEXT: 0:- | long 30 // CHECK-NEXT: 0 | short a 31 // CHECK-NEXT: | [sizeof=2, align=2] 32 33 struct s0 { 34 short a : 3; 35 long b : 5; 36 int c : 1; 37 long d : 10; 38 char e : 5; 39 } S0; 40 // CHECK: 0 | struct s0 41 // CHECK-NEXT: 0:0-2 | short a 42 // CHECK-NEXT: 0:3-7 | long b 43 // CHECK-NEXT: 1:0-0 | int c 44 // CHECK-NEXT: 1:1-10 | long d 45 // CHECK-NEXT: 2:3-7 | char e 46 // CHECK-NEXT: | [sizeof=3, align=1] 47 48 struct s1 { 49 char a : 7; 50 long b : 27; 51 int c : 2; 52 } S1; 53 // CHECK: 0 | struct s1 54 // CHECK-NEXT: 0:0-6 | char a 55 // CHECK-NEXT: 0:7-33 | long b 56 // CHECK-NEXT: 4:2-3 | int c 57 // CHECK-NEXT: | [sizeof=5, align=1] 58 59 struct s2 { 60 char a : 7; 61 char : 0; 62 short : 0; 63 short : 0; 64 } S2; 65 // CHECK: 0 | struct s2 66 // CHECK-NEXT: 0:0-6 | char a 67 // CHECK-NEXT: 4:- | char 68 // CHECK-NEXT: 4:- | short 69 // CHECK-NEXT: 4:- | short 70 // CHECK-NEXT: | [sizeof=4, align=4] 71 72 struct s3 { 73 int a; 74 int b : 16; 75 char : 0; 76 char c : 1; 77 } S3; 78 // CHECK: 0 | struct s3 79 // CHECK-NEXT: 0 | int a 80 // CHECK-NEXT: 4:0-15 | int b 81 // CHECK-NEXT: 8:- | char 82 // CHECK-NEXT: 8:0-0 | char c 83 // CHECK-NEXT: | [sizeof=12, align=4] 84 85 struct s4 { 86 unsigned int __attribute__((aligned(32))) a; 87 } S4; 88 // CHECK: 0 | struct s4 89 // CHECK-NEXT: 0 | unsigned int a 90 // CHECK-NEXT: | [sizeof=32, align=32] 91 92 struct s5 { 93 char a; 94 int b : 19 __attribute__((aligned(4))); 95 int c : 22 __attribute__((aligned(8))); 96 int : 0; 97 int d : 10; 98 } S5; 99 // CHECK: 0 | struct s5 100 // CHECK-NEXT: 0 | char a 101 // CHECK-NEXT: 4:0-18 | int b 102 // CHECK-NEXT: 8:0-21 | int c 103 // CHECK-NEXT: 12:- | int 104 // CHECK-NEXT: 12:0-9 | int d 105 // CHECK-NEXT: | [sizeof=16, align=8] 106 107 struct s6 { 108 char *a; 109 char *b[]; 110 } S6; 111 // CHECK: 0 | struct s6 112 // CHECK-NEXT: 0 | char * a 113 // CHECK-NEXT: 8 | char *[] b 114 // CHECK-NEXT: | [sizeof=8, align=8] 115 116 struct s7 { 117 long : 0; 118 short a; 119 } S7; 120 // CHECK: 0 | struct s7 121 // CHECK-NEXT: 0:- | long 122 // CHECK-NEXT: 0 | short a 123 // CHECK-NEXT: | [sizeof=2, align=2] 124 125 #pragma pack(2) 126 struct s8 { 127 unsigned long : 0; 128 long long a; 129 } S8; 130 #pragma pack() 131 // CHECK: 0 | struct s8 132 // CHECK-NEXT: 0:- | unsigned long 133 // CHECK-NEXT: 0 | long long a 134 // CHECK-NEXT: | [sizeof=8, align=2] 135 136 struct s9 { 137 unsigned int : 0; 138 unsigned short : 0; 139 } S9; 140 // CHECK: 0 | struct s9 141 // CHECK-NEXT: 0:- | unsigned int 142 // CHECK-NEXT: 0:- | unsigned short 143 // CHECK-NEXT: | [sizeof=0, align=1] 144 145 struct s10 { 146 unsigned int __attribute__((aligned)) a; 147 } S10; 148 // CHECK: 0 | struct s10 149 // CHECK-NEXT: 0 | unsigned int a 150 // CHECK-NEXT: | [sizeof=8, align=8] 151 152 struct s11 { 153 char a; 154 long : 0; 155 char b; 156 } S11; 157 // CHECK: 0 | struct s11 158 // CHECK-NEXT: 0 | char a 159 // CHECK-NEXT: 8:- | long 160 // CHECK-NEXT: 8 | char b 161 // CHECK-NEXT: | [sizeof=16, align=8] 162 163 union u0 { 164 unsigned short d1 __attribute__((packed)); 165 int d2 : 10; 166 long d3; 167 } U0 __attribute__((aligned(8))); 168 // CHECK: 0 | union u0 169 // CHECK-NEXT: 0 | unsigned short d1 170 // CHECK-NEXT: 0:0-9 | int d2 171 // CHECK-NEXT: 0 | long d3 172 // CHECK-NEXT: | [sizeof=8, align=8] 173 174 union u1 { 175 unsigned int : 0; 176 short a; 177 } U1; 178 // CHECK: 0 | union u1 179 // CHECK-NEXT: 0:- | unsigned int 180 // CHECK-NEXT: 0 | short a 181 // CHECK-NEXT: | [sizeof=4, align=4] 182 183 union u2 { 184 long : 0; 185 short a; 186 } U2; 187 // CHECK: 0 | union u2 188 // CHECK-NEXT: 0:- | long 189 // CHECK-NEXT: 0 | short a 190 // CHECK-NEXT: | [sizeof=8, align=8] 191 192 union u3 { 193 unsigned char : 0; 194 unsigned short : 0; 195 } U3; 196 // CHECK: 0 | union u3 197 // CHECK-NEXT: 0:- | unsigned char 198 // CHECK-NEXT: 0:- | unsigned short 199 // CHECK-NEXT: | [sizeof=0, align=4] 200