1*67e74705SXin Li// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fobjc-runtime=macosx-fragile-10.5 -fobjc-gc -emit-llvm -o %t %s 2*67e74705SXin Li// RUN: grep -F '@objc_assign_global' %t | count 26 3*67e74705SXin Li 4*67e74705SXin Li@class NSObject; 5*67e74705SXin Litypedef const struct __CFDictionary * CFDictionaryRef; 6*67e74705SXin Litypedef struct { 7*67e74705SXin Li id element; 8*67e74705SXin Li id elementArray[10]; 9*67e74705SXin Li __strong CFDictionaryRef cfElement; 10*67e74705SXin Li __strong CFDictionaryRef cfElementArray[10]; 11*67e74705SXin Li} struct_with_ids_t; 12*67e74705SXin Li 13*67e74705SXin Li 14*67e74705SXin Li// assignments to these should generate objc_assign_global 15*67e74705SXin Li@interface A 16*67e74705SXin Li@end 17*67e74705SXin Li 18*67e74705SXin Litypedef struct s0 { 19*67e74705SXin Li A *a[4]; 20*67e74705SXin Li} T; 21*67e74705SXin Li 22*67e74705SXin LiT g0; 23*67e74705SXin Li 24*67e74705SXin Liextern id FileExternID; 25*67e74705SXin Listatic id FileStaticID; 26*67e74705SXin Liid GlobalId; 27*67e74705SXin Liid GlobalArray[20]; 28*67e74705SXin LiNSObject *GlobalObject; 29*67e74705SXin LiNSObject *GlobalObjectArray[20]; 30*67e74705SXin Li__strong CFDictionaryRef Gdict; 31*67e74705SXin Li__strong CFDictionaryRef Gdictarray[10]; 32*67e74705SXin Listruct_with_ids_t GlobalStruct; 33*67e74705SXin Listruct_with_ids_t GlobalStructArray[10]; 34*67e74705SXin Li 35*67e74705SXin Li#define ASSIGNTEST(expr, global) expr = rhs 36*67e74705SXin Livoid *rhs = 0; 37*67e74705SXin Li 38*67e74705SXin Liint main() { 39*67e74705SXin Li static id staticGlobalId; 40*67e74705SXin Li static id staticGlobalArray[20]; 41*67e74705SXin Li static NSObject *staticGlobalObject; 42*67e74705SXin Li static NSObject *staticGlobalObjectArray[20]; 43*67e74705SXin Li static __strong CFDictionaryRef staticGdict; 44*67e74705SXin Li static __strong CFDictionaryRef staticGdictarray[10]; 45*67e74705SXin Li static struct_with_ids_t staticGlobalStruct; 46*67e74705SXin Li static struct_with_ids_t staticGlobalStructArray[10]; 47*67e74705SXin Li extern id ExID; 48*67e74705SXin Li id localID; 49*67e74705SXin Li 50*67e74705SXin Li ASSIGNTEST(GlobalId, GlobalAssigns); // objc_assign_global 51*67e74705SXin Li ASSIGNTEST(GlobalArray[0], GlobalAssigns); // objc_assign_global 52*67e74705SXin Li ASSIGNTEST(GlobalObject, GlobalAssigns); // objc_assign_global 53*67e74705SXin Li ASSIGNTEST(GlobalObjectArray[0], GlobalAssigns); // objc_assign_global 54*67e74705SXin Li ASSIGNTEST(Gdict, GlobalAssigns); // objc_assign_global 55*67e74705SXin Li ASSIGNTEST(Gdictarray[1], GlobalAssigns); // objc_assign_global 56*67e74705SXin Li 57*67e74705SXin Li ASSIGNTEST(GlobalStruct.element, GlobalAssigns); // objc_assign_global 58*67e74705SXin Li ASSIGNTEST(GlobalStruct.elementArray[0], GlobalAssigns); // objc_assign_global 59*67e74705SXin Li ASSIGNTEST(GlobalStruct.cfElement, GlobalAssigns); // objc_assign_global 60*67e74705SXin Li ASSIGNTEST(GlobalStruct.cfElementArray[0], GlobalAssigns); // objc_assign_global 61*67e74705SXin Li 62*67e74705SXin Li ASSIGNTEST(staticGlobalId, GlobalAssigns); // objc_assign_global 63*67e74705SXin Li ASSIGNTEST(staticGlobalArray[0], GlobalAssigns); // objc_assign_global 64*67e74705SXin Li ASSIGNTEST(staticGlobalObject, GlobalAssigns); // objc_assign_global 65*67e74705SXin Li ASSIGNTEST(staticGlobalObjectArray[0], GlobalAssigns); // objc_assign_global 66*67e74705SXin Li ASSIGNTEST(staticGdict, GlobalAssigns); // objc_assign_global 67*67e74705SXin Li ASSIGNTEST(staticGdictarray[1], GlobalAssigns); // objc_assign_global 68*67e74705SXin Li 69*67e74705SXin Li ASSIGNTEST(staticGlobalStruct.element, GlobalAssigns); // objc_assign_global 70*67e74705SXin Li ASSIGNTEST(staticGlobalStruct.elementArray[0], GlobalAssigns); // objc_assign_global 71*67e74705SXin Li ASSIGNTEST(staticGlobalStruct.cfElement, GlobalAssigns); // objc_assign_global 72*67e74705SXin Li ASSIGNTEST(staticGlobalStruct.cfElementArray[0], GlobalAssigns); // objc_assign_global 73*67e74705SXin Li 74*67e74705SXin Li ExID = 0; 75*67e74705SXin Li localID = 0; 76*67e74705SXin Li FileStaticID = 0; 77*67e74705SXin Li FileExternID=0; 78*67e74705SXin Li g0.a[0] = 0; 79*67e74705SXin Li ((T*) &g0)->a[0] = 0; 80*67e74705SXin Li} 81