diff options
Diffstat (limited to 'clang/test/SemaCXX/linkage-spec.cpp')
-rw-r--r-- | clang/test/SemaCXX/linkage-spec.cpp | 43 |
1 files changed, 40 insertions, 3 deletions
diff --git a/clang/test/SemaCXX/linkage-spec.cpp b/clang/test/SemaCXX/linkage-spec.cpp index fc14081247a..355a8787931 100644 --- a/clang/test/SemaCXX/linkage-spec.cpp +++ b/clang/test/SemaCXX/linkage-spec.cpp @@ -41,20 +41,32 @@ namespace pr5430 { using namespace pr5430; extern "C" void pr5430::func(void) { } -// PR5404 -int f2(char *) +// PR5405 +int f2(char *) // expected-note {{here}} { return 0; } extern "C" { - int f2(int) + int f2(int) // expected-error {{with C language linkage conflicts with declaration in global scope}} { return f2((char *)0); } } +namespace PR5405 { + int f2b(char *) { + return 0; + } + + extern "C" { + int f2b(int) { + return f2b((char *)0); // ok + } + } +} + // PR6991 extern "C" typedef int (*PutcFunc_t)(int); @@ -117,3 +129,28 @@ namespace pr14958 { extern "C" void PR16167; // expected-error {{variable has incomplete type 'void'}} extern void PR16167_0; // expected-error {{variable has incomplete type 'void'}} + +// PR7927 +enum T_7927 { + E_7927 +}; + +extern "C" void f_pr7927(int); + +namespace { + extern "C" void f_pr7927(int); + + void foo_pr7927() { + f_pr7927(E_7927); + f_pr7927(0); + ::f_pr7927(E_7927); + ::f_pr7927(0); + } +} + +void bar_pr7927() { + f_pr7927(E_7927); + f_pr7927(0); + ::f_pr7927(E_7927); + ::f_pr7927(0); +} |