1*67e74705SXin Li// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fblocks -fobjc-gc -emit-llvm -o %t %s 2*67e74705SXin Li// RUN: grep objc_assign_ivar %t | count 3 3*67e74705SXin Li// RUN: grep objc_assign_strongCast %t | count 6 4*67e74705SXin Li// RUN: %clang_cc1 -x objective-c++ -triple x86_64-apple-darwin10 -fblocks -fobjc-gc -emit-llvm -o %t %s 5*67e74705SXin Li// RUN: grep objc_assign_ivar %t | count 3 6*67e74705SXin Li// RUN: grep objc_assign_strongCast %t | count 6 7*67e74705SXin Li 8*67e74705SXin Listruct Slice { 9*67e74705SXin Li void *__strong * items; 10*67e74705SXin Li}; 11*67e74705SXin Li 12*67e74705SXin Litypedef struct Slice Slice; 13*67e74705SXin Li 14*67e74705SXin Li@interface ISlice { 15*67e74705SXin Li@public 16*67e74705SXin Li void *__strong * IvarItem; 17*67e74705SXin Li} 18*67e74705SXin Li@end 19*67e74705SXin Li 20*67e74705SXin Litypedef void (^observer_block_t)(id object); 21*67e74705SXin Li@interface Observer { 22*67e74705SXin Li@public 23*67e74705SXin Li observer_block_t block; 24*67e74705SXin Li} 25*67e74705SXin Li@end 26*67e74705SXin Li 27*67e74705SXin Li 28*67e74705SXin Livoid foo (int i) { 29*67e74705SXin Li // storing into an array of strong pointer types. 30*67e74705SXin Li void *__strong* items; 31*67e74705SXin Li items[i] = 0; 32*67e74705SXin Li 33*67e74705SXin Li // storing indirectly into an array of strong pointer types. 34*67e74705SXin Li void *__strong* *vitems; 35*67e74705SXin Li *vitems[i] = 0; 36*67e74705SXin Li 37*67e74705SXin Li Slice *slice; 38*67e74705SXin Li slice->items = 0; 39*67e74705SXin Li // storing into a struct element of an array of strong pointer types. 40*67e74705SXin Li slice->items[i] = 0; 41*67e74705SXin Li 42*67e74705SXin Li ISlice *islice; 43*67e74705SXin Li islice->IvarItem = 0; 44*67e74705SXin Li // Storing into an ivar of an array of strong pointer types. 45*67e74705SXin Li islice->IvarItem[i] = (void*)0; 46*67e74705SXin Li 47*67e74705SXin Li Observer *observer; 48*67e74705SXin Li observer->block = 0; 49*67e74705SXin Li} 50