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