diff options
| author | Rafael Espindola <rafael.espindola@gmail.com> | 2013-02-14 03:31:26 +0000 |
|---|---|---|
| committer | Rafael Espindola <rafael.espindola@gmail.com> | 2013-02-14 03:31:26 +0000 |
| commit | 46d2b6bacfc3208376668c41b7907468bf7df0ff (patch) | |
| tree | 1378eea8956dd3b06a44e6430a3028f18fb921ca /clang/lib/AST | |
| parent | c5d33d83597329bd3fba2f274723ae2dbd9e20a7 (diff) | |
| download | bcm5719-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.cpp | 9 |
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. |

