203 lines
3.0 KiB
C
203 lines
3.0 KiB
C
// RUN: %clang_cc1 %s -fsyntax-only -verify -triple=i686-apple-darwin9
|
|
// RUN: %clang_cc1 %s -fsyntax-only -verify -triple=arm-linux-gnueabihf
|
|
// RUN: %clang_cc1 %s -fsyntax-only -verify -triple=aarch64-linux-gnu
|
|
// RUN: %clang_cc1 %s -fsyntax-only -verify -triple=x86_64-pc-linux-gnu
|
|
// expected-no-diagnostics
|
|
|
|
#define CHECK_SIZE(name, size) \
|
|
extern int name##_1[sizeof(name) == size ? 1 : -1];
|
|
|
|
|
|
struct __attribute__((packed)) {
|
|
int a;
|
|
int b : 4;
|
|
int c : 32;
|
|
} s0;
|
|
CHECK_SIZE(s0,9)
|
|
|
|
#pragma pack (1)
|
|
struct {
|
|
int a;
|
|
int b : 4;
|
|
int c : 32;
|
|
} s1;
|
|
CHECK_SIZE(s1,9)
|
|
|
|
#pragma pack (2)
|
|
struct {
|
|
int a;
|
|
int b : 4;
|
|
int c : 32;
|
|
} s2;
|
|
CHECK_SIZE(s2,10)
|
|
|
|
#pragma pack (2)
|
|
struct __attribute__((packed)) {
|
|
int a;
|
|
int b : 4;
|
|
int c : 32;
|
|
} s3;
|
|
CHECK_SIZE(s3,10)
|
|
|
|
#pragma pack (4)
|
|
struct __attribute__((packed)) {
|
|
int a;
|
|
int b : 4;
|
|
int c : 32;
|
|
} s4;
|
|
CHECK_SIZE(s4,12)
|
|
|
|
#pragma pack (16)
|
|
struct {
|
|
int a;
|
|
int __attribute__((packed)) b : 4;
|
|
int __attribute__((packed)) c : 32;
|
|
} s41;
|
|
CHECK_SIZE(s41,12)
|
|
|
|
#pragma pack (16)
|
|
struct {
|
|
int a;
|
|
int b : 4;
|
|
int c : 32;
|
|
} s5;
|
|
CHECK_SIZE(s5,12)
|
|
|
|
#pragma pack (1)
|
|
struct __attribute__((aligned(4))) {
|
|
int a;
|
|
int b : 4;
|
|
int c : 32;
|
|
} s6;
|
|
CHECK_SIZE(s6,12)
|
|
|
|
#pragma pack (2)
|
|
struct {
|
|
char a;
|
|
int b : 4;
|
|
int c : 32;
|
|
char s;
|
|
} s7;
|
|
CHECK_SIZE(s7,8)
|
|
|
|
#pragma pack (1)
|
|
struct {
|
|
char a;
|
|
int b : 4;
|
|
int c : 28;
|
|
char s;
|
|
} s8;
|
|
CHECK_SIZE(s8,6)
|
|
|
|
#pragma pack (8)
|
|
struct {
|
|
char a;
|
|
int b : 4;
|
|
int c : 28;
|
|
char s;
|
|
} s9;
|
|
CHECK_SIZE(s9,8)
|
|
|
|
#pragma pack (8)
|
|
struct {
|
|
char a;
|
|
char s;
|
|
} s10;
|
|
CHECK_SIZE(s10,2)
|
|
|
|
#pragma pack(4)
|
|
struct {
|
|
char a;
|
|
int b : 4;
|
|
int c : 28;
|
|
char s1;
|
|
char s2;
|
|
char s3;
|
|
} s11;
|
|
CHECK_SIZE(s11,8)
|
|
|
|
#pragma pack(4)
|
|
struct {
|
|
short s1;
|
|
int a1 : 17;
|
|
int a2 : 17;
|
|
int a3 : 30;
|
|
short s2;
|
|
} s12;
|
|
CHECK_SIZE(s12,12)
|
|
|
|
#pragma pack(4)
|
|
struct {
|
|
char c1;
|
|
int i1 : 17;
|
|
int i2 : 17;
|
|
int i3 : 30;
|
|
char c2;
|
|
} s13;
|
|
CHECK_SIZE(s13,12)
|
|
|
|
#pragma pack(2)
|
|
struct {
|
|
char a;
|
|
int s;
|
|
} s14;
|
|
CHECK_SIZE(s14,6)
|
|
|
|
#pragma pack(4)
|
|
struct {
|
|
char a;
|
|
short s;
|
|
} s15;
|
|
CHECK_SIZE(s15,4)
|
|
|
|
#pragma pack(2)
|
|
struct {
|
|
char a;
|
|
int b : 4;
|
|
int c : 28;
|
|
char s1;
|
|
char s2;
|
|
char s3;
|
|
} s16;
|
|
CHECK_SIZE(s16,8)
|
|
|
|
#pragma pack (16)
|
|
struct {
|
|
int __attribute__((packed)) a;
|
|
int __attribute__((packed)) b : 4;
|
|
int __attribute__((packed)) c : 32;
|
|
} s17;
|
|
CHECK_SIZE(s17,12)
|
|
|
|
#pragma pack (16)
|
|
struct {
|
|
int __attribute__((aligned(8))) a;
|
|
int __attribute__((aligned(8))) b : 4;
|
|
int __attribute__((aligned(8))) c : 32;
|
|
} s18;
|
|
CHECK_SIZE(s18,24)
|
|
|
|
#pragma pack (16)
|
|
struct {
|
|
int __attribute__((aligned(1))) a;
|
|
int __attribute__((aligned(1))) b : 4;
|
|
int __attribute__((aligned(1))) c : 32;
|
|
} s19;
|
|
CHECK_SIZE(s19,12)
|
|
|
|
#pragma pack (1)
|
|
struct __attribute__((aligned(8))) {
|
|
int a;
|
|
int b : 4;
|
|
int c : 32;
|
|
} s20;
|
|
CHECK_SIZE(s20,16)
|
|
|
|
#pragma pack (2)
|
|
struct {
|
|
int __attribute__((aligned(8))) a;
|
|
int __attribute__((aligned(8))) b : 4;
|
|
int __attribute__((aligned(8))) c : 32;
|
|
} s21;
|
|
CHECK_SIZE(s21,10)
|