aboutsummaryrefslogtreecommitdiff
path: root/clang/test/CodeGen/SystemZ/zos-mixed-ptr-sizes-sizeof.c
blob: 6b434a926f706b019d76eaf9ad656220fdc966d0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
// RUN: %clang_cc1 -emit-llvm -triple s390x-ibm-zos -fzos-extensions -fdump-record-layouts < %s | FileCheck %s --check-prefix=PTR32-ZOS
// RUN: %clang_cc1 -emit-llvm -triple s390x-ibm-linux -fzos-extensions -fdump-record-layouts < %s | FileCheck %s --check-prefix=PTR32-LINUX
// RUN: %clang_cc1 -emit-llvm -triple s390x-linux-gnu -fzos-extensions -fdump-record-layouts < %s | FileCheck %s --check-prefix=PTR32-LINUX

// PTR32-ZOS:          0  | struct s1
// PTR32-ZOS-NEXT:     0  | long a
// PTR32-ZOS-NEXT:     8  | int b
// PTR32-ZOS-NEXT:     12 | int * __ptr32 c
// PTR32-ZOS-NEXT:     16 | int d
// PTR32-ZOS-NEXT:        | [sizeof=24, align=8]

// PTR32-LINUX:        0  | struct s1
// PTR32-LINUX-NEXT:   0  | long a
// PTR32-LINUX-NEXT:   8  | int b
// PTR32-LINUX-NEXT:   16 | int * __ptr32 c
// PTR32-LINUX-NEXT:   24 | int d
// PTR32-LINUX-NEXT:      | [sizeof=32, align=8]
struct s1 {
  long a;
  int b;
  int * __ptr32 c;
  int d;
} S1;

// PTR32-ZOS:          0  | struct s2
// PTR32-ZOS-NEXT:     0  | long a
// PTR32-ZOS-NEXT:     8  | int b
// PTR32-ZOS-NEXT:     16 | int * c
// PTR32-ZOS-NEXT:     24 | int d
// PTR32-ZOS-NEXT:        | [sizeof=32, align=8]

// PTR32-LINUX:        0  | struct s2
// PTR32-LINUX-NEXT:   0  | long a
// PTR32-LINUX-NEXT:   8  | int b
// PTR32-LINUX-NEXT:   16 | int * c
// PTR32-LINUX-NEXT:   24 | int d
// PTR32-LINUX-NEXT:      | [sizeof=32, align=8]
struct s2 {
  long a;
  int b;
  int *c;
  int d;
} S2;

// PTR32-ZOS:          0  | struct s3
// PTR32-ZOS-NEXT:     0  | int a
// PTR32-ZOS-NEXT:     4  | int * __ptr32 b
// PTR32-ZOS-NEXT:     8  | int * __ptr32 c
// PTR32-ZOS-NEXT:     12 | int * d
// PTR32-ZOS-NEXT:        | [sizeof=20, align=1]

struct __attribute__((packed)) s3 {
  int a;
  int *__ptr32 b;
  int *__ptr32 c;
  int *d;
};
struct s3 S3;

// PTR32-ZOS:          0 | union u1
// PTR32-ZOS-NEXT:     0 | int * __ptr32 a
// PTR32-ZOS-NEXT:     0 | int * b
// PTR32-ZOS-NEXT:       | [sizeof=8, align=8]

// PTR32-LINUX:        0 | union u1
// PTR32-LINUX-NEXT:   0 | int * __ptr32 a
// PTR32-LINUX-NEXT:   0 | int * b
// PTR32-LINUX-NEXT:     | [sizeof=8, align=8]
union u1 {
  int *__ptr32 a;
  int *b;
} U1;

// PTR32-ZOS:          0 | union u2
// PTR32-ZOS-NEXT:     0 | int * __ptr32 a
// PTR32-ZOS-NEXT:     0 | int * b
// PTR32-ZOS-NEXT:       | [sizeof=8, align=1]

union __attribute__((packed)) u2 {
  int *__ptr32 a;
  int *b;
};
union u2 U2;

// PTR32-ZOS:          0 | union u3
// PTR32-ZOS-NEXT:     0 | int * __ptr32 a
// PTR32-ZOS-NEXT:     0 | short b
// PTR32-ZOS-NEXT:       | [sizeof=4, align=1]

union __attribute__((packed)) u3 {
  int *__ptr32 a;
  short b;
};
union u3 U3;