1// RUN: %clang_cc1 -funknown-anytype -fsyntax-only -verify %s
2
3namespace test0 {
4  extern __unknown_anytype test0;
5  extern __unknown_anytype test1();
6  extern __unknown_anytype test2(int);
7}
8
9namespace 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
23namespace test2 {
24  extern __unknown_anytype foo();
25  void test() {
26    foo(); // expected-error {{'foo' has unknown return type}}
27  }
28}
29
30namespace 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
39namespace 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