// RUN: %llvmgcc -S -x objective-c -m32 %s -o %t // This used to crash, 6831493. #include struct s0 { double x; }; @interface I2 { struct s0 _iv1; } @end @interface I3 : I2 { unsigned int _iv2 :1; unsigned : 0; unsigned int _iv3 : 3; } @end @interface I4 : I3 { char _iv4; } @end @interface I5 : I4 { char _iv5; int _iv6; int _iv7; } @property int P1; @end @implementation I2 @end @implementation I3 @end @implementation I4 @end @interface I5 () @property int P2; @end #if 0 int g2 = sizeof(I2); int g3 = sizeof(I3); int g4 = sizeof(I4); int g5_0 = sizeof(I5); #endif @implementation I5 #ifdef __x86_64 @synthesize P1 = _MadeUpName; @synthesize P2 = _AnotherMadeUpName; #else @synthesize P1 = _iv6; @synthesize P2 = _iv7; #endif @end #if 0 int g5_1 = sizeof(I5); #endif @interface T0_I0 { double iv_A_0; char iv_A_1; } @end @interface T0_I1 : T0_I0 { char iv_B_0; } @end @interface T0_I2 : T0_I1 { char iv_C_0; } @end #if 0 int g6 = sizeof(T0_I0); int g7 = sizeof(T0_I1); int g8 = sizeof(T0_I2); #endif @implementation T0_I0 @end @implementation T0_I1 @end @implementation T0_I2 @end void f0(I2*i2,I3*i3,I4*i4,I5*i5,T0_I0*t0_i0,T0_I1*t0_i1,T0_I2*t0_i2) { } // Thomas Wang's ui32 hash. unsigned hash_ui32_to_ui32(unsigned a) { a = (a ^ 61) ^ (a >> 16); a = a + (a << 3); a = a ^ (a >> 4); a = a * 0x27d4eb2d; a = a ^ (a >> 15); return a; } unsigned char hash_ui32_to_ui8(unsigned ui) { ui = hash_ui32_to_ui32(ui); ui ^= ui>>8; ui ^= ui>>8; ui ^= ui>>8; return (unsigned char) ui; } void *init() { unsigned i, N = 1024; unsigned char *p = malloc(N); for (i=0; i != N; ++i) p[i] = hash_ui32_to_ui8(i); return p; } int main(){ void *p = init(); f0(p,p,p,p,p,p,p); }