|  | // RUN: %clang_cc1 -emit-llvm-only -triple s390x-none-zos -fdump-record-layouts %s | FileCheck %s --check-prefix=CHECK | 
|  | // RUN: %clang_cc1 -emit-llvm -triple s390x-none-zos %s -o - | FileCheck %s --check-prefix=DECL | 
|  |  | 
|  | static int __attribute__((aligned(32))) v0; | 
|  | int __attribute__((aligned(32))) v1; | 
|  | typedef int __attribute__((aligned(32))) int32; | 
|  | static int32 v2; | 
|  | int32 v3; | 
|  | int f0(void) { return v0 + v1 + v2 + v3; } | 
|  | // DECL:      @v0 {{.*}} align 16 | 
|  | // DECL-NEXT: @v1 {{.*}} align 32 | 
|  | // DECL-NEXT: @v2 {{.*}} align 16 | 
|  | // DECL-NEXT: @v3 {{.*}} align 32 | 
|  |  | 
|  | const struct cs0 { | 
|  | unsigned long : 0; | 
|  | long long a; | 
|  | } CS0 = {}; | 
|  | // CHECK:              0 | struct cs0 | 
|  | // CHECK-NEXT:       0:- |   unsigned long | 
|  | // CHECK-NEXT:         0 |   long long a | 
|  | // CHECK-NEXT:           | [sizeof=8, align=8] | 
|  |  | 
|  | volatile struct vs0 { | 
|  | long : 0; | 
|  | short a; | 
|  | } VS0; | 
|  | // CHECK:              0 | struct vs0 | 
|  | // CHECK-NEXT:       0:- |   long | 
|  | // CHECK-NEXT:         0 |   short a | 
|  | // CHECK-NEXT:           | [sizeof=2, align=2] | 
|  |  | 
|  | struct s0 { | 
|  | short a : 3; | 
|  | long b : 5; | 
|  | int c : 1; | 
|  | long d : 10; | 
|  | char e : 5; | 
|  | } S0; | 
|  | // CHECK:              0 | struct s0 | 
|  | // CHECK-NEXT:     0:0-2 |   short a | 
|  | // CHECK-NEXT:     0:3-7 |   long b | 
|  | // CHECK-NEXT:     1:0-0 |   int c | 
|  | // CHECK-NEXT:    1:1-10 |   long d | 
|  | // CHECK-NEXT:     2:3-7 |   char e | 
|  | // CHECK-NEXT:           | [sizeof=3, align=1] | 
|  |  | 
|  | struct s1 { | 
|  | char a : 7; | 
|  | long b : 27; | 
|  | int c : 2; | 
|  | } S1; | 
|  | // CHECK:              0 | struct s1 | 
|  | // CHECK-NEXT:     0:0-6 |   char a | 
|  | // CHECK-NEXT:    0:7-33 |   long b | 
|  | // CHECK-NEXT:     4:2-3 |   int c | 
|  | // CHECK-NEXT:           | [sizeof=5, align=1] | 
|  |  | 
|  | struct s2 { | 
|  | char a : 7; | 
|  | char : 0; | 
|  | short : 0; | 
|  | short : 0; | 
|  | } S2; | 
|  | // CHECK:              0 | struct s2 | 
|  | // CHECK-NEXT:     0:0-6 |   char a | 
|  | // CHECK-NEXT:       4:- |   char | 
|  | // CHECK-NEXT:       4:- |   short | 
|  | // CHECK-NEXT:       4:- |   short | 
|  | // CHECK-NEXT:           | [sizeof=4, align=4] | 
|  |  | 
|  | struct s3 { | 
|  | int a; | 
|  | int b : 16; | 
|  | char : 0; | 
|  | char c : 1; | 
|  | } S3; | 
|  | // CHECK:              0 | struct s3 | 
|  | // CHECK-NEXT:         0 |   int a | 
|  | // CHECK-NEXT:    4:0-15 |   int b | 
|  | // CHECK-NEXT:       8:- |   char | 
|  | // CHECK-NEXT:     8:0-0 |   char c | 
|  | // CHECK-NEXT:           | [sizeof=12, align=4] | 
|  |  | 
|  | struct s4 { | 
|  | unsigned int __attribute__((aligned(32))) a; | 
|  | } S4; | 
|  | // CHECK:              0 | struct s4 | 
|  | // CHECK-NEXT:         0 |   unsigned int a | 
|  | // CHECK-NEXT:           | [sizeof=32, align=32] | 
|  |  | 
|  | struct s5 { | 
|  | char a; | 
|  | int b : 19 __attribute__((aligned(4))); | 
|  | int c : 22 __attribute__((aligned(8))); | 
|  | int : 0; | 
|  | int d : 10; | 
|  | } S5; | 
|  | // CHECK:              0 | struct s5 | 
|  | // CHECK-NEXT:         0 |   char a | 
|  | // CHECK-NEXT:    4:0-18 |   int b | 
|  | // CHECK-NEXT:    8:0-21 |   int c | 
|  | // CHECK-NEXT:      12:- |   int | 
|  | // CHECK-NEXT:    12:0-9 |   int d | 
|  | // CHECK-NEXT:           | [sizeof=16, align=8] | 
|  |  | 
|  | struct s6 { | 
|  | char *a; | 
|  | char *b[]; | 
|  | } S6; | 
|  | // CHECK:              0 | struct s6 | 
|  | // CHECK-NEXT:         0 |   char * a | 
|  | // CHECK-NEXT:         8 |   char *[] b | 
|  | // CHECK-NEXT:           | [sizeof=8, align=8] | 
|  |  | 
|  | struct s7 { | 
|  | long : 0; | 
|  | short a; | 
|  | } S7; | 
|  | // CHECK:              0 | struct s7 | 
|  | // CHECK-NEXT:       0:- |   long | 
|  | // CHECK-NEXT:         0 |   short a | 
|  | // CHECK-NEXT:           | [sizeof=2, align=2] | 
|  |  | 
|  | #pragma pack(2) | 
|  | struct s8 { | 
|  | unsigned long : 0; | 
|  | long long a; | 
|  | } S8; | 
|  | #pragma pack() | 
|  | // CHECK:              0 | struct s8 | 
|  | // CHECK-NEXT:       0:- |   unsigned long | 
|  | // CHECK-NEXT:         0 |   long long a | 
|  | // CHECK-NEXT:           | [sizeof=8, align=2] | 
|  |  | 
|  | struct s9 { | 
|  | unsigned int : 0; | 
|  | unsigned short : 0; | 
|  | } S9; | 
|  | // CHECK:              0 | struct s9 | 
|  | // CHECK-NEXT:       0:- |   unsigned int | 
|  | // CHECK-NEXT:       0:- |   unsigned short | 
|  | // CHECK-NEXT:           | [sizeof=0, align=1] | 
|  |  | 
|  | struct s10 { | 
|  | unsigned int __attribute__((aligned)) a; | 
|  | } S10; | 
|  | // CHECK:              0 | struct s10 | 
|  | // CHECK-NEXT:         0 |   unsigned int a | 
|  | // CHECK-NEXT:           | [sizeof=8, align=8] | 
|  |  | 
|  | struct s11 { | 
|  | char a; | 
|  | long : 0; | 
|  | char b; | 
|  | } S11; | 
|  | // CHECK:              0 | struct s11 | 
|  | // CHECK-NEXT:         0 |   char a | 
|  | // CHECK-NEXT:       8:- |   long | 
|  | // CHECK-NEXT:         8 |   char b | 
|  | // CHECK-NEXT:           | [sizeof=16, align=8] | 
|  |  | 
|  | struct s12 { | 
|  | __int128_t a; | 
|  | } S12; | 
|  | // CHECK:              0 | struct s12 | 
|  | // CHECK-NEXT:         0 |   __int128_t a | 
|  | // CHECK-NEXT:           | [sizeof=16, align=8] | 
|  |  | 
|  | union u0 { | 
|  | unsigned short d1 __attribute__((packed)); | 
|  | int d2 : 10; | 
|  | long d3; | 
|  | } U0 __attribute__((aligned(8))); | 
|  | // CHECK:              0 | union u0 | 
|  | // CHECK-NEXT:         0 |   unsigned short d1 | 
|  | // CHECK-NEXT:     0:0-9 |   int d2 | 
|  | // CHECK-NEXT:         0 |   long d3 | 
|  | // CHECK-NEXT:           | [sizeof=8, align=8] | 
|  |  | 
|  | union u1 { | 
|  | unsigned int : 0; | 
|  | short a; | 
|  | } U1; | 
|  | // CHECK:              0 | union u1 | 
|  | // CHECK-NEXT:       0:- |   unsigned int | 
|  | // CHECK-NEXT:         0 |   short a | 
|  | // CHECK-NEXT:           | [sizeof=4, align=4] | 
|  |  | 
|  | union u2 { | 
|  | long : 0; | 
|  | short a; | 
|  | } U2; | 
|  | // CHECK:              0 | union u2 | 
|  | // CHECK-NEXT:       0:- |   long | 
|  | // CHECK-NEXT:         0 |   short a | 
|  | // CHECK-NEXT:           | [sizeof=8, align=8] | 
|  |  | 
|  | union u3 { | 
|  | unsigned char : 0; | 
|  | unsigned short : 0; | 
|  | } U3; | 
|  | // CHECK:              0 | union u3 | 
|  | // CHECK-NEXT:       0:- |   unsigned char | 
|  | // CHECK-NEXT:       0:- |   unsigned short | 
|  | // CHECK-NEXT:           | [sizeof=0, align=4] |