1// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fobjc-runtime=macosx-fragile-10.5 -fobjc-gc -emit-llvm -o %t %s 2// RUN: grep -F '@objc_assign_global' %t | count 7 3// RUN: grep -F '@objc_assign_ivar' %t | count 5 4// RUN: grep -F '@objc_assign_strongCast' %t | count 8 5// RUN: %clang_cc1 -x objective-c++ -triple x86_64-apple-darwin10 -fobjc-runtime=macosx-fragile-10.5 -fobjc-gc -emit-llvm -o %t %s 6// RUN: grep -F '@objc_assign_global' %t | count 7 7// RUN: grep -F '@objc_assign_ivar' %t | count 5 8// RUN: grep -F '@objc_assign_strongCast' %t | count 8 9 10extern id **somefunc(void); 11extern id *somefunc2(void); 12 13 14// Globals 15 16id W, *X, **Y; 17 18void func(id a, id *b, id **c) { 19 static id w, *x, **y; 20 W = a; 21 w = a; 22 X = b; 23 x = b; 24 Y = c; 25 y = c; 26} 27 28// Instances 29 30@interface something { 31 id w, *x, **y; 32} 33@end 34 35@implementation something 36- (void)amethod { 37 id badIdea = *somefunc2(); 38 w = badIdea; 39 x = &badIdea; 40 y = &x; 41} 42@end 43 44typedef struct { 45 int junk; 46 id alfred; 47} AStruct; 48 49void funct2(AStruct *aptr) { 50 id **ppptr = somefunc(); 51 aptr->alfred = 0; 52 **ppptr = aptr->alfred; 53 *ppptr = somefunc2(); 54} 55 56typedef const struct __CFString * CFStringRef; 57@interface DSATextSearch { 58__strong CFStringRef *_documentNames; 59 struct { 60 id *innerNames; 61 struct { 62 id *nestedDeeperNames; 63 struct I { 64 id *is1; 65 id is2[5]; 66 } arrI [3]; 67 } inner_most; 68 } inner; 69 70} 71- filter; 72@end 73@implementation DSATextSearch 74- filter { 75 int filteredPos = 0; 76 _documentNames[filteredPos] = 0; // storing into an element of array ivar. objc_assign_strongCast is needed. 77 inner.innerNames[filteredPos] = 0; 78 inner.inner_most.nestedDeeperNames[filteredPos] = 0; 79 inner.inner_most.arrI[3].is1[5] = 0; 80 inner.inner_most.arrI[3].is2[5] = 0; 81} 82@end 83 84