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