blob: e97c0a63d37e69a162ceebde20dc75d79d3282e0 [file] [log] [blame]
/* APPLE LOCAL file ObjC GC */
/* A compile-only test for insertion of write barriers. */
/* Provided by Blaine Garst <blaine@apple.com> */
/* { dg-do compile { target powerpc*-*-darwin* i?86*-*-darwin* } } */
/* { dg-options "-fnext-runtime -fobjc-gc -Wassign-intercept" } */
/* { dg-require-effective-target objc_gc } */
#ifndef __OBJC_GC__
#error Missing __OBJC_GC__ manifest constant
#endif
/* APPLE LOCAL radar 4894756 */
#include "../objc/execute/Object2.h"
extern id **somefunc(void);
extern id *somefunc2(void);
// Globals
id W, *X, **Y;
void func(id a, id *b, id **c) {
static id w, *x, **y;
W = a; /* { dg-warning "global\\/static variable assignment" } */
w = a; /* { dg-warning "global\\/static variable assignment" } */
X = b; /* { dg-warning "global\\/static variable assignment" } */
x = b; /* { dg-warning "global\\/static variable assignment" } */
Y = c; /* { dg-warning "global\\/static variable assignment" } */
y = c; /* { dg-warning "global\\/static variable assignment" } */
}
// Instances
@interface something {
id w, *x, **y;
}
@end
@implementation something
- (void)amethod {
id badIdea = *somefunc2();
w = badIdea; /* { dg-warning "instance variable assignment" } */
x = &badIdea; /* { dg-warning "instance variable assignment" } */
y = &x; /* { dg-warning "instance variable assignment" } */
}
@end
// Structure access, pointer dereferencing
typedef struct {
int junk;
id alfred;
} AStruct;
void funct2(AStruct *aptr) {
id **ppptr = somefunc();
aptr->alfred = [Object new]; /* { dg-warning "strong\\-cast assignment" } */
**ppptr = aptr->alfred; /* { dg-warning "strong\\-cast assignment" } */
*ppptr = somefunc2(); /* { dg-warning "strong\\-cast assignment" } */
}