summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2013-05-05 18:24:05 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2013-05-05 18:24:05 +0000
commita5d52204976cc55c6ae340db08c5f778058c9566 (patch)
treecb942c8488dac37fa585b7cbf9ef2576976c001b /clang
parentdc5436a3cb781aeceb510a41fcebcc5ce1459cba (diff)
downloadbcm5719-llvm-a5d52204976cc55c6ae340db08c5f778058c9566.tar.gz
bcm5719-llvm-a5d52204976cc55c6ae340db08c5f778058c9566.zip
Use lexical contexts when checking for conflicting language linkages.
This fixes pr14958. I will audit other calls to isExternCContext to see if there are any similar bugs left. llvm-svn: 181163
Diffstat (limited to 'clang')
-rw-r--r--clang/lib/Sema/SemaDecl.cpp4
-rw-r--r--clang/test/SemaCXX/linkage-spec.cpp8
2 files changed, 10 insertions, 2 deletions
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp
index 7b332f9fda9..b5e2c6ebe89 100644
--- a/clang/lib/Sema/SemaDecl.cpp
+++ b/clang/lib/Sema/SemaDecl.cpp
@@ -2247,10 +2247,10 @@ static bool haveIncompatibleLanguageLinkages(const T *Old, const T *New) {
LanguageLinkage OldLinkage = Old->getLanguageLinkage();
if (OldLinkage == CXXLanguageLinkage &&
- New->getDeclContext()->isExternCContext())
+ New->getLexicalDeclContext()->isExternCContext())
return true;
if (OldLinkage == CLanguageLinkage &&
- New->getDeclContext()->isExternCXXContext())
+ New->getLexicalDeclContext()->isExternCXXContext())
return true;
return false;
}
diff --git a/clang/test/SemaCXX/linkage-spec.cpp b/clang/test/SemaCXX/linkage-spec.cpp
index 0ba95081245..504df0d35c2 100644
--- a/clang/test/SemaCXX/linkage-spec.cpp
+++ b/clang/test/SemaCXX/linkage-spec.cpp
@@ -106,3 +106,11 @@ namespace PR9162 {
return sizeof(ArtsSink);
}
}
+
+namespace pr14958 {
+ namespace js { extern int ObjectClass; }
+ extern "C" {
+ namespace js {}
+ }
+ int js::ObjectClass;
+}
OpenPOWER on IntegriCloud