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