Don't turn off mangling in implicitly extern "C" system headers. GCC

doesn't do this on any of the major platforms, and we don't really
support any of the platforms that do (nor will we actually handle
those headers well). Fixes PR6217; see PR6530 for details on what we
would need to do to support these platforms.

llvm-svn: 97899
This commit is contained in:
Douglas Gregor 2010-03-07 05:10:40 +00:00
parent 5cb196e14b
commit 577cf97cf3
2 changed files with 4 additions and 6 deletions

View File

@ -214,12 +214,6 @@ bool MangleContext::shouldMangleDeclName(const NamedDecl *D) {
if (!getASTContext().getLangOptions().CPlusPlus)
return false;
// No mangling in an "implicit extern C" header.
if (D->getLocation().isValid() &&
getASTContext().getSourceManager().
isInExternCSystemHeader(D->getLocation()))
return false;
// Variables at global scope with non-internal linkage are not mangled
if (!FD) {
const DeclContext *DC = D->getDeclContext();

View File

@ -5,3 +5,7 @@
# 1 "fake_system_header.h" 1 3 4
// CHECK: define void @_ZdlPvS_(
void operator delete (void*, void*) {}
// PR6217
// CHECK: define void @_Z3barv()
void bar() { }