// 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_global' %t  | count 26

@class NSObject;
typedef const struct __CFDictionary * CFDictionaryRef;
typedef struct {
  id  element;
  id elementArray[10];
  __strong CFDictionaryRef cfElement;
  __strong CFDictionaryRef cfElementArray[10];
} struct_with_ids_t;


// assignments to these should generate objc_assign_global
@interface A
@end

typedef struct s0 {
  A *a[4];
} T;

T g0;

extern id FileExternID;
static id FileStaticID;
id GlobalId;
id GlobalArray[20];
NSObject *GlobalObject;
NSObject *GlobalObjectArray[20];
__strong CFDictionaryRef Gdict;
__strong CFDictionaryRef Gdictarray[10];
struct_with_ids_t GlobalStruct;
struct_with_ids_t GlobalStructArray[10];

#define ASSIGNTEST(expr, global) expr = rhs
void *rhs = 0;

int main(void) {
  static id staticGlobalId;
  static id staticGlobalArray[20];
  static NSObject *staticGlobalObject;
  static NSObject *staticGlobalObjectArray[20];
  static __strong CFDictionaryRef staticGdict;
  static __strong CFDictionaryRef staticGdictarray[10];
  static struct_with_ids_t staticGlobalStruct;
  static struct_with_ids_t staticGlobalStructArray[10];
  extern id ExID;
  id localID;

  ASSIGNTEST(GlobalId, GlobalAssigns);                          // objc_assign_global
  ASSIGNTEST(GlobalArray[0], GlobalAssigns);                    // objc_assign_global
  ASSIGNTEST(GlobalObject, GlobalAssigns);                      // objc_assign_global
  ASSIGNTEST(GlobalObjectArray[0], GlobalAssigns);              // objc_assign_global
  ASSIGNTEST(Gdict, GlobalAssigns);                             // objc_assign_global
  ASSIGNTEST(Gdictarray[1], GlobalAssigns);                     // objc_assign_global

  ASSIGNTEST(GlobalStruct.element, GlobalAssigns);              // objc_assign_global
  ASSIGNTEST(GlobalStruct.elementArray[0], GlobalAssigns);      // objc_assign_global
  ASSIGNTEST(GlobalStruct.cfElement, GlobalAssigns);            // objc_assign_global
  ASSIGNTEST(GlobalStruct.cfElementArray[0], GlobalAssigns);    // objc_assign_global

  ASSIGNTEST(staticGlobalId, GlobalAssigns);                    // objc_assign_global
  ASSIGNTEST(staticGlobalArray[0], GlobalAssigns);              // objc_assign_global
  ASSIGNTEST(staticGlobalObject, GlobalAssigns);                // objc_assign_global
  ASSIGNTEST(staticGlobalObjectArray[0], GlobalAssigns);        // objc_assign_global
  ASSIGNTEST(staticGdict, GlobalAssigns);                       // objc_assign_global
  ASSIGNTEST(staticGdictarray[1], GlobalAssigns);               // objc_assign_global

  ASSIGNTEST(staticGlobalStruct.element, GlobalAssigns);                // objc_assign_global
  ASSIGNTEST(staticGlobalStruct.elementArray[0], GlobalAssigns);        // objc_assign_global
  ASSIGNTEST(staticGlobalStruct.cfElement, GlobalAssigns);              // objc_assign_global
  ASSIGNTEST(staticGlobalStruct.cfElementArray[0], GlobalAssigns);      // objc_assign_global

  ExID = 0;
  localID = 0;
  FileStaticID = 0;
  FileExternID=0;
  g0.a[0] = 0;
  ((T*) &g0)->a[0] = 0;
}
