diff options
author | Douglas Gregor <dgregor@apple.com> | 2009-08-26 18:54:58 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2009-08-26 18:54:58 +0000 |
commit | db3a0f543e9a120d37823c6f2a2f1c693b69f2a1 (patch) | |
tree | c9521e4244b9a569855f5565e392198d55fe1bcc | |
parent | 42c39f39184c5ce9d7f489e5dcb7eec770728a9a (diff) |
Make sure to compare primary declaration contexts when determining whether a declaration is in scope
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@80126 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Sema/IdentifierResolver.cpp | 3 | ||||
-rw-r--r-- | test/SemaTemplate/class-template-spec.cpp | 19 |
2 files changed, 21 insertions, 1 deletions
diff --git a/lib/Sema/IdentifierResolver.cpp b/lib/Sema/IdentifierResolver.cpp index ceab859c90..1e5fb26fb5 100644 --- a/lib/Sema/IdentifierResolver.cpp +++ b/lib/Sema/IdentifierResolver.cpp @@ -134,7 +134,8 @@ bool IdentifierResolver::isDeclInScope(Decl *D, DeclContext *Ctx, return false; } - return D->getDeclContext()->getLookupContext() == Ctx->getPrimaryContext(); + return D->getDeclContext()->getLookupContext()->getPrimaryContext() == + Ctx->getPrimaryContext(); } /// AddDecl - Link the decl to its shadowed decl chain. diff --git a/test/SemaTemplate/class-template-spec.cpp b/test/SemaTemplate/class-template-spec.cpp index 71d8ea14be..34c616cc2f 100644 --- a/test/SemaTemplate/class-template-spec.cpp +++ b/test/SemaTemplate/class-template-spec.cpp @@ -49,6 +49,25 @@ struct A<char> { A<char>::A() { } +// Make sure we can see specializations defined before the primary template. +namespace N{ + template<typename T> struct A0; +} + +namespace N { + template<> + struct A0<void> { + typedef void* pointer; + }; +} + +namespace N { + template<typename T> + struct A0 { + void foo(A0<void>::pointer p = 0); + }; +} + // Diagnose specialization errors struct A<double> { }; // expected-error{{template specialization requires 'template<>'}} |