// 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

