1*67e74705SXin Li // RUN: %clang_cc1 %s -fsyntax-only -verify -triple=i686-apple-darwin9 2*67e74705SXin Li // RUN: %clang_cc1 %s -fsyntax-only -verify -triple=arm-linux-gnueabihf 3*67e74705SXin Li // RUN: %clang_cc1 %s -fsyntax-only -verify -triple=aarch64-linux-gnu 4*67e74705SXin Li // RUN: %clang_cc1 %s -fsyntax-only -verify -triple=x86_64-pc-linux-gnu 5*67e74705SXin Li // expected-no-diagnostics 6*67e74705SXin Li 7*67e74705SXin Li #define CHECK_SIZE(name, size) \ 8*67e74705SXin Li extern int name##_1[sizeof(name) == size ? 1 : -1]; 9*67e74705SXin Li 10*67e74705SXin Li 11*67e74705SXin Li struct __attribute__((packed)) { 12*67e74705SXin Li int a; 13*67e74705SXin Li int b : 4; 14*67e74705SXin Li int c : 32; 15*67e74705SXin Li } s0; 16*67e74705SXin Li CHECK_SIZE(s0,9) 17*67e74705SXin Li 18*67e74705SXin Li #pragma pack (1) 19*67e74705SXin Li struct { 20*67e74705SXin Li int a; 21*67e74705SXin Li int b : 4; 22*67e74705SXin Li int c : 32; 23*67e74705SXin Li } s1; 24*67e74705SXin Li CHECK_SIZE(s1,9) 25*67e74705SXin Li 26*67e74705SXin Li #pragma pack (2) 27*67e74705SXin Li struct { 28*67e74705SXin Li int a; 29*67e74705SXin Li int b : 4; 30*67e74705SXin Li int c : 32; 31*67e74705SXin Li } s2; 32*67e74705SXin Li CHECK_SIZE(s2,10) 33*67e74705SXin Li 34*67e74705SXin Li #pragma pack (2) 35*67e74705SXin Li struct __attribute__((packed)) { 36*67e74705SXin Li int a; 37*67e74705SXin Li int b : 4; 38*67e74705SXin Li int c : 32; 39*67e74705SXin Li } s3; 40*67e74705SXin Li CHECK_SIZE(s3,10) 41*67e74705SXin Li 42*67e74705SXin Li #pragma pack (4) 43*67e74705SXin Li struct __attribute__((packed)) { 44*67e74705SXin Li int a; 45*67e74705SXin Li int b : 4; 46*67e74705SXin Li int c : 32; 47*67e74705SXin Li } s4; 48*67e74705SXin Li CHECK_SIZE(s4,12) 49*67e74705SXin Li 50*67e74705SXin Li #pragma pack (16) 51*67e74705SXin Li struct { 52*67e74705SXin Li int a; 53*67e74705SXin Li int __attribute__((packed)) b : 4; 54*67e74705SXin Li int __attribute__((packed)) c : 32; 55*67e74705SXin Li } s41; 56*67e74705SXin Li CHECK_SIZE(s41,12) 57*67e74705SXin Li 58*67e74705SXin Li #pragma pack (16) 59*67e74705SXin Li struct { 60*67e74705SXin Li int a; 61*67e74705SXin Li int b : 4; 62*67e74705SXin Li int c : 32; 63*67e74705SXin Li } s5; 64*67e74705SXin Li CHECK_SIZE(s5,12) 65*67e74705SXin Li 66*67e74705SXin Li #pragma pack (1) 67*67e74705SXin Li struct __attribute__((aligned(4))) { 68*67e74705SXin Li int a; 69*67e74705SXin Li int b : 4; 70*67e74705SXin Li int c : 32; 71*67e74705SXin Li } s6; 72*67e74705SXin Li CHECK_SIZE(s6,12) 73*67e74705SXin Li 74*67e74705SXin Li #pragma pack (2) 75*67e74705SXin Li struct { 76*67e74705SXin Li char a; 77*67e74705SXin Li int b : 4; 78*67e74705SXin Li int c : 32; 79*67e74705SXin Li char s; 80*67e74705SXin Li } s7; 81*67e74705SXin Li CHECK_SIZE(s7,8) 82*67e74705SXin Li 83*67e74705SXin Li #pragma pack (1) 84*67e74705SXin Li struct { 85*67e74705SXin Li char a; 86*67e74705SXin Li int b : 4; 87*67e74705SXin Li int c : 28; 88*67e74705SXin Li char s; 89*67e74705SXin Li } s8; 90*67e74705SXin Li CHECK_SIZE(s8,6) 91*67e74705SXin Li 92*67e74705SXin Li #pragma pack (8) 93*67e74705SXin Li struct { 94*67e74705SXin Li char a; 95*67e74705SXin Li int b : 4; 96*67e74705SXin Li int c : 28; 97*67e74705SXin Li char s; 98*67e74705SXin Li } s9; 99*67e74705SXin Li CHECK_SIZE(s9,8) 100*67e74705SXin Li 101*67e74705SXin Li #pragma pack (8) 102*67e74705SXin Li struct { 103*67e74705SXin Li char a; 104*67e74705SXin Li char s; 105*67e74705SXin Li } s10; 106*67e74705SXin Li CHECK_SIZE(s10,2) 107*67e74705SXin Li 108*67e74705SXin Li #pragma pack(4) 109*67e74705SXin Li struct { 110*67e74705SXin Li char a; 111*67e74705SXin Li int b : 4; 112*67e74705SXin Li int c : 28; 113*67e74705SXin Li char s1; 114*67e74705SXin Li char s2; 115*67e74705SXin Li char s3; 116*67e74705SXin Li } s11; 117*67e74705SXin Li CHECK_SIZE(s11,8) 118*67e74705SXin Li 119*67e74705SXin Li #pragma pack(4) 120*67e74705SXin Li struct { 121*67e74705SXin Li short s1; 122*67e74705SXin Li int a1 : 17; 123*67e74705SXin Li int a2 : 17; 124*67e74705SXin Li int a3 : 30; 125*67e74705SXin Li short s2; 126*67e74705SXin Li } s12; 127*67e74705SXin Li CHECK_SIZE(s12,12) 128*67e74705SXin Li 129*67e74705SXin Li #pragma pack(4) 130*67e74705SXin Li struct { 131*67e74705SXin Li char c1; 132*67e74705SXin Li int i1 : 17; 133*67e74705SXin Li int i2 : 17; 134*67e74705SXin Li int i3 : 30; 135*67e74705SXin Li char c2; 136*67e74705SXin Li } s13; 137*67e74705SXin Li CHECK_SIZE(s13,12) 138*67e74705SXin Li 139*67e74705SXin Li #pragma pack(2) 140*67e74705SXin Li struct { 141*67e74705SXin Li char a; 142*67e74705SXin Li int s; 143*67e74705SXin Li } s14; 144*67e74705SXin Li CHECK_SIZE(s14,6) 145*67e74705SXin Li 146*67e74705SXin Li #pragma pack(4) 147*67e74705SXin Li struct { 148*67e74705SXin Li char a; 149*67e74705SXin Li short s; 150*67e74705SXin Li } s15; 151*67e74705SXin Li CHECK_SIZE(s15,4) 152*67e74705SXin Li 153*67e74705SXin Li #pragma pack(2) 154*67e74705SXin Li struct { 155*67e74705SXin Li char a; 156*67e74705SXin Li int b : 4; 157*67e74705SXin Li int c : 28; 158*67e74705SXin Li char s1; 159*67e74705SXin Li char s2; 160*67e74705SXin Li char s3; 161*67e74705SXin Li } s16; 162*67e74705SXin Li CHECK_SIZE(s16,8) 163*67e74705SXin Li 164*67e74705SXin Li #pragma pack (16) 165*67e74705SXin Li struct { 166*67e74705SXin Li int __attribute__((packed)) a; 167*67e74705SXin Li int __attribute__((packed)) b : 4; 168*67e74705SXin Li int __attribute__((packed)) c : 32; 169*67e74705SXin Li } s17; 170*67e74705SXin Li CHECK_SIZE(s17,12) 171*67e74705SXin Li 172*67e74705SXin Li #pragma pack (16) 173*67e74705SXin Li struct { 174*67e74705SXin Li int __attribute__((aligned(8))) a; 175*67e74705SXin Li int __attribute__((aligned(8))) b : 4; 176*67e74705SXin Li int __attribute__((aligned(8))) c : 32; 177*67e74705SXin Li } s18; 178*67e74705SXin Li CHECK_SIZE(s18,24) 179*67e74705SXin Li 180*67e74705SXin Li #pragma pack (16) 181*67e74705SXin Li struct { 182*67e74705SXin Li int __attribute__((aligned(1))) a; 183*67e74705SXin Li int __attribute__((aligned(1))) b : 4; 184*67e74705SXin Li int __attribute__((aligned(1))) c : 32; 185*67e74705SXin Li } s19; 186*67e74705SXin Li CHECK_SIZE(s19,12) 187*67e74705SXin Li 188*67e74705SXin Li #pragma pack (1) 189*67e74705SXin Li struct __attribute__((aligned(8))) { 190*67e74705SXin Li int a; 191*67e74705SXin Li int b : 4; 192*67e74705SXin Li int c : 32; 193*67e74705SXin Li } s20; 194*67e74705SXin Li CHECK_SIZE(s20,16) 195*67e74705SXin Li 196*67e74705SXin Li #pragma pack (2) 197*67e74705SXin Li struct { 198*67e74705SXin Li int __attribute__((aligned(8))) a; 199*67e74705SXin Li int __attribute__((aligned(8))) b : 4; 200*67e74705SXin Li int __attribute__((aligned(8))) c : 32; 201*67e74705SXin Li } s21; 202*67e74705SXin Li CHECK_SIZE(s21,10) 203