53 lines · plain
1// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fobjc-runtime=macosx-fragile-10.5 -fobjc-gc -emit-llvm -o %t %s2// RUN: grep -F '@objc_assign_ivar' %t | count 143 4typedef struct {5 id element;6 id elementArray[10];7 __strong id cfElement;8 __strong id cfElementArray[10];9} struct_with_ids_t;10 11 12@interface NSString @end13 14@interface Foo {15@public16// assignments to any/all of these fields should generate objc_assign_ivar17 __strong id dict;18 __strong id dictArray[3];19 id ivar;20 id array[10];21 id nsobject;22 NSString *stringArray[10];23 struct_with_ids_t inner;24 25 Foo *obj[20];26 short idx[5];27}28@end29 30// The test cases31int IvarAssigns;32void *rhs = 0;33#define ASSIGNTEST(expr, global) expr = rhs34 35void testIvars(void) {36 Foo *foo;37 ASSIGNTEST(foo->ivar, IvarAssigns); // objc_assign_ivar38 ASSIGNTEST(foo->dict, IvarAssigns); // objc_assign_ivar39 ASSIGNTEST(foo->dictArray[0], IvarAssigns); // objc_assign_ivar40 ASSIGNTEST(foo->array[0], IvarAssigns); // objc_assign_ivar41 ASSIGNTEST(foo->nsobject, IvarAssigns); // objc_assign_ivar42 ASSIGNTEST(foo->stringArray[0], IvarAssigns); // objc_assign_ivar43 ASSIGNTEST(foo->inner.element, IvarAssigns); // objc_assign_ivar44 ASSIGNTEST(foo->inner.elementArray[0], IvarAssigns); // objc_assign_ivar45 ASSIGNTEST(foo->inner.cfElement, IvarAssigns); // objc_assign_ivar46 ASSIGNTEST(foo->inner.cfElementArray[0], IvarAssigns); // objc_assign_ivar47 int counter=1;48 ASSIGNTEST(foo->obj[5], IvarAssigns); // objc_assign_ivar49 ASSIGNTEST(foo->obj[++counter], IvarAssigns); // objc_assign_ivar50 foo->idx[++counter] = 15;51 ASSIGNTEST(foo->obj[foo->idx[2]], IvarAssigns); // objc_assign_ivar52}53