llvm-project/llvm/test/FrontendObjC/2009-04-28-bitfield-vs-vbc.m

128 lines
1.7 KiB
Objective-C

// RUN: %llvmgcc -S -x objective-c -m32 %s -o %t
// This used to crash, 6831493.
#include <stdlib.h>
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);
}