// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fobjc-runtime=macosx-fragile-10.5 -fobjc-gc -emit-llvm -o %t %s
// RUN: grep -F '@objc_assign_ivar' %t  | count 14

typedef struct {
  id  element;
  id elementArray[10];
  __strong id cfElement;
  __strong id cfElementArray[10];
} struct_with_ids_t;


@interface NSString @end

@interface Foo  {
@public
// assignments to any/all of these fields should generate objc_assign_ivar
  __strong id dict;
  __strong id dictArray[3];
  id ivar;
  id array[10];
  id nsobject;
  NSString *stringArray[10];
  struct_with_ids_t inner;

  Foo *obj[20];
  short idx[5];
}
@end

// The test cases
int IvarAssigns;
void *rhs = 0;
#define ASSIGNTEST(expr, global) expr = rhs

void testIvars() {
  Foo *foo;
  ASSIGNTEST(foo->ivar, IvarAssigns);                                   // objc_assign_ivar
  ASSIGNTEST(foo->dict, IvarAssigns);                                   // objc_assign_ivar
  ASSIGNTEST(foo->dictArray[0], IvarAssigns);                           // objc_assign_ivar
  ASSIGNTEST(foo->array[0], IvarAssigns);                               // objc_assign_ivar
  ASSIGNTEST(foo->nsobject, IvarAssigns);                               // objc_assign_ivar
  ASSIGNTEST(foo->stringArray[0], IvarAssigns);                         // objc_assign_ivar
  ASSIGNTEST(foo->inner.element, IvarAssigns);                          // objc_assign_ivar
  ASSIGNTEST(foo->inner.elementArray[0], IvarAssigns);                  // objc_assign_ivar
  ASSIGNTEST(foo->inner.cfElement, IvarAssigns);                        // objc_assign_ivar
  ASSIGNTEST(foo->inner.cfElementArray[0], IvarAssigns);                // objc_assign_ivar
  int counter=1;
  ASSIGNTEST(foo->obj[5], IvarAssigns);                 // objc_assign_ivar
  ASSIGNTEST(foo->obj[++counter], IvarAssigns);         // objc_assign_ivar
  foo->idx[++counter] = 15;
  ASSIGNTEST(foo->obj[foo->idx[2]], IvarAssigns);       // objc_assign_ivar
}
