14967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// RUN: %clang_cc1 %s -fsyntax-only -verify -triple=i686-apple-darwin9
24967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// RUN: %clang_cc1 %s -fsyntax-only -verify -triple=arm-linux-gnueabihf
34967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// RUN: %clang_cc1 %s -fsyntax-only -verify -triple=aarch64-linux-gnu
44967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// RUN: %clang_cc1 %s -fsyntax-only -verify -triple=x86_64-pc-linux-gnu
54967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-no-diagnostics
64967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
74967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#define CHECK_SIZE(name, size) \
84967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  extern int name##_1[sizeof(name) == size ? 1 : -1];
94967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
104967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
114967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarstruct  __attribute__((packed)) {
124967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int a;
134967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int b : 4;
144967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int c : 32;
154967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} s0;
164967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarCHECK_SIZE(s0,9)
174967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
184967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma pack (1)
194967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarstruct {
204967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int a;
214967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int b : 4;
224967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int c : 32;
234967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} s1;
244967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarCHECK_SIZE(s1,9)
254967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
264967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma pack (2)
274967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarstruct {
284967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int a;
294967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int b : 4;
304967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int c : 32;
314967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} s2;
324967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarCHECK_SIZE(s2,10)
334967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
344967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma pack (2)
354967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarstruct __attribute__((packed)) {
364967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int a;
374967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int b : 4;
384967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int c : 32;
394967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} s3;
404967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarCHECK_SIZE(s3,10)
414967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
424967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma pack (4)
434967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarstruct  __attribute__((packed)) {
444967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int a;
454967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int b : 4;
464967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int c : 32;
474967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} s4;
484967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarCHECK_SIZE(s4,12)
494967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
504967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma pack (16)
514967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarstruct {
524967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int a;
534967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int __attribute__((packed)) b : 4;
544967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int __attribute__((packed)) c : 32;
554967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} s41;
564967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarCHECK_SIZE(s41,12)
574967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
584967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma pack (16)
594967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarstruct {
604967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int a;
614967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int b : 4;
624967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int c : 32;
634967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} s5;
644967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarCHECK_SIZE(s5,12)
654967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
664967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma pack (1)
674967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarstruct  __attribute__((aligned(4))) {
684967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int a;
694967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int b : 4;
704967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int c : 32;
714967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} s6;
724967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarCHECK_SIZE(s6,12)
734967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
744967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma pack (2)
754967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarstruct {
764967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  char a;
774967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int b : 4;
784967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int c : 32;
794967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  char s;
804967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} s7;
814967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarCHECK_SIZE(s7,8)
824967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
834967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma pack (1)
844967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarstruct {
854967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  char a;
864967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int b : 4;
874967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int c : 28;
884967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  char s;
894967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} s8;
904967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarCHECK_SIZE(s8,6)
914967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
924967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma pack (8)
934967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarstruct {
944967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  char a;
954967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int b : 4;
964967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int c : 28;
974967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  char s;
984967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} s9;
994967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarCHECK_SIZE(s9,8)
1004967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
1014967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma pack (8)
1024967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarstruct {
1034967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  char a;
1044967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  char s;
1054967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} s10;
1064967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarCHECK_SIZE(s10,2)
1074967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
1084967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma pack(4)
1094967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarstruct {
1104967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  char a;
1114967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int b : 4;
1124967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int c : 28;
1134967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  char s1;
1144967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  char s2;
1154967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  char s3;
1164967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} s11;
1174967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarCHECK_SIZE(s11,8)
1184967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
1194967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma pack(4)
1204967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarstruct {
1214967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  short s1;
1224967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int a1 : 17;
1234967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int a2 : 17;
1244967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int a3 : 30;
1254967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  short s2;
1264967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} s12;
1274967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarCHECK_SIZE(s12,12)
1284967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
1294967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma pack(4)
1304967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarstruct {
1314967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  char c1;
1324967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int i1 : 17;
1334967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int i2 : 17;
1344967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int i3 : 30;
1354967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  char c2;
1364967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} s13;
1374967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarCHECK_SIZE(s13,12)
1384967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
1394967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma pack(2)
1404967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarstruct {
1414967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  char a;
1424967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int s;
1434967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} s14;
1444967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarCHECK_SIZE(s14,6)
1454967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
1464967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma pack(4)
1474967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarstruct {
1484967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  char a;
1494967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  short s;
1504967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} s15;
1514967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarCHECK_SIZE(s15,4)
1524967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
1534967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma pack(2)
1544967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarstruct {
1554967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  char a;
1564967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int b : 4;
1574967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int c : 28;
1584967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  char s1;
1594967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  char s2;
1604967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  char s3;
1614967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} s16;
1624967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarCHECK_SIZE(s16,8)
1634967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
1644967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma pack (16)
1654967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarstruct {
1664967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int __attribute__((packed)) a;
1674967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int __attribute__((packed)) b : 4;
1684967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int __attribute__((packed)) c : 32;
1694967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} s17;
1704967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarCHECK_SIZE(s17,12)
1714967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
1724967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma pack (16)
1734967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarstruct {
1744967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int __attribute__((aligned(8))) a;
1754967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int __attribute__((aligned(8))) b : 4;
1764967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int __attribute__((aligned(8))) c : 32;
1774967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} s18;
1784967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarCHECK_SIZE(s18,24)
1794967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
1804967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma pack (16)
1814967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarstruct {
1824967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int __attribute__((aligned(1))) a;
1834967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int __attribute__((aligned(1))) b : 4;
1844967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int __attribute__((aligned(1))) c : 32;
1854967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} s19;
1864967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarCHECK_SIZE(s19,12)
1874967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
1884967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma pack (1)
1894967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarstruct  __attribute__((aligned(8))) {
1904967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int a;
1914967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int b : 4;
1924967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int c : 32;
1934967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} s20;
1944967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarCHECK_SIZE(s20,16)
1954967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
1964967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma pack (2)
1974967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarstruct {
1984967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int __attribute__((aligned(8))) a;
1994967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int __attribute__((aligned(8))) b : 4;
2004967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int __attribute__((aligned(8))) c : 32;
2014967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} s21;
2024967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarCHECK_SIZE(s21,10)
203