Mercurial > hg > CbC > CbC_llvm
view clang/test/SemaObjC/newproperty-class-method-1.m @ 207:2e18cbf3894f
LLVM12
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 08 Jun 2021 06:07:14 +0900 |
parents | 1d019706d866 |
children |
line wrap: on
line source
// 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; }