1// RUN: %clang_cc1 -fdebugger-support -funknown-anytype -fsyntax-only -verify %s 2 3// rdar://problem/9416370 4namespace 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 17namespace 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. 52namespace test2 { 53 void foo(__unknown_anytype x); 54} 55