81 lines · plain
1// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fobjc-runtime=macosx-fragile-10.5 -fobjc-gc -emit-llvm -o %t %s2// RUN: grep -F '@objc_assign_global' %t | count 263 4@class NSObject;5typedef const struct __CFDictionary * CFDictionaryRef;6typedef struct {7 id element;8 id elementArray[10];9 __strong CFDictionaryRef cfElement;10 __strong CFDictionaryRef cfElementArray[10];11} struct_with_ids_t;12 13 14// assignments to these should generate objc_assign_global15@interface A16@end17 18typedef struct s0 {19 A *a[4];20} T;21 22T g0;23 24extern id FileExternID;25static id FileStaticID;26id GlobalId;27id GlobalArray[20];28NSObject *GlobalObject;29NSObject *GlobalObjectArray[20];30__strong CFDictionaryRef Gdict;31__strong CFDictionaryRef Gdictarray[10];32struct_with_ids_t GlobalStruct;33struct_with_ids_t GlobalStructArray[10];34 35#define ASSIGNTEST(expr, global) expr = rhs36void *rhs = 0;37 38int main(void) {39 static id staticGlobalId;40 static id staticGlobalArray[20];41 static NSObject *staticGlobalObject;42 static NSObject *staticGlobalObjectArray[20];43 static __strong CFDictionaryRef staticGdict;44 static __strong CFDictionaryRef staticGdictarray[10];45 static struct_with_ids_t staticGlobalStruct;46 static struct_with_ids_t staticGlobalStructArray[10];47 extern id ExID;48 id localID;49 50 ASSIGNTEST(GlobalId, GlobalAssigns); // objc_assign_global51 ASSIGNTEST(GlobalArray[0], GlobalAssigns); // objc_assign_global52 ASSIGNTEST(GlobalObject, GlobalAssigns); // objc_assign_global53 ASSIGNTEST(GlobalObjectArray[0], GlobalAssigns); // objc_assign_global54 ASSIGNTEST(Gdict, GlobalAssigns); // objc_assign_global55 ASSIGNTEST(Gdictarray[1], GlobalAssigns); // objc_assign_global56 57 ASSIGNTEST(GlobalStruct.element, GlobalAssigns); // objc_assign_global58 ASSIGNTEST(GlobalStruct.elementArray[0], GlobalAssigns); // objc_assign_global59 ASSIGNTEST(GlobalStruct.cfElement, GlobalAssigns); // objc_assign_global60 ASSIGNTEST(GlobalStruct.cfElementArray[0], GlobalAssigns); // objc_assign_global61 62 ASSIGNTEST(staticGlobalId, GlobalAssigns); // objc_assign_global63 ASSIGNTEST(staticGlobalArray[0], GlobalAssigns); // objc_assign_global64 ASSIGNTEST(staticGlobalObject, GlobalAssigns); // objc_assign_global65 ASSIGNTEST(staticGlobalObjectArray[0], GlobalAssigns); // objc_assign_global66 ASSIGNTEST(staticGdict, GlobalAssigns); // objc_assign_global67 ASSIGNTEST(staticGdictarray[1], GlobalAssigns); // objc_assign_global68 69 ASSIGNTEST(staticGlobalStruct.element, GlobalAssigns); // objc_assign_global70 ASSIGNTEST(staticGlobalStruct.elementArray[0], GlobalAssigns); // objc_assign_global71 ASSIGNTEST(staticGlobalStruct.cfElement, GlobalAssigns); // objc_assign_global72 ASSIGNTEST(staticGlobalStruct.cfElementArray[0], GlobalAssigns); // objc_assign_global73 74 ExID = 0;75 localID = 0;76 FileStaticID = 0;77 FileExternID=0;78 g0.a[0] = 0;79 ((T*) &g0)->a[0] = 0;80}81