1*67e74705SXin Li// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fobjc-runtime=macosx-fragile-10.5 -fobjc-gc -emit-llvm -o %t %s 2*67e74705SXin Li// RUN: grep -F '@objc_assign_ivar' %t | count 14 3*67e74705SXin Li 4*67e74705SXin Litypedef struct { 5*67e74705SXin Li id element; 6*67e74705SXin Li id elementArray[10]; 7*67e74705SXin Li __strong id cfElement; 8*67e74705SXin Li __strong id cfElementArray[10]; 9*67e74705SXin Li} struct_with_ids_t; 10*67e74705SXin Li 11*67e74705SXin Li 12*67e74705SXin Li@interface NSString @end 13*67e74705SXin Li 14*67e74705SXin Li@interface Foo { 15*67e74705SXin Li@public 16*67e74705SXin Li// assignments to any/all of these fields should generate objc_assign_ivar 17*67e74705SXin Li __strong id dict; 18*67e74705SXin Li __strong id dictArray[3]; 19*67e74705SXin Li id ivar; 20*67e74705SXin Li id array[10]; 21*67e74705SXin Li id nsobject; 22*67e74705SXin Li NSString *stringArray[10]; 23*67e74705SXin Li struct_with_ids_t inner; 24*67e74705SXin Li 25*67e74705SXin Li Foo *obj[20]; 26*67e74705SXin Li short idx[5]; 27*67e74705SXin Li} 28*67e74705SXin Li@end 29*67e74705SXin Li 30*67e74705SXin Li// The test cases 31*67e74705SXin Liint IvarAssigns; 32*67e74705SXin Livoid *rhs = 0; 33*67e74705SXin Li#define ASSIGNTEST(expr, global) expr = rhs 34*67e74705SXin Li 35*67e74705SXin Livoid testIvars() { 36*67e74705SXin Li Foo *foo; 37*67e74705SXin Li ASSIGNTEST(foo->ivar, IvarAssigns); // objc_assign_ivar 38*67e74705SXin Li ASSIGNTEST(foo->dict, IvarAssigns); // objc_assign_ivar 39*67e74705SXin Li ASSIGNTEST(foo->dictArray[0], IvarAssigns); // objc_assign_ivar 40*67e74705SXin Li ASSIGNTEST(foo->array[0], IvarAssigns); // objc_assign_ivar 41*67e74705SXin Li ASSIGNTEST(foo->nsobject, IvarAssigns); // objc_assign_ivar 42*67e74705SXin Li ASSIGNTEST(foo->stringArray[0], IvarAssigns); // objc_assign_ivar 43*67e74705SXin Li ASSIGNTEST(foo->inner.element, IvarAssigns); // objc_assign_ivar 44*67e74705SXin Li ASSIGNTEST(foo->inner.elementArray[0], IvarAssigns); // objc_assign_ivar 45*67e74705SXin Li ASSIGNTEST(foo->inner.cfElement, IvarAssigns); // objc_assign_ivar 46*67e74705SXin Li ASSIGNTEST(foo->inner.cfElementArray[0], IvarAssigns); // objc_assign_ivar 47*67e74705SXin Li int counter=1; 48*67e74705SXin Li ASSIGNTEST(foo->obj[5], IvarAssigns); // objc_assign_ivar 49*67e74705SXin Li ASSIGNTEST(foo->obj[++counter], IvarAssigns); // objc_assign_ivar 50*67e74705SXin Li foo->idx[++counter] = 15; 51*67e74705SXin Li ASSIGNTEST(foo->obj[foo->idx[2]], IvarAssigns); // objc_assign_ivar 52*67e74705SXin Li} 53