1 // RUN: %clang_cc1 -funknown-anytype -fsyntax-only -verify %s
2 
3 namespace test0 {
4   extern __unknown_anytype test0;
5   extern __unknown_anytype test1();
6   extern __unknown_anytype test2(int);
7 }
8 
9 namespace test1 {
10   extern __unknown_anytype foo;
11   int test() {
12     // TODO: it would be great if the 'cannot initialize' errors
13     // turned into something more interesting.  It's just a matter of
14     // making sure that these locations check for placeholder types
15     // properly.
16 
17     int x = foo; // expected-error {{'foo' has unknown type}}
18     int y = 0 + foo; // expected-error {{'foo' has unknown type}}
19     return foo; // expected-error {{'foo' has unknown type}}
20   }
21 }
22 
23 namespace test2 {
24   extern __unknown_anytype foo();
25   void test() {
26     foo(); // expected-error {{'foo' has unknown return type}}
27   }
28 }
29 
30 namespace test3 {
31   extern __unknown_anytype foo;
32   void test() {
33     foo(); // expected-error {{call to unsupported expression with unknown type}}
34     ((void(void)) foo)(); // expected-error {{variable 'foo' with unknown type cannot be given a function type}}
35   }
36 }
37 
38 // rdar://problem/9899447
39 namespace test4 {
40   extern __unknown_anytype test0(...);
41   extern __unknown_anytype test1(...);
42 
43   void test() {
44     void (*fn)(int) = (void(*)(int)) test0;
45     int x = (int) test1; // expected-error {{function 'test1' with unknown type must be given a function type}}
46   }
47 }
48