1/* Contributed by Nicola Pero <nicola.pero@meta-innovation.com>, November 2010. */ 2/* { dg-do run } */ 3/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */ 4 5/* Test the 'dot syntax' with self, both in instance and class methods. */ 6 7#include <stdlib.h> 8#include <objc/objc.h> 9#include <objc/runtime.h> 10 11static int c; 12 13@interface MyRootClass 14{ 15 Class isa; 16 int a; 17} 18+ (id) initialize; 19+ (id) alloc; 20- (id) init; 21- (int) count; 22- (void) setCount: (int)count; 23+ (int) classCount; 24+ (void) setClassCount: (int)count; 25@end 26 27@implementation MyRootClass 28+ (id) initialize { return self; } 29+ (id) alloc { return class_createInstance (self, 0); } 30- (id) init { return self; } 31- (int) count 32{ 33 return a; 34} 35- (void) setCount: (int)count 36{ 37 a = count; 38} 39+ (int) classCount 40{ 41 return c; 42} 43+ (void) setClassCount: (int)count 44{ 45 c = count; 46} 47- (int) testMe 48{ 49 self.count = 400; 50 if (self.count != 400) 51 abort (); 52 53 return self.count; 54} 55+ (int) testMe 56{ 57 self.classCount = 4000; 58 if (self.classCount != 4000) 59 abort (); 60 61 return self.classCount; 62} 63@end 64 65int main (void) 66{ 67 MyRootClass *object = [[MyRootClass alloc] init]; 68 69 if ([object testMe] != 400) 70 abort (); 71 72 if ([MyRootClass testMe] != 4000) 73 abort (); 74 75 return 0; 76} 77 78 79