diff options
-rw-r--r-- | lib/Sema/SemaExprMember.cpp | 2 | ||||
-rw-r--r-- | test/CXX/temp/temp.res/temp.dep/p3.cpp | 9 |
2 files changed, 10 insertions, 1 deletions
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<char>::E : A<char> {}; // 'cannot bind to a temporary' char &s = A<char>::F().g(); // expected-note {{in instantiation of}} + + struct X; + struct X { void f(); }; + struct X; + template<typename T> struct Y : X { + void g() { + X::f(); + } + }; } |