// 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)