blob: a85e3ba14eda276ca0491a187f0ee9f5fee3f467 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
/* APPLE LOCAL file ObjC GC */
/* A compile-only test for insertion of write barriers. */
/* Developed by Ziemowit Laski <zlaski@apple.com> */
/* { dg-do compile } */
/* { dg-options "-fnext-runtime -fobjc-gc -Wassign-intercept" } */
#include <objc/objc.h>
struct NSRect {
void *a;
id b;
__strong void *c;
__strong id *d;
};
@protocol WebCoreImageRenderer
- (void)drawImageInRect:(NSRect)ir fromRect:(NSRect)fr;
- (void)release;
- (void)new;
- (BOOL)isNull;
- (id <WebCoreImageRenderer>)copyWithZone:(int)z;
- (id <WebCoreImageRenderer>)retainOrCopyIfNeeded;
@end
typedef id <WebCoreImageRenderer> WebCoreImageRendererPtr;
class QPixmap {
public:
QPixmap() {}
~QPixmap() {}
void resize(int w, int h);
public:
WebCoreImageRendererPtr imageRenderer;
__strong void *somePtr;
mutable bool needCopyOnWrite;
};
void inline_func(void) {
QPixmap *pix;
pix->imageRenderer = 0; /* { dg-warning "strong\\-cast may possibly be needed" } */
pix->somePtr = 0; /* { dg-warning "strong\\-cast may possibly be needed" } */
(__strong id)pix->somePtr = 0; /* { dg-warning "strong\\-cast assignment" } */
(__strong id)pix->imageRenderer = 0; /* { dg-warning "strong\\-cast assignment" } */
}
void QPixmap::resize(int w, int h)
{
if (needCopyOnWrite) {
id <WebCoreImageRenderer> newImageRenderer = [imageRenderer copyWithZone:0];
[imageRenderer release];
imageRenderer = newImageRenderer; /* { dg-warning "strong\\-cast may possibly be needed" } */
somePtr = 0; /* { dg-warning "strong\\-cast may possibly be needed" } */
(__strong id)imageRenderer = newImageRenderer; /* { dg-warning "strong\\-cast assignment" } */
needCopyOnWrite = false;
}
[imageRenderer new];
}
|