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 11struct t1 12{ 13 int foo : 1; 14 char : 0; 15 char bar; 16}; 17static int arr1_offset[(offsetof(struct t1, bar) == 4) ? 0 : -1]; 18static int arr1_sizeof[(sizeof(struct t1) == 8) ? 0 : -1]; 19 20struct t2 21{ 22 int foo : 1; 23 short : 0; 24 char bar; 25}; 26static int arr2_offset[(offsetof(struct t2, bar) == 4) ? 0 : -1]; 27static int arr2_sizeof[(sizeof(struct t2) == 8) ? 0 : -1]; 28 29struct t3 30{ 31 int foo : 1; 32 int : 0; 33 char bar; 34}; 35static int arr3_offset[(offsetof(struct t3, bar) == 4) ? 0 : -1]; 36static int arr3_sizeof[(sizeof(struct t3) == 8) ? 0 : -1]; 37 38struct t4 39{ 40 int foo : 1; 41 long : 0; 42 char bar; 43}; 44static int arr4_offset[(offsetof(struct t4, bar) == 4) ? 0 : -1]; 45static int arr4_sizeof[(sizeof(struct t4) == 8) ? 0 : -1]; 46 47struct t5 48{ 49 int foo : 1; 50 long long : 0; 51 char bar; 52}; 53static int arr5_offset[(offsetof(struct t5, bar) == 4) ? 0 : -1]; 54static int arr5_sizeof[(sizeof(struct t5) == 8) ? 0 : -1]; 55 56struct t6 57{ 58 int foo : 1; 59 char : 0; 60 char bar : 1; 61 char bar2; 62}; 63static int arr6_offset[(offsetof(struct t6, bar2) == 5) ? 0 : -1]; 64static int arr6_sizeof[(sizeof(struct t6) == 8) ? 0 : -1]; 65 66struct t7 67{ 68 int foo : 1; 69 short : 0; 70 char bar1 : 1; 71 char bar2; 72}; 73static int arr7_offset[(offsetof(struct t7, bar2) == 5) ? 0 : -1]; 74static int arr7_sizeof[(sizeof(struct t7) == 8) ? 0 : -1]; 75 76struct t8 77{ 78 int foo : 1; 79 int : 0; 80 char bar1 : 1; 81 char bar2; 82}; 83static int arr8_offset[(offsetof(struct t8, bar2) == 5) ? 0 : -1]; 84static int arr8_sizeof[(sizeof(struct t8) == 8) ? 0 : -1]; 85 86struct t9 87{ 88 int foo : 1; 89 long : 0; 90 char bar1 : 1; 91 char bar2; 92}; 93static int arr9_offset[(offsetof(struct t9, bar2) == 5) ? 0 : -1]; 94static int arr9_sizeof[(sizeof(struct t9) == 8) ? 0 : -1]; 95 96struct t10 97{ 98 int foo : 1; 99 long long : 0; 100 char bar1 : 1; 101 char bar2; 102}; 103static int arr10_offset[(offsetof(struct t10, bar2) == 5) ? 0 : -1]; 104static int arr10_sizeof[(sizeof(struct t10) == 8) ? 0 : -1]; 105 106struct t11 107{ 108 int foo : 1; 109 long long : 0; 110 char : 0; 111 char bar1 : 1; 112 char bar2; 113}; 114static int arr11_offset[(offsetof(struct t11, bar2) == 5) ? 0 : -1]; 115static int arr11_sizeof[(sizeof(struct t11) == 8) ? 0 : -1]; 116 117struct t12 118{ 119 int foo : 1; 120 char : 0; 121 long long : 0; 122 char : 0; 123 char bar; 124}; 125static int arr12_offset[(offsetof(struct t12, bar) == 4) ? 0 : -1]; 126static int arr12_sizeof[(sizeof(struct t12) == 8) ? 0 : -1]; 127 128struct t13 129{ 130 char foo; 131 long : 0; 132 char bar; 133}; 134static int arr13_offset[(offsetof(struct t13, bar) == 4) ? 0 : -1]; 135static int arr13_sizeof[(sizeof(struct t13) == 8) ? 0 : -1]; 136 137struct 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}; 149static int arr14_bar1_offset[(offsetof(struct t14, bar1) == 10) ? 0 : -1]; 150static int arr14_bar2_offset[(offsetof(struct t14, bar2) == 12) ? 0 : -1]; 151static int arr14_sizeof[(sizeof(struct t14) == 16) ? 0 : -1]; 152 153struct t15 154{ 155 char foo; 156 char : 0; 157 int : 0; 158 char bar; 159 long : 0; 160 char : 0; 161}; 162static int arr15_offset[(offsetof(struct t15, bar) == 4) ? 0 : -1]; 163static int arr15_sizeof[(sizeof(struct t15) == 8) ? 0 : -1]; 164 165struct t16 166{ 167 long : 0; 168 char bar; 169}; 170static int arr16_offset[(offsetof(struct t16, bar) == 0) ? 0 : -1]; 171static int arr16_sizeof[(sizeof(struct t16) == 4) ? 0 : -1]; 172 173struct t17 174{ 175 char foo; 176 long : 0; 177 long : 0; 178 char : 0; 179 char bar; 180}; 181static int arr17_offset[(offsetof(struct t17, bar) == 4) ? 0 : -1]; 182static int arr17_sizeof[(sizeof(struct t17) == 8) ? 0 : -1]; 183 184struct t18 185{ 186 long : 0; 187 long : 0; 188 char : 0; 189}; 190static int arr18_sizeof[(sizeof(struct t18) == 0) ? 0 : -1]; 191 192struct t19 193{ 194 char foo1; 195 long foo2 : 1; 196 char : 0; 197 long foo3 : 32; 198 char bar; 199}; 200static int arr19_offset[(offsetof(struct t19, bar) == 8) ? 0 : -1]; 201static int arr19_sizeof[(sizeof(struct t19) == 12) ? 0 : -1]; 202 203struct t20 204{ 205 short : 0; 206 int foo : 1; 207 long : 0; 208 char bar; 209}; 210static int arr20_offset[(offsetof(struct t20, bar) == 4) ? 0 : -1]; 211static int arr20_sizeof[(sizeof(struct t20) == 8) ? 0 : -1]; 212 213struct 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}; 233static int arr21_bar1_offset[(offsetof(struct t21, bar1) == 8) ? 0 : -1]; 234static int arr21_bar2_offset[(offsetof(struct t21, bar2) == 12) ? 0 : -1]; 235static int arr21_bar3_offset[(offsetof(struct t21, bar3) == 16) ? 0 : -1]; 236static int arr21_bar4_offset[(offsetof(struct t21, bar4) == 32) ? 0 : -1]; 237static int arr21_sizeof[(sizeof(struct t21) == 44) ? 0 : -1]; 238 239int main() { 240 return 0; 241} 242 243