| // 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() { 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] |
| |
| 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] |