mirror of
https://github.com/Gericom/teak-llvm.git
synced 2025-06-28 07:49:01 -04:00

target Objective-C runtime down to the frontend: break this down into a single target runtime kind and version, and compute all the relevant information from that. This makes it relatively painless to add support for new runtimes to the compiler. Make the new -cc1 flag, -fobjc-runtime=blah-x.y.z, available at the driver level as a better and more general alternative to -fgnu-runtime and -fnext-runtime. This new concept of an Objective-C runtime also encompasses what we were previously separating out as the "Objective-C ABI", so fragile vs. non-fragile runtimes are now really modelled as different kinds of runtime, paving the way for better overall differentiation. As a sort of special case, continue to accept the -cc1 flag -fobjc-runtime-has-weak, as a sop to PLCompatibilityWeak. I won't go so far as to say "no functionality change", even ignoring the new driver flag, but subtle changes in driver semantics are almost certainly not intended. llvm-svn: 158793
62 lines
1.7 KiB
Objective-C
62 lines
1.7 KiB
Objective-C
// RUN: %clang_cc1 -triple i386-apple-darwin9 -fobjc-runtime=macosx-fragile-10.5 -emit-llvm -o %t %s
|
|
// RUN: %clang_cc1 -triple x86_64-apple-darwin9 -fobjc-runtime=macosx-fragile-10.5 -emit-llvm -o %t %s
|
|
|
|
@interface I0 {
|
|
@public
|
|
_Complex float iv0;
|
|
}
|
|
|
|
@property(assign) _Complex float p0;
|
|
|
|
-(_Complex float) im0;
|
|
-(void) setIm0: (_Complex float) a0;
|
|
@end
|
|
|
|
@implementation I0
|
|
@dynamic p0;
|
|
|
|
-(id) init {
|
|
self->iv0 = 5.0 + 2.0i;
|
|
return self;
|
|
}
|
|
|
|
-(_Complex float) im0 {
|
|
printf("im0: %.2f + %.2fi\n", __real iv0, __imag iv0);
|
|
return iv0 + (.1 + .2i);
|
|
}
|
|
-(void) setIm0: (_Complex float) a0 {
|
|
printf("setIm0: %.2f + %.2fi\n", __real a0, __imag a0);
|
|
iv0 = a0 + (.3 + .4i);
|
|
}
|
|
|
|
-(_Complex float) p0 {
|
|
printf("p0: %.2f + %.2fi\n", __real iv0, __imag iv0);
|
|
return iv0 + (.5 + .6i);
|
|
}
|
|
-(void) setP0: (_Complex float) a0 {
|
|
printf("setP0: %.2f + %.2fi\n", __real a0, __imag a0);
|
|
iv0 = a0 + (.7 + .8i);
|
|
}
|
|
@end
|
|
|
|
void f0(I0 *a0) {
|
|
float l0 = __real a0.im0;
|
|
float l1 = __imag a0->iv0;
|
|
_Complex float l2 = (a0.im0 = a0.im0);
|
|
_Complex float l3 = a0->iv0;
|
|
_Complex float l4 = (a0->iv0 = a0->iv0);
|
|
_Complex float l5 = a0->iv0;
|
|
_Complex float l6 = (a0.p0 = a0.p0);
|
|
_Complex float l7 = a0->iv0;
|
|
_Complex float l8 = [a0 im0];
|
|
printf("l0: %.2f + %.2fi\n", __real l0, __imag l0);
|
|
printf("l1: %.2f + %.2fi\n", __real l1, __imag l1);
|
|
printf("l2: %.2f + %.2fi\n", __real l2, __imag l2);
|
|
printf("l3: %.2f + %.2fi\n", __real l3, __imag l3);
|
|
printf("l4: %.2f + %.2fi\n", __real l4, __imag l4);
|
|
printf("l5: %.2f + %.2fi\n", __real l5, __imag l5);
|
|
printf("l6: %.2f + %.2fi\n", __real l6, __imag l6);
|
|
printf("l7: %.2f + %.2fi\n", __real l7, __imag l7);
|
|
printf("l8: %.2f + %.2fi\n", __real l8, __imag l8);
|
|
}
|