Home | History | Annotate | Download | only in SemaObjC
      1 // RUN: %clang_cc1 -fobjc-arc -isystem %S/Inputs %s -DNO_USE
      2 // RUN: %clang_cc1 -fobjc-arc -isystem %S/Inputs %s -verify
      3 
      4 #include <arc-system-header.h>
      5 
      6 #ifndef NO_USE
      7 void test(id op, void *cp) {
      8   cp = test0(op); // expected-error {{'test0' is unavailable: converts between Objective-C and C pointers in -fobjc-arc}}
      9   cp = *test1(&op); // expected-error {{'test1' is unavailable: converts between Objective-C and C pointers in -fobjc-arc}}
     10 // expected-note (a] arc-system-header.h:1 {{marked unavailable here}}
     11 // expected-note (a] arc-system-header.h:5 {{marked unavailable here}}
     12 }
     13 
     14 void test3(struct Test3 *p) {
     15   p->field = 0; // expected-error {{'field' is unavailable: this system declaration uses an unsupported type}}
     16                 // expected-note (a] arc-system-header.h:14 {{marked unavailable here}}
     17 }
     18 
     19 void test4(Test4 *p) {
     20   p->field1 = 0; // expected-error {{'field1' is unavailable: this system declaration uses an unsupported type}}
     21                  // expected-note (a] arc-system-header.h:19 {{marked unavailable here}}
     22   p->field2 = 0;
     23 }
     24 
     25 void test5(struct Test5 *p) {
     26   p->field = 0; // expected-error {{'field' is unavailable: this system field has retaining ownership}}
     27                 // expected-note (a] arc-system-header.h:25 {{marked unavailable here}}
     28 }
     29 
     30 id test6() {
     31   // This is actually okay to use if declared in a system header.
     32   id x;
     33   x = (id) kMagicConstant;
     34   x = (id) (x ? kMagicConstant : kMagicConstant);
     35   x = (id) (x ? kMagicConstant : (void*) 0);
     36 
     37   extern void test6_helper();
     38   x = (id) (test6_helper(), kMagicConstant);
     39 }
     40 
     41 void test7(Test7 *p) {
     42   *p.prop = 0; // expected-error {{'prop' is unavailable: this system declaration uses an unsupported type}}
     43   p.prop = 0; // expected-error {{'prop' is unavailable: this system declaration uses an unsupported type}}
     44   *[p prop] = 0; // expected-error {{'prop' is unavailable: this system declaration uses an unsupported type}}
     45   [p setProp: 0]; // expected-error {{'setProp:' is unavailable: this system declaration uses an unsupported type}}
     46 // expected-note (a] arc-system-header.h:41 4 {{marked unavailable here}}
     47 // expected-note (a] arc-system-header.h:41 2 {{property 'prop' is declared unavailable here}}
     48 }
     49 #endif
     50 
     51 // test8 in header
     52