blob: 9b6b4151f6a0f768cbab2884cab6e9c54047355a [file] [log] [blame]
Fariborz Jahanianb9242592009-09-21 23:03:37 +00001// RUN: clang-cc -triple x86_64-apple-darwin10 -fnext-runtime -fobjc-gc -emit-llvm -o %t %s &&
Fariborz Jahanianb123ea32009-09-16 21:37:16 +00002// RUN: grep -F '@objc_assign_global' %t | count 26 &&
Fariborz Jahanianbf63b872009-05-04 23:27:20 +00003// RUN: true
Fariborz Jahanianb123ea32009-09-16 21:37:16 +00004
5@class NSObject;
6typedef const struct __CFDictionary * CFDictionaryRef;
7typedef struct {
8 id element;
9 id elementArray[10];
10 __strong CFDictionaryRef cfElement;
11 __strong CFDictionaryRef cfElementArray[10];
12} struct_with_ids_t;
13
14
15// assignments to these should generate objc_assign_global
16@interface A
17@end
18
19typedef struct s0 {
20 A *a[4];
21} T;
22
23T g0;
24
25extern id FileExternID;
26static id FileStaticID;
27id GlobalId;
28id GlobalArray[20];
29NSObject *GlobalObject;
30NSObject *GlobalObjectArray[20];
31__strong CFDictionaryRef Gdict;
32__strong CFDictionaryRef Gdictarray[10];
33struct_with_ids_t GlobalStruct;
34struct_with_ids_t GlobalStructArray[10];
35
36#define ASSIGNTEST(expr, global) expr = rhs
37void *rhs = 0;
38
Fariborz Jahanianbf63b872009-05-04 23:27:20 +000039int main() {
Fariborz Jahanianb123ea32009-09-16 21:37:16 +000040 static id staticGlobalId;
41 static id staticGlobalArray[20];
42 static NSObject *staticGlobalObject;
43 static NSObject *staticGlobalObjectArray[20];
44 static __strong CFDictionaryRef staticGdict;
45 static __strong CFDictionaryRef staticGdictarray[10];
46 static struct_with_ids_t staticGlobalStruct;
47 static struct_with_ids_t staticGlobalStructArray[10];
48 extern id ExID;
49 id localID;
50
51 ASSIGNTEST(GlobalId, GlobalAssigns); // objc_assign_global
52 ASSIGNTEST(GlobalArray[0], GlobalAssigns); // objc_assign_global
53 ASSIGNTEST(GlobalObject, GlobalAssigns); // objc_assign_global
54 ASSIGNTEST(GlobalObjectArray[0], GlobalAssigns); // objc_assign_global
55 ASSIGNTEST(Gdict, GlobalAssigns); // objc_assign_global
56 ASSIGNTEST(Gdictarray[1], GlobalAssigns); // objc_assign_global
57
58 ASSIGNTEST(GlobalStruct.element, GlobalAssigns); // objc_assign_global
59 ASSIGNTEST(GlobalStruct.elementArray[0], GlobalAssigns); // objc_assign_global
60 ASSIGNTEST(GlobalStruct.cfElement, GlobalAssigns); // objc_assign_global
61 ASSIGNTEST(GlobalStruct.cfElementArray[0], GlobalAssigns); // objc_assign_global
62
63 ASSIGNTEST(staticGlobalId, GlobalAssigns); // objc_assign_global
64 ASSIGNTEST(staticGlobalArray[0], GlobalAssigns); // objc_assign_global
65 ASSIGNTEST(staticGlobalObject, GlobalAssigns); // objc_assign_global
66 ASSIGNTEST(staticGlobalObjectArray[0], GlobalAssigns); // objc_assign_global
67 ASSIGNTEST(staticGdict, GlobalAssigns); // objc_assign_global
68 ASSIGNTEST(staticGdictarray[1], GlobalAssigns); // objc_assign_global
69
70 ASSIGNTEST(staticGlobalStruct.element, GlobalAssigns); // objc_assign_global
71 ASSIGNTEST(staticGlobalStruct.elementArray[0], GlobalAssigns); // objc_assign_global
72 ASSIGNTEST(staticGlobalStruct.cfElement, GlobalAssigns); // objc_assign_global
73 ASSIGNTEST(staticGlobalStruct.cfElementArray[0], GlobalAssigns); // objc_assign_global
74
75 ExID = 0;
76 localID = 0;
77 FileStaticID = 0;
78 FileExternID=0;
79 g0.a[0] = 0;
80 ((T*) &g0)->a[0] = 0;
Fariborz Jahanianbf63b872009-05-04 23:27:20 +000081}