diff options
Diffstat (limited to 'test/CXX/basic/basic.link/p6.cpp')
-rw-r--r-- | test/CXX/basic/basic.link/p6.cpp | 53 |
1 files changed, 27 insertions, 26 deletions
diff --git a/test/CXX/basic/basic.link/p6.cpp b/test/CXX/basic/basic.link/p6.cpp index 8faec76..ac6dc2f 100644 --- a/test/CXX/basic/basic.link/p6.cpp +++ b/test/CXX/basic/basic.link/p6.cpp @@ -1,4 +1,6 @@ -// RUN: %clang_cc1 -fsyntax-only -verify %s +// RUN: %clang_cc1 -fsyntax-only -verify -std=c++1y %s + +// expected-no-diagnostics // C++11 [basic.link]p6: // The name of a function declared in block scope and the name @@ -9,35 +11,34 @@ // 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 []'}} +extern int same_entity; +constexpr int *get1() { + int same_entity = 0; // not the same entity + { + extern int same_entity; + return &same_entity; } } +static_assert(get1() == &same_entity, "failed to find previous decl"); -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 []'}} +static int same_entity_2[3]; +constexpr int *get2() { + // This is a redeclaration of the same entity, even though it doesn't + // inherit the type of the prior declaration. + extern int same_entity_2[]; + return same_entity_2; } +static_assert(get2() == same_entity_2, "failed to find previous decl"); -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 []'}} +static int different_entities; +constexpr int *get3() { + int different_entities = 0; + { + // FIXME: This is not a redeclaration of the prior entity, because + // it is not visible here. Under DR426, this is ill-formed, and without + // it, the static_assert below should fail. + extern int different_entities; + return &different_entities; } } - - +static_assert(get3() == &different_entities, "failed to find previous decl"); |