summaryrefslogtreecommitdiffstats
path: root/clang/lib/AST
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2013-02-14 03:31:26 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2013-02-14 03:31:26 +0000
commit46d2b6bacfc3208376668c41b7907468bf7df0ff (patch)
tree1378eea8956dd3b06a44e6430a3028f18fb921ca /clang/lib/AST
parentc5d33d83597329bd3fba2f274723ae2dbd9e20a7 (diff)
downloadbcm5719-llvm-46d2b6bacfc3208376668c41b7907468bf7df0ff.tar.gz
bcm5719-llvm-46d2b6bacfc3208376668c41b7907468bf7df0ff.zip
Partially revert r175117 so that we don't break assumptions about how
static functions in extern "C" contexts are mangled. Should fix the bootstrap. llvm-svn: 175132
Diffstat (limited to 'clang/lib/AST')
-rw-r--r--clang/lib/AST/ItaniumMangle.cpp9
1 files changed, 9 insertions, 0 deletions
diff --git a/clang/lib/AST/ItaniumMangle.cpp b/clang/lib/AST/ItaniumMangle.cpp
index e9a3b034836..1f95a2fee0c 100644
--- a/clang/lib/AST/ItaniumMangle.cpp
+++ b/clang/lib/AST/ItaniumMangle.cpp
@@ -381,6 +381,15 @@ bool ItaniumMangleContext::shouldMangleDeclName(const NamedDecl *D) {
// mangling.
if (!FD->getDeclName().isIdentifier() || L == CXXLanguageLinkage)
return true;
+
+ // FIXME: Users assume they know the mangling of static functions
+ // declared in extern "C" contexts, so we cannot always mangle them.
+ // As an improvement, maybe we could mangle them only if they are actually
+ // overloaded.
+ const DeclContext *DC = FD->getDeclContext();
+ if (!DC->isRecord() &&
+ FD->getFirstDeclaration()->getDeclContext()->isExternCContext())
+ return false;
}
// Otherwise, no mangling is done outside C++ mode.
OpenPOWER on IntegriCloud