/* 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" } */ }