Revert r185229 as it breaks compilation of <windows.h>
llvm-svn: 185256
diff --git a/clang/test/SemaCXX/extern-c.cpp b/clang/test/SemaCXX/extern-c.cpp
index aacc0ff..220b2a8 100644
--- a/clang/test/SemaCXX/extern-c.cpp
+++ b/clang/test/SemaCXX/extern-c.cpp
@@ -3,20 +3,20 @@
namespace test1 {
extern "C" {
void test1_f() {
- void test1_g(int); // expected-note {{declared with C language linkage here}}
+ void test1_g(int); // expected-note {{previous declaration is here}}
}
}
}
-int test1_g(int); // expected-error {{declaration of 'test1_g' in global scope conflicts with declaration with C language linkage}}
+int test1_g(int); // expected-error {{functions that differ only in their return type cannot be overloaded}}
namespace test2 {
extern "C" {
void test2_f() {
- extern int test2_x; // expected-note {{declared with C language linkage here}}
+ extern int test2_x; // expected-note {{previous definition is here}}
}
}
}
-float test2_x; // expected-error {{declaration of 'test2_x' in global scope conflicts with declaration with C language linkage}}
+float test2_x; // expected-error {{redefinition of 'test2_x' with a different type: 'float' vs 'int'}}
namespace test3 {
extern "C" {
@@ -31,18 +31,18 @@
extern "C" {
void test4_f() {
- extern int test4_b; // expected-note {{declared with C language linkage here}}
+ extern int test4_b; // expected-note {{previous definition is here}}
}
}
-static float test4_b; // expected-error {{declaration of 'test4_b' in global scope conflicts with declaration with C language linkage}}
+static float test4_b; // expected-error {{redefinition of 'test4_b' with a different type: 'float' vs 'int'}}
extern "C" {
void test5_f() {
- extern int test5_b; // expected-note {{declared with C language linkage here}}
+ extern int test5_b; // expected-note {{previous definition is here}}
}
}
extern "C" {
- static float test5_b; // expected-error {{declaration of 'test5_b' in global scope conflicts with declaration with C language linkage}}
+ static float test5_b; // expected-error {{redefinition of 'test5_b' with a different type: 'float' vs 'int'}}
}
extern "C" {
@@ -69,11 +69,11 @@
}
}
namespace from_outer {
- void linkage_from_outer_1(); // expected-note {{previous}}
+ void linkage_from_outer_1();
void linkage_from_outer_2(); // expected-note {{previous}}
extern "C" {
- void linkage_from_outer_1(int);
- void linkage_from_outer_1(); // expected-error {{different language linkage}}
+ void linkage_from_outer_1(int); // expected-note {{previous}}
+ void linkage_from_outer_1(); // expected-error {{conflicting types}}
void linkage_from_outer_2(); // expected-error {{different language linkage}}
}
}
@@ -98,44 +98,11 @@
}
}
-void lookup_in_global_f(); // expected-note {{here}}
+void lookup_in_global_f();
namespace lookup_in_global {
void lookup_in_global_f();
- void lookup_in_global_g();
extern "C" {
- void lookup_in_global_f(int); // expected-error {{conflicts with declaration in global scope}}
- void lookup_in_global_g(int); // expected-note {{here}}
+ // FIXME: We should reject this.
+ void lookup_in_global_f(int);
}
}
-void lookup_in_global_g(); // expected-error {{conflicts with declaration with C language linkage}}
-
-namespace N1 {
- extern "C" int different_kind_1; // expected-note {{here}}
- extern "C" void different_kind_2(); // expected-note {{here}}
-}
-namespace N2 {
- extern "C" void different_kind_1(); // expected-error {{different kind of symbol}}
- extern "C" int different_kind_2; // expected-error {{different kind of symbol}}
-}
-
-extern "C" {
- struct stat {};
- void stat(struct stat);
-}
-namespace X {
- extern "C" {
- void stat(struct ::stat);
- }
-}
-
-extern "C" void name_with_using_decl_1(int);
-namespace using_decl {
- void name_with_using_decl_1();
- void name_with_using_decl_2();
- void name_with_using_decl_3();
-}
-using using_decl::name_with_using_decl_1;
-using using_decl::name_with_using_decl_2;
-extern "C" void name_with_using_decl_2(int);
-extern "C" void name_with_using_decl_3(int);
-using using_decl::name_with_using_decl_3;
diff --git a/clang/test/SemaCXX/friend.cpp b/clang/test/SemaCXX/friend.cpp
index ce2f34f..5daadf0 100644
--- a/clang/test/SemaCXX/friend.cpp
+++ b/clang/test/SemaCXX/friend.cpp
@@ -134,7 +134,7 @@
namespace test7 {
extern "C" {
class X {
- friend int test7_f() { return 42; }
+ friend int f() { return 42; }
};
}
}
diff --git a/clang/test/SemaCXX/linkage-spec.cpp b/clang/test/SemaCXX/linkage-spec.cpp
index 355a878..fc14081 100644
--- a/clang/test/SemaCXX/linkage-spec.cpp
+++ b/clang/test/SemaCXX/linkage-spec.cpp
@@ -41,32 +41,20 @@
using namespace pr5430;
extern "C" void pr5430::func(void) { }
-// PR5405
-int f2(char *) // expected-note {{here}}
+// PR5404
+int f2(char *)
{
return 0;
}
extern "C"
{
- int f2(int) // expected-error {{with C language linkage conflicts with declaration in global scope}}
+ int f2(int)
{
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);
@@ -129,28 +117,3 @@
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);
-}
diff --git a/clang/test/SemaCXX/linkage2.cpp b/clang/test/SemaCXX/linkage2.cpp
index c97a2f4..a811575 100644
--- a/clang/test/SemaCXX/linkage2.cpp
+++ b/clang/test/SemaCXX/linkage2.cpp
@@ -201,15 +201,3 @@
}
void *h() { return f(); }
}
-
-extern "C" void pr16247_foo(int); // expected-note {{here}}
-static void pr16247_foo(double); // expected-error {{conflicts with declaration with C language linkage}}
-void pr16247_foo(int) {}
-void pr16247_foo(double) {}
-
-namespace PR16247 {
- extern "C" void pr16247_bar(int);
- static void pr16247_bar(double);
- void pr16247_bar(int) {}
- void pr16247_bar(double) {}
-}