| // RUN: %clang_cc1 -fsyntax-only -verify %s |
| |
| // C++11 [basic.link]p6: |
| // The name of a function declared in block scope and the name |
| // of a variable declared by a block scope extern declaration |
| // have linkage. If there is a visible declaration of an entity |
| // with linkage having the same name and type, ignoring entities |
| // declared outside the innermost enclosing namespace scope, the |
| // block scope declaration declares that same entity and |
| // receives the linkage of the previous declaration. |
| |
| // rdar://13535367 |
| namespace test0 { |
| extern "C" int test0_array[]; |
| void declare() { extern int test0_array[100]; } |
| extern "C" int test0_array[]; |
| int value = sizeof(test0_array); // expected-error {{invalid application of 'sizeof' to an incomplete type 'int []'}} |
| } |
| |
| namespace test1 { |
| extern "C" int test1_array[]; |
| void test() { |
| { extern int test1_array[100]; } |
| extern int test1_array[]; |
| int x = sizeof(test1_array); // expected-error {{invalid application of 'sizeof' to an incomplete type 'int []'}} |
| } |
| } |
| |
| namespace test2 { |
| void declare() { extern int test2_array[100]; } |
| extern int test2_array[]; |
| int value = sizeof(test2_array); // expected-error {{invalid application of 'sizeof' to an incomplete type 'int []'}} |
| } |
| |
| namespace test3 { |
| void test() { |
| { extern int test3_array[100]; } |
| extern int test3_array[]; |
| int x = sizeof(test3_array); // expected-error {{invalid application of 'sizeof' to an incomplete type 'int []'}} |
| } |
| } |
| |
| |