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 | b0e8e228ff080d01943381aa272655d0eb25bb90 (patch) | |
| tree | 3dd9c1ff7dedbe7b9353b4d2735a333f0b9956b2 | |
| parent | 9ebb4d2127ccc60484f9050aebc5c6b05bd20d0f (diff) | |
| download | bcm5719-llvm-b0e8e228ff080d01943381aa272655d0eb25bb90.tar.gz bcm5719-llvm-b0e8e228ff080d01943381aa272655d0eb25bb90.zip | |
Fix PR4365.
llvm-svn: 73240
| -rw-r--r-- | clang/lib/Sema/SemaInherit.cpp | 6 | ||||
| -rw-r--r-- | clang/test/SemaTemplate/dependent-names.cpp | 16 |
2 files changed, 22 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaInherit.cpp b/clang/lib/Sema/SemaInherit.cpp index 1b968f0fbcc..28ca5f64ef5 100644 --- a/clang/lib/Sema/SemaInherit.cpp +++ b/clang/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/clang/test/SemaTemplate/dependent-names.cpp b/clang/test/SemaTemplate/dependent-names.cpp new file mode 100644 index 00000000000..95ee2d2b9d1 --- /dev/null +++ b/clang/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;}; |

