5 objc\[\d+\]: cannot form weak reference to instance \(0x[0-9a-f]+\) of class Crash
12 #include <Foundation/NSObject.h>
16 static bool did_dealloc;
18 @interface Test : NSObject @end
21 testassert(weak == self);
22 testassert(weak2 == self);
24 testprintf("Weak references clear during super dealloc\n");
25 testassert(weak2 != NULL);
27 testassert(weak2 == NULL);
33 @interface Crash : NSObject @end
36 testassert(weak == self);
37 testassert(weak2 == self);
39 testprintf("Weak store crashes while deallocating\n");
40 objc_storeWeak(&weak, self);
41 fail("objc_storeWeak of deallocating value should have crashed");
48 Test *obj = [Test new];
49 Test *obj2 = [Test new];
52 testprintf("Weak assignment\n");
53 result = objc_storeWeak(&weak, obj);
54 testassert(result == obj);
55 testassert(weak == obj);
57 testprintf("Weak assignment to the same value\n");
58 result = objc_storeWeak(&weak, obj);
59 testassert(result == obj);
60 testassert(weak == obj);
62 testprintf("Weak assignment to different value\n");
63 result = objc_storeWeak(&weak, obj2);
64 testassert(result == obj2);
65 testassert(weak == obj2);
67 testprintf("Weak assignment to NULL\n");
68 result = objc_storeWeak(&weak, NULL);
69 testassert(result == NULL);
70 testassert(weak == NULL);
72 testprintf("Weak clear\n");
74 result = objc_storeWeak(&weak, obj);
75 testassert(result == obj);
76 testassert(weak == obj);
78 result = objc_storeWeak(&weak2, obj);
79 testassert(result == obj);
80 testassert(weak2 == obj);
84 testassert(did_dealloc);
85 testassert(weak == NULL);
86 testassert(weak2 == NULL);
88 Crash *obj3 = [Crash new];
89 result = objc_storeWeak(&weak, obj3);
90 testassert(result == obj3);
91 testassert(weak == obj3);
93 result = objc_storeWeak(&weak2, obj3);
94 testassert(result == obj3);
95 testassert(weak2 == obj3);
98 fail("should have crashed in -[Crash dealloc]");