// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fobjc-gc -emit-llvm -o %t %s // RUN: grep -F '@objc_assign_global' %t | count 7 // RUN: grep -F '@objc_assign_ivar' %t | count 5 // RUN: grep -F '@objc_assign_strongCast' %t | count 8 extern id **somefunc(void); extern id *somefunc2(void); // Globals id W, *X, **Y; void func(id a, id *b, id **c) { static id w, *x, **y; W = a; w = a; X = b; x = b; Y = c; y = c; } // Instances @interface something { id w, *x, **y; } @end @implementation something - (void)amethod { id badIdea = *somefunc2(); w = badIdea; x = &badIdea; y = &x; } @end typedef struct { int junk; id alfred; } AStruct; void funct2(AStruct *aptr) { id **ppptr = somefunc(); aptr->alfred = 0; **ppptr = aptr->alfred; *ppptr = somefunc2(); } typedef const struct __CFString * CFStringRef; @interface DSATextSearch { __strong CFStringRef *_documentNames; struct { id *innerNames; struct { id *nestedDeeperNames; struct I { id *is1; id is2[5]; } arrI [3]; } inner_most; } inner; } - filter; @end @implementation DSATextSearch - filter { int filteredPos = 0; _documentNames[filteredPos] = 0; // storing into an element of array ivar. objc_assign_strongCast is needed. inner.innerNames[filteredPos] = 0; inner.inner_most.nestedDeeperNames[filteredPos] = 0; inner.inner_most.arrI[3].is1[5] = 0; inner.inner_most.arrI[3].is2[5] = 0; } @end