blob: c47224f1c516fedcafc60dc3fea9dd312832af49 [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 Jahanian2db213d2009-09-16 23:49:04 +00002// RUN: grep -F '@objc_assign_global' %t | count 7 &&
Fariborz Jahanian1c1afc42009-09-18 00:04:00 +00003// RUN: grep -F '@objc_assign_ivar' %t | count 5 &&
4// RUN: grep -F '@objc_assign_strongCast' %t | count 8 &&
Fariborz Jahanian2db213d2009-09-16 23:49:04 +00005// RUN: true
6
7extern id **somefunc(void);
8extern id *somefunc2(void);
9
10
11// Globals
12
13id W, *X, **Y;
14
15void func(id a, id *b, id **c) {
16 static id w, *x, **y;
Fariborz Jahanianf08bf1f2009-09-16 23:52:53 +000017 W = a;
18 w = a;
19 X = b;
20 x = b;
21 Y = c;
22 y = c;
Fariborz Jahanian2db213d2009-09-16 23:49:04 +000023}
24
25// Instances
26
27@interface something {
28 id w, *x, **y;
29}
30@end
31
32@implementation something
33- (void)amethod {
34 id badIdea = *somefunc2();
Fariborz Jahanianf08bf1f2009-09-16 23:52:53 +000035 w = badIdea;
36 x = &badIdea;
37 y = &x;
Fariborz Jahanian2db213d2009-09-16 23:49:04 +000038}
39@end
40
41typedef struct {
42 int junk;
43 id alfred;
44} AStruct;
45
46void funct2(AStruct *aptr) {
47 id **ppptr = somefunc();
Fariborz Jahanianf08bf1f2009-09-16 23:52:53 +000048 aptr->alfred = 0;
49 **ppptr = aptr->alfred;
50 *ppptr = somefunc2();
Fariborz Jahanian2db213d2009-09-16 23:49:04 +000051}
52
Fariborz Jahanian1c1afc42009-09-18 00:04:00 +000053typedef const struct __CFString * CFStringRef;
54@interface DSATextSearch {
55__strong CFStringRef *_documentNames;
56 struct {
57 id *innerNames;
58 struct {
59 id *nestedDeeperNames;
60 struct I {
61 id *is1;
62 id is2[5];
63 } arrI [3];
64 } inner_most;
65 } inner;
66
67}
68- filter;
69@end
70@implementation DSATextSearch
71- filter {
72 int filteredPos = 0;
73 _documentNames[filteredPos] = 0; // storing into an element of array ivar. objc_assign_strongCast is needed.
74 inner.innerNames[filteredPos] = 0;
75 inner.inner_most.nestedDeeperNames[filteredPos] = 0;
76 inner.inner_most.arrI[3].is1[5] = 0;
77 inner.inner_most.arrI[3].is2[5] = 0;
78}
79@end
80