63 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Objective-C
		
	
	
	
			
		
		
	
	
			63 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Objective-C
		
	
	
	
| // RUN: %clang_cc1 -verify -fsyntax-only -Wno-objc-root-class %s
 | |
| 
 | |
| void abort(void);
 | |
| 
 | |
| @interface Subclass
 | |
| + (int)magicNumber;
 | |
| + (void)setMagicNumber:(int)value;
 | |
| + (void)setFakeSetterNumber:(int)value;
 | |
| @end
 | |
| 
 | |
| @implementation Subclass
 | |
| int _magicNumber = 0;
 | |
| + (int)magicNumber {
 | |
|   return _magicNumber;
 | |
| }
 | |
| 
 | |
| + (void)setMagicNumber:(int)value {
 | |
|   _magicNumber = value;
 | |
| }
 | |
| 
 | |
| + (void)setFakeSetterNumber:(int)value {
 | |
|   _magicNumber = value;
 | |
| }
 | |
| 
 | |
| + (void) classMeth
 | |
| {
 | |
| 	self.magicNumber = 10;
 | |
| 	if (self.magicNumber != 10)
 | |
| 	  abort ();
 | |
| }
 | |
| @end
 | |
| 
 | |
| int main (void) {
 | |
|   
 | |
|   int a;
 | |
|   Subclass.magicNumber = 2 /*[Subclass setMagicNumber:2]*/;
 | |
|   if (Subclass.magicNumber != 0)
 | |
|     abort ();
 | |
|   if (Subclass.magicNumber != 2)
 | |
|     abort ();
 | |
|   Subclass.magicNumber += 3;
 | |
|   if (Subclass.magicNumber != 5)
 | |
|     abort ();
 | |
|   Subclass.magicNumber -= 5;
 | |
|   if (Subclass.magicNumber != 0)
 | |
|     abort ();
 | |
|   /* We only have a setter in the following case. */
 | |
|   Subclass.fakeSetterNumber = 123;
 | |
| 
 | |
|   /* We read it using the other getter. */
 | |
|   if (Subclass.magicNumber != 123)
 | |
|    abort ();
 | |
|   Subclass.fakeSetterNumber = Subclass.magicNumber;
 | |
|   if (Subclass.magicNumber != 123)
 | |
|    abort ();
 | |
| 
 | |
|   Subclass.fakeSetterNumberX = 123; // expected-error{{property 'fakeSetterNumberX' not found on object of type 'Subclass'}}
 | |
| 
 | |
|   /* Test class methods using the new syntax. */
 | |
|   [Subclass classMeth];
 | |
|   return 0;
 | |
| }
 |