Weather we should give C language linkage to functions and variables with internal linkage probably depends on how much code assumes it. The standard says they should have no language linkage, but gcc and msvc assign them C language linkage. This commit removes the hack that was preventing the mangling on static functions declare in extern C contexts. It is an experiment to see if we can implement the rules in the standard. If it turns out that many users depend on these functions and variables having C language linkage, we should change isExternC instead and try to convince the CWG to change the standard. llvm-svn: 175937
34 lines
529 B
C++
34 lines
529 B
C++
// RUN: %clang_cc1 -emit-llvm -o - %s | FileCheck %s
|
|
// pr6644
|
|
|
|
extern "C" {
|
|
namespace N {
|
|
struct X {
|
|
virtual void f();
|
|
};
|
|
void X::f() { }
|
|
}
|
|
}
|
|
|
|
// CHECK: define void @_ZN1N1X1fEv
|
|
|
|
extern "C" {
|
|
static void test2_f() {
|
|
}
|
|
// CHECK: define internal void @_Z7test2_fv
|
|
static void test2_f(int x) {
|
|
}
|
|
// CHECK: define internal void @_Z7test2_fi
|
|
void test2_use() {
|
|
test2_f();
|
|
test2_f(42);
|
|
}
|
|
}
|
|
|
|
extern "C" {
|
|
struct test3_s {
|
|
};
|
|
bool operator==(const int& a, const test3_s& b) {
|
|
}
|
|
}
|