Home | History | Annotate | Download | only in SemaObjC
      1 // RUN: %clang_cc1 -fsyntax-only -fobjc-arc -verify %s
      2 
      3 // rdar://8843524
      4 
      5 struct A {
      6     id x; // expected-error {{ARC forbids Objective-C objects in structs or unions}}
      7 };
      8 
      9 union u {
     10     id u; // expected-error {{ARC forbids Objective-C objects in structs or unions}}
     11 };
     12 
     13 @interface I {
     14    struct A a; 
     15    struct B {
     16     id y[10][20]; // expected-error {{ARC forbids Objective-C objects in structs or unions}}
     17     id z;
     18    } b;
     19 
     20    union u c; 
     21 };
     22 @end
     23 
     24 struct S { 
     25     id __attribute__((objc_ownership(none))) i;
     26     void * vp;
     27     int i1;
     28 };
     29 
     30 // rdar://9046528
     31 
     32 @class NSError;
     33 
     34 __autoreleasing id X; // expected-error {{global variables cannot have __autoreleasing ownership}}
     35 __autoreleasing NSError *E; // expected-error {{global variables cannot have __autoreleasing ownership}}
     36 
     37 
     38 extern id __autoreleasing X1; // expected-error {{global variables cannot have __autoreleasing ownership}}
     39 
     40 void func()
     41 {
     42     id X;
     43     static id __autoreleasing X1; // expected-error {{global variables cannot have __autoreleasing ownership}}
     44     extern id __autoreleasing E; // expected-error {{global variables cannot have __autoreleasing ownership}}
     45 
     46 }
     47 
     48 // rdar://9157348
     49 
     50 @interface J
     51 @property (retain) id newFoo; // expected-note {{property declared here}}
     52 @property (strong) id copyBar; // expected-note {{property declared here}}
     53 @property (copy) id allocBaz; // expected-note {{property declared here}}
     54 @property (copy, nonatomic) id new;
     55 @end
     56 
     57 @implementation J
     58 @synthesize newFoo;	// expected-error {{property's synthesized getter follows Cocoa naming convention for returning}}
     59 @synthesize copyBar;	// expected-error {{property's synthesized getter follows Cocoa naming convention for returning}}
     60 @synthesize allocBaz;	// expected-error {{property's synthesized getter follows Cocoa naming convention for returning}}
     61 @synthesize new;
     62 - new {return 0; };
     63 @end
     64 
     65 
     66 // rdar://10187884
     67 @interface Super
     68 - (void)bar:(id)b; // expected-note {{parameter declared here}}
     69 - (void)bar1:(id) __attribute((ns_consumed)) b;
     70 - (void)ok:(id) __attribute((ns_consumed)) b;
     71 - (id)ns_non; // expected-note {{method declared here}}
     72 - (id)not_ret:(id) b __attribute((ns_returns_not_retained)); // expected-note {{method declared here}}
     73 - (id)both__returns_not_retained:(id) b __attribute((ns_returns_not_retained));
     74 @end
     75 
     76 @interface Sub : Super
     77 - (void)bar:(id) __attribute((ns_consumed)) b; // expected-error {{overriding method has mismatched ns_consumed attribute on its parameter}}
     78 - (void)bar1:(id)b;
     79 - (void)ok:(id) __attribute((ns_consumed)) b;
     80 - (id)ns_non __attribute((ns_returns_not_retained)); // expected-error {{overriding method has mismatched ns_returns_not_retained attributes}}
     81 - (id)not_ret:(id) b __attribute((ns_returns_retained)); // expected-error {{overriding method has mismatched ns_returns_retained attributes}}
     82 - (id)both__returns_not_retained:(id) b __attribute((ns_returns_not_retained));
     83 @end
     84