diff options
author | Chandler Carruth <chandlerc@gmail.com> | 2011-02-24 19:03:39 +0000 |
---|---|---|
committer | Chandler Carruth <chandlerc@gmail.com> | 2011-02-24 19:03:39 +0000 |
commit | 9682a2fd3a18c59cc1edacb16af4a5beed70e121 (patch) | |
tree | f78f42e68b3280cd012d7413d57adfcb13d53aec /clang/lib | |
parent | 7c3230d3484fb4b825d757ffe8e59bea48eeb8f8 (diff) | |
download | bcm5719-llvm-9682a2fd3a18c59cc1edacb16af4a5beed70e121.tar.gz bcm5719-llvm-9682a2fd3a18c59cc1edacb16af4a5beed70e121.zip |
Likely fix for PR9316 and other unknown bugs: don't use the anonynmous
namespace blanket rule for variables and functions declared 'extern
"C"'.
llvm-svn: 126400
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/AST/Decl.cpp | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/clang/lib/AST/Decl.cpp b/clang/lib/AST/Decl.cpp index 18c680b1fe7..b482a032994 100644 --- a/clang/lib/AST/Decl.cpp +++ b/clang/lib/AST/Decl.cpp @@ -266,8 +266,12 @@ static LinkageInfo getLVForNamespaceScopeDecl(const NamedDecl *D, LVFlags F) { return LinkageInfo::internal(); } - if (D->isInAnonymousNamespace()) - return LinkageInfo::uniqueExternal(); + if (D->isInAnonymousNamespace()) { + const VarDecl *Var = dyn_cast<VarDecl>(D); + const FunctionDecl *Func = dyn_cast<FunctionDecl>(D); + if ((!Var || !Var->isExternC()) && (!Func || !Func->isExternC())) + return LinkageInfo::uniqueExternal(); + } // Set up the defaults. |