From: Richard Smith Date: Thu, 22 Nov 2012 00:40:54 +0000 (+0000) Subject: Fix regression in r168477. Use canonical decl when looking for base class X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=746619a5ace6dcbd0970e904b1ebda838064ec03;p=clang Fix regression in r168477. Use canonical decl when looking for base class specified as a qualified name. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@168479 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaExprMember.cpp b/lib/Sema/SemaExprMember.cpp index 6bf5f2e3a2..d12e68e2ac 100644 --- a/lib/Sema/SemaExprMember.cpp +++ b/lib/Sema/SemaExprMember.cpp @@ -163,7 +163,7 @@ static IMAKind ClassifyImplicitMemberAccess(Sema &SemaRef, // member name lookup, and it's sufficient to check that we have the naming // class as a base class. Classes.clear(); - Classes.insert(R.getNamingClass()); + Classes.insert(R.getNamingClass()->getCanonicalDecl()); } // If we can prove that the current context is unrelated to all the diff --git a/test/CXX/temp/temp.res/temp.dep/p3.cpp b/test/CXX/temp/temp.res/temp.dep/p3.cpp index 576e310985..583fb4b3cc 100644 --- a/test/CXX/temp/temp.res/temp.dep/p3.cpp +++ b/test/CXX/temp/temp.res/temp.dep/p3.cpp @@ -77,4 +77,13 @@ namespace PR14402 { template<> struct A::E : A {}; // 'cannot bind to a temporary' char &s = A::F().g(); // expected-note {{in instantiation of}} + + struct X; + struct X { void f(); }; + struct X; + template struct Y : X { + void g() { + X::f(); + } + }; }