diff options
author | Anders Carlsson <andersca@mac.com> | 2009-06-12 18:53:02 +0000 |
---|---|---|
committer | Anders Carlsson <andersca@mac.com> | 2009-06-12 18:53:02 +0000 |
commit | 1d79faf915cc01739664c3817220ed25ad08a367 (patch) | |
tree | 57d70bd440a5368744bdd774ad57e5509e8690ec | |
parent | f67875d5addf36b951ad37fb04509ab2b572c88a (diff) |
Fix PR4365.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@73240 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Sema/SemaInherit.cpp | 6 | ||||
-rw-r--r-- | test/SemaTemplate/dependent-names.cpp | 16 |
2 files changed, 22 insertions, 0 deletions
diff --git a/lib/Sema/SemaInherit.cpp b/lib/Sema/SemaInherit.cpp index 1b968f0fbc..28ca5f64ef 100644 --- a/lib/Sema/SemaInherit.cpp +++ b/lib/Sema/SemaInherit.cpp @@ -138,6 +138,12 @@ bool Sema::LookupInBases(CXXRecordDecl *Class, // Find the record of the base class subobjects for this type. QualType BaseType = Context.getCanonicalType(BaseSpec->getType()); BaseType = BaseType.getUnqualifiedType(); + + // If a base class of the class template depends on a template-parameter, + // the base class scope is not examined during unqualified name lookup. + // [temp.dep]p3. + if (BaseType->isDependentType()) + continue; // Determine whether we need to visit this base class at all, // updating the count of subobjects appropriately. diff --git a/test/SemaTemplate/dependent-names.cpp b/test/SemaTemplate/dependent-names.cpp new file mode 100644 index 0000000000..95ee2d2b9d --- /dev/null +++ b/test/SemaTemplate/dependent-names.cpp @@ -0,0 +1,16 @@ +// RUN: clang-cc -fsyntax-only -verify %s + +typedef double A; +template<typename T> class B { + typedef int A; +}; + +template<typename T> struct X : B<T> { + static A a; +}; + +int a0[sizeof(X<int>::a) == sizeof(double) ? 1 : -1]; + +// PR4365. +template<class T> class Q; +template<class T> class R : Q<T> {T current;}; |