diff options
author | David Majnemer <david.majnemer@gmail.com> | 2015-02-18 19:08:11 +0000 |
---|---|---|
committer | David Majnemer <david.majnemer@gmail.com> | 2015-02-18 19:08:11 +0000 |
commit | f8c02e6bfbe009ecbd683e794ccc15aafa9c2fd0 (patch) | |
tree | 57337d460ea7b885c1100fbdf29c501bae87c83d /clang/lib/AST/ItaniumMangle.cpp | |
parent | 11ae7789bafcd9186fe6a13a9db44e0c733d327a (diff) | |
download | bcm5719-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.cpp | 8 |
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; } |