Home | History | Annotate | Download | only in SemaObjC
      1 // RUN: %clang_cc1 -fsyntax-only -verify -Wno-objc-root-class %s
      2 
      3 @interface A
      4 -(float) x;	// expected-note {{declared here}}
      5 @property int x; // expected-warning {{type of property 'x' does not match type of accessor 'x'}}
      6 @end
      7 
      8 @interface A (Cat)
      9 @property int moo;	// expected-note {{previous definition is here}}
     10 @end
     11 
     12 @implementation A (Cat)
     13 -(int) moo {
     14   return 0;
     15 }
     16 -(void) setMoo: (float) x { // expected-warning {{conflicting parameter types in implementation of 'setMoo:': 'int' vs 'float'}}
     17 }
     18 @end
     19 
     20 
     21 typedef int T[2];
     22 typedef void (F)(void);
     23 
     24 @interface C
     25 @property(assign) T p2;  // expected-error {{property cannot have array or function type 'T'}}
     26 
     27 @property(assign) F f2; // expected-error {{property cannot have array or function type 'F'}}
     28 
     29 @end
     30 
     31 
     32 @class SSyncSet;
     33 
     34 @interface SPeer
     35   @property(nonatomic,readonly,retain) SSyncSet* syncSet;
     36 @end
     37 
     38 @class SSyncSet_iDisk;
     39 
     40 @interface SPeer_iDisk_remote1 : SPeer
     41 - (SSyncSet_iDisk*) syncSet; // expected-note {{declared here}}
     42 @end
     43 
     44 @interface SPeer_iDisk_local
     45 - (SSyncSet_iDisk*) syncSet;
     46 @end
     47 
     48 @interface SSyncSet
     49 @end
     50 
     51 @interface SSyncSet_iDisk
     52 @property(nonatomic,readonly,retain) SPeer_iDisk_local* localPeer;
     53 @end
     54 
     55 @interface SPeer_iDisk_remote1 (protected)
     56 @end
     57 
     58 @implementation SPeer_iDisk_remote1 (protected)
     59 - (id) preferredSource1
     60 {
     61   return self.syncSet.localPeer; // expected-warning {{type of property 'syncSet' does not match type of accessor 'syncSet'}}
     62 }
     63 @end
     64 
     65 @interface NSArray @end
     66 
     67 @interface NSMutableArray : NSArray
     68 @end
     69 
     70 @interface Class1 
     71 {
     72  NSMutableArray* pieces;
     73  NSArray* first;
     74 }
     75 
     76 @property (readonly) NSArray* pieces; // expected-warning {{type of property 'pieces' does not match type of accessor 'pieces'}}
     77 @property (readonly) NSMutableArray* first;
     78 
     79 - (NSMutableArray*) pieces; // expected-note 2 {{declared here}}
     80 - (NSArray*) first;
     81 @end
     82 
     83 @interface Class2  {
     84  Class1* container;
     85 }
     86 
     87 @end
     88 
     89 @implementation Class2
     90 
     91 - (id) lastPiece
     92 {
     93  return container.pieces; // expected-warning {{type of property 'pieces' does not match type of accessor 'pieces'}}
     94 }
     95 
     96 - (id)firstPiece
     97 {
     98   return container.first;
     99 }
    100 @end
    101 
    102