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