Home | History | Annotate | Download | only in SemaObjCXX
      1 // RUN: %clang_cc1 -fdebugger-support -funknown-anytype -fsyntax-only -verify %s
      2 
      3 // rdar://problem/9416370
      4 namespace test0 {
      5   void test(id x) {
      6     if ([x foo]) {} // expected-error {{no known method '-foo'; cast the message send to the method's return type}}
      7     [x foo]; // expected-error {{no known method '-foo'; cast the message send to the method's return type}}
      8   }
      9 }
     10 
     11 // rdar://problem/12565338
     12 @interface Test1
     13 - (void) test_a: (__unknown_anytype)foo;
     14 - (void) test_b: (__unknown_anytype)foo;
     15 - (void) test_c: (__unknown_anytype)foo;
     16 @end
     17 namespace test1 {
     18   struct POD {
     19     int x;
     20   };
     21 
     22   void a(Test1 *obj) {
     23     POD v;
     24     [obj test_a: v];
     25   }
     26 
     27   struct Uncopyable {
     28     Uncopyable();
     29   private:
     30     Uncopyable(const Uncopyable &); // expected-note {{declared private here}}
     31   };
     32 
     33   void b(Test1 *obj) {
     34     Uncopyable v;
     35     [obj test_b: v]; // expected-error {{calling a private constructor}}
     36   }
     37 
     38   void c(Test1 *obj) {
     39     Uncopyable v;
     40     [obj test_c: (const Uncopyable&) v];
     41   }
     42 }
     43 
     44 // Just test that we can declare a function taking __unknown_anytype.
     45 // For now, we don't actually need to make calling something like this
     46 // work; if that changes, here's what's required:
     47 //   - get this call through overload resolution somehow,
     48 //   - update the function-call argument-passing code like the
     49 //     message-send code, and
     50 //   - rewrite the function expression to have a type that doesn't
     51 //     involving __unknown_anytype.
     52 namespace test2 {
     53   void foo(__unknown_anytype x);
     54 }
     55