[clang][modules] Don't prevent translation of FW_Private includes when explicitly...
[llvm-project.git] / clang / test / SemaObjCXX / unknown-anytype.mm
blob88a830a6ed6029e2d3cba2535fb0b5437c9cf226
1 // RUN: %clang_cc1 -fdebugger-support -funknown-anytype -fsyntax-only -verify %s
3 namespace 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   }
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
15 namespace test1 {
16   struct POD {
17     int x;
18   };
20   void a(Test1 *obj) {
21     POD v;
22     [obj test_a: v];
23   }
25   struct Uncopyable {
26     Uncopyable();
27   private:
28     Uncopyable(const Uncopyable &); // expected-note {{declared private here}}
29   };
31   void b(Test1 *obj) {
32     Uncopyable v;
33     [obj test_b: v]; // expected-error {{calling a private constructor}}
34   }
36   void c(Test1 *obj) {
37     Uncopyable v;
38     [obj test_c: (const Uncopyable&) v];
39   }
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.
50 namespace test2 {
51   void foo(__unknown_anytype x);