From: Anders Carlsson Date: Fri, 12 Jun 2009 18:53:02 +0000 (+0000) Subject: Fix PR4365. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1d79faf915cc01739664c3817220ed25ad08a367;p=clang Fix PR4365. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@73240 91177308-0d34-0410-b5e6-96231b3b80d8 --- 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 class B { + typedef int A; +}; + +template struct X : B { + static A a; +}; + +int a0[sizeof(X::a) == sizeof(double) ? 1 : -1]; + +// PR4365. +template class Q; +template class R : Q {T current;};