Home | History | Annotate | Download | only in CodeGen
      1 // REQUIRES: arm-registered-target
      2 // RUN: %clang_cc1 -target-abi apcs-gnu -triple armv7-apple-darwin10 %s -verify
      3 // expected-no-diagnostics
      4 //
      5 // Note: gcc forces the alignment to 4 bytes, regardless of the type of the
      6 // zero length bitfield.
      7 // rdar://9859156
      8 
      9 #include <stddef.h>
     10 
     11 struct t1
     12 {
     13   int foo : 1;
     14   char : 0;
     15   char bar;
     16 };
     17 static int arr1_offset[(offsetof(struct t1, bar) == 4) ? 0 : -1];
     18 static int arr1_sizeof[(sizeof(struct t1) == 8) ? 0 : -1];
     19 
     20 struct t2
     21 {
     22   int foo : 1;
     23   short : 0;
     24   char bar;
     25 };
     26 static int arr2_offset[(offsetof(struct t2, bar) == 4) ? 0 : -1];
     27 static int arr2_sizeof[(sizeof(struct t2) == 8) ? 0 : -1];
     28 
     29 struct t3
     30 {
     31   int foo : 1;
     32   int : 0;
     33   char bar;
     34 };
     35 static int arr3_offset[(offsetof(struct t3, bar) == 4) ? 0 : -1];
     36 static int arr3_sizeof[(sizeof(struct t3) == 8) ? 0 : -1];
     37 
     38 struct t4
     39 {
     40   int foo : 1;
     41   long : 0;
     42   char bar;
     43 };
     44 static int arr4_offset[(offsetof(struct t4, bar) == 4) ? 0 : -1];
     45 static int arr4_sizeof[(sizeof(struct t4) == 8) ? 0 : -1];
     46 
     47 struct t5
     48 {
     49   int foo : 1;
     50   long long : 0;
     51   char bar;
     52 };
     53 static int arr5_offset[(offsetof(struct t5, bar) == 4) ? 0 : -1];
     54 static int arr5_sizeof[(sizeof(struct t5) == 8) ? 0 : -1];
     55 
     56 struct t6
     57 {
     58   int foo : 1;
     59   char : 0;
     60   char bar : 1;
     61   char bar2;
     62 };
     63 static int arr6_offset[(offsetof(struct t6, bar2) == 5) ? 0 : -1];
     64 static int arr6_sizeof[(sizeof(struct t6) == 8) ? 0 : -1];
     65 
     66 struct t7
     67 {
     68   int foo : 1;
     69   short : 0;
     70   char bar1 : 1;
     71   char bar2;
     72 };
     73 static int arr7_offset[(offsetof(struct t7, bar2) == 5) ? 0 : -1];
     74 static int arr7_sizeof[(sizeof(struct t7) == 8) ? 0 : -1];
     75 
     76 struct t8
     77 {
     78   int foo : 1;
     79   int : 0;
     80   char bar1 : 1;
     81   char bar2;
     82 };
     83 static int arr8_offset[(offsetof(struct t8, bar2) == 5) ? 0 : -1];
     84 static int arr8_sizeof[(sizeof(struct t8) == 8) ? 0 : -1];
     85 
     86 struct t9
     87 {
     88   int foo : 1;
     89   long : 0;
     90   char bar1 : 1;
     91   char bar2;
     92 };
     93 static int arr9_offset[(offsetof(struct t9, bar2) == 5) ? 0 : -1];
     94 static int arr9_sizeof[(sizeof(struct t9) == 8) ? 0 : -1];
     95 
     96 struct t10
     97 {
     98   int foo : 1;
     99   long long : 0;
    100   char bar1 : 1;
    101   char bar2;
    102 };
    103 static int arr10_offset[(offsetof(struct t10, bar2) == 5) ? 0 : -1];
    104 static int arr10_sizeof[(sizeof(struct t10) == 8) ? 0 : -1];
    105 
    106 struct t11
    107 {
    108   int foo : 1;
    109   long long : 0;
    110   char : 0;
    111   char bar1 : 1;
    112   char bar2;
    113 };
    114 static int arr11_offset[(offsetof(struct t11, bar2) == 5) ? 0 : -1];
    115 static int arr11_sizeof[(sizeof(struct t11) == 8) ? 0 : -1];
    116 
    117 struct t12
    118 {
    119   int foo : 1;
    120   char : 0;
    121   long long : 0;
    122   char : 0;
    123   char bar;
    124 };
    125 static int arr12_offset[(offsetof(struct t12, bar) == 4) ? 0 : -1];
    126 static int arr12_sizeof[(sizeof(struct t12) == 8) ? 0 : -1];
    127 
    128 struct t13
    129 {
    130   char foo;
    131   long : 0;
    132   char bar;
    133 };
    134 static int arr13_offset[(offsetof(struct t13, bar) == 4) ? 0 : -1];
    135 static int arr13_sizeof[(sizeof(struct t13) == 8) ? 0 : -1];
    136 
    137 struct t14
    138 {
    139   char foo1;
    140   int : 0;
    141   char foo2 : 1;
    142   short foo3 : 16;
    143   char : 0;
    144   short foo4 : 16;
    145   char bar1;
    146   int : 0;
    147   char bar2;
    148 };
    149 static int arr14_bar1_offset[(offsetof(struct t14, bar1) == 10) ? 0 : -1];
    150 static int arr14_bar2_offset[(offsetof(struct t14, bar2) == 12) ? 0 : -1];
    151 static int arr14_sizeof[(sizeof(struct t14) == 16) ? 0 : -1];
    152 
    153 struct t15
    154 {
    155   char foo;
    156   char : 0;
    157   int : 0;
    158   char bar;
    159   long : 0;
    160   char : 0;
    161 };
    162 static int arr15_offset[(offsetof(struct t15, bar) == 4) ? 0 : -1];
    163 static int arr15_sizeof[(sizeof(struct t15) == 8) ? 0 : -1];
    164 
    165 struct t16
    166 {
    167   long : 0;
    168   char bar;
    169 };
    170 static int arr16_offset[(offsetof(struct t16, bar) == 0) ? 0 : -1];
    171 static int arr16_sizeof[(sizeof(struct t16) == 4) ? 0 : -1];
    172 
    173 struct t17
    174 {
    175   char foo;
    176   long : 0;
    177   long : 0;
    178   char : 0;
    179   char bar;
    180 };
    181 static int arr17_offset[(offsetof(struct t17, bar) == 4) ? 0 : -1];
    182 static int arr17_sizeof[(sizeof(struct t17) == 8) ? 0 : -1];
    183 
    184 struct t18
    185 {
    186   long : 0;
    187   long : 0;
    188   char : 0;
    189 };
    190 static int arr18_sizeof[(sizeof(struct t18) == 0) ? 0 : -1];
    191 
    192 struct t19
    193 {
    194   char foo1;
    195   long foo2 : 1;
    196   char : 0;
    197   long foo3 : 32;
    198   char bar;
    199 };
    200 static int arr19_offset[(offsetof(struct t19, bar) == 8) ? 0 : -1];
    201 static int arr19_sizeof[(sizeof(struct t19) == 12) ? 0 : -1];
    202 
    203 struct t20
    204 {
    205   short : 0;
    206   int foo : 1;
    207   long : 0;
    208   char bar;
    209 };
    210 static int arr20_offset[(offsetof(struct t20, bar) == 4) ? 0 : -1];
    211 static int arr20_sizeof[(sizeof(struct t20) == 8) ? 0 : -1];
    212 
    213 struct t21
    214 {
    215   short : 0;
    216   int foo1 : 1;
    217   char : 0;
    218   int foo2 : 16;
    219   long : 0;
    220   char bar1;
    221   int bar2;
    222   long bar3;
    223   char foo3 : 8;
    224   char : 0;
    225   long : 0;
    226   int foo4 : 32;
    227   short foo5: 1;
    228   long bar4;
    229   short foo6: 16;
    230   short foo7: 16;
    231   short foo8: 16;
    232 };
    233 static int arr21_bar1_offset[(offsetof(struct t21, bar1) == 8) ? 0 : -1];
    234 static int arr21_bar2_offset[(offsetof(struct t21, bar2) == 12) ? 0 : -1];
    235 static int arr21_bar3_offset[(offsetof(struct t21, bar3) == 16) ? 0 : -1];
    236 static int arr21_bar4_offset[(offsetof(struct t21, bar4) == 32) ? 0 : -1];
    237 static int arr21_sizeof[(sizeof(struct t21) == 44) ? 0 : -1];
    238 
    239 int main() {
    240   return 0;
    241 }
    242 
    243