summaryrefslogtreecommitdiffstats
path: root/clang/lib/AST/ItaniumMangle.cpp
diff options
context:
space:
mode:
authorDavid Majnemer <david.majnemer@gmail.com>2015-02-18 19:08:11 +0000
committerDavid Majnemer <david.majnemer@gmail.com>2015-02-18 19:08:11 +0000
commitf8c02e6bfbe009ecbd683e794ccc15aafa9c2fd0 (patch)
tree57337d460ea7b885c1100fbdf29c501bae87c83d /clang/lib/AST/ItaniumMangle.cpp
parent11ae7789bafcd9186fe6a13a9db44e0c733d327a (diff)
downloadbcm5719-llvm-f8c02e6bfbe009ecbd683e794ccc15aafa9c2fd0.tar.gz
bcm5719-llvm-f8c02e6bfbe009ecbd683e794ccc15aafa9c2fd0.zip
Itanium ABI: Properly mangle extern "C" template arguments
extern "C" declarations should be considered like global declarations for mangling purposes. Differential Revision: http://reviews.llvm.org/D7718 llvm-svn: 229724
Diffstat (limited to 'clang/lib/AST/ItaniumMangle.cpp')
-rw-r--r--clang/lib/AST/ItaniumMangle.cpp8
1 files changed, 8 insertions, 0 deletions
diff --git a/clang/lib/AST/ItaniumMangle.cpp b/clang/lib/AST/ItaniumMangle.cpp
index f56e242d374..b97a2e6d571 100644
--- a/clang/lib/AST/ItaniumMangle.cpp
+++ b/clang/lib/AST/ItaniumMangle.cpp
@@ -69,6 +69,14 @@ static const DeclContext *getEffectiveDeclContext(const Decl *D) {
if (const CapturedDecl *CD = dyn_cast<CapturedDecl>(DC))
return getEffectiveDeclContext(CD);
+ if (const auto *VD = dyn_cast<VarDecl>(D))
+ if (VD->isExternC())
+ return VD->getASTContext().getTranslationUnitDecl();
+
+ if (const auto *FD = dyn_cast<FunctionDecl>(D))
+ if (FD->isExternC())
+ return FD->getASTContext().getTranslationUnitDecl();
+
return DC;
}
OpenPOWER on IntegriCloud