// RUN: %clang_cc1 -fdebugger-support -funknown-anytype -fsyntax-only -verify %s // rdar://problem/9416370 namespace test0 { void test(id x) { if ([x foo]) {} // expected-error {{no known method '-foo'; cast the message send to the method's return type}} [x foo]; // expected-error {{no known method '-foo'; cast the message send to the method's return type}} } } // rdar://problem/12565338 @interface Test1 - (void) test_a: (__unknown_anytype)foo; - (void) test_b: (__unknown_anytype)foo; - (void) test_c: (__unknown_anytype)foo; @end namespace test1 { struct POD { int x; }; void a(Test1 *obj) { POD v; [obj test_a: v]; } struct Uncopyable { Uncopyable(); private: Uncopyable(const Uncopyable &); // expected-note {{declared private here}} }; void b(Test1 *obj) { Uncopyable v; [obj test_b: v]; // expected-error {{calling a private constructor}} } void c(Test1 *obj) { Uncopyable v; [obj test_c: (const Uncopyable&) v]; } } // Just test that we can declare a function taking __unknown_anytype. // For now, we don't actually need to make calling something like this // work; if that changes, here's what's required: // - get this call through overload resolution somehow, // - update the function-call argument-passing code like the // message-send code, and // - rewrite the function expression to have a type that doesn't // involving __unknown_anytype. namespace test2 { void foo(__unknown_anytype x); }