diff --git a/clang/lib/Sema/SemaTemplateInstantiate.cpp b/clang/lib/Sema/SemaTemplateInstantiate.cpp --- a/clang/lib/Sema/SemaTemplateInstantiate.cpp +++ b/clang/lib/Sema/SemaTemplateInstantiate.cpp @@ -2241,9 +2241,6 @@ concepts::ExprRequirement * TemplateInstantiator::TransformExprRequirement(concepts::ExprRequirement *Req) { - if (!Req->isDependent() && !AlwaysRebuild()) - return Req; - Sema::SFINAETrap Trap(SemaRef); llvm::PointerUnion diff --git a/clang/lib/Sema/TreeTransform.h b/clang/lib/Sema/TreeTransform.h --- a/clang/lib/Sema/TreeTransform.h +++ b/clang/lib/Sema/TreeTransform.h @@ -2791,6 +2791,7 @@ LookupResult R(getSema(), MemberNameInfo, Sema::LookupMemberName); R.addDecl(FoundDecl); R.resolveKind(); + R.setNamingClass(BaseType->getAsCXXRecordDecl()); return getSema().BuildMemberReferenceExpr(Base, BaseType, OpLoc, isArrow, SS, TemplateKWLoc, diff --git a/clang/test/CXX/class.access/p4.cpp b/clang/test/CXX/class.access/p4.cpp --- a/clang/test/CXX/class.access/p4.cpp +++ b/clang/test/CXX/class.access/p4.cpp @@ -503,26 +503,26 @@ namespace test15 { template class A { private: - int private_foo; // expected-note {{declared private here}} - static int private_sfoo; // expected-note {{declared private here}} + int private_foo; // expected-note 2 {{declared private here}} + static int private_sfoo; // expected-note 2 {{declared private here}} protected: - int protected_foo; // expected-note 3 {{declared protected here}} // expected-note {{can only access this member on an object of type 'test15::B'}} - static int protected_sfoo; // expected-note 3 {{declared protected here}} + int protected_foo; // expected-note 6 {{declared protected here}} // expected-note 2 {{can only access this member on an object of type 'test15::B'}} + static int protected_sfoo; // expected-note 6 {{declared protected here}} int test1(A &a) { - return a.private_foo; // expected-error {{private member}} + return a.private_foo; // expected-error 2 {{private member}} } int test2(A &a) { - return a.private_sfoo; // expected-error {{private member}} + return a.private_sfoo; // expected-error 2 {{private member}} } int test3(A &a) { - return a.protected_foo; // expected-error {{protected member}} + return a.protected_foo; // expected-error 2 {{protected member}} } int test4(A &a) { - return a.protected_sfoo; // expected-error {{protected member}} + return a.protected_sfoo; // expected-error 2 {{protected member}} } }; @@ -535,19 +535,19 @@ // be a subclass of B for any T. int test1(A &a) { - return a.protected_foo; // expected-error 2 {{protected member}} + return a.protected_foo; // expected-error 4 {{protected member}} } int test2(A &a) { - return a.protected_sfoo; // expected-error {{protected member}} + return a.protected_sfoo; // expected-error 2 {{protected member}} } int test3(B &b) { - return b.protected_foo; // expected-error {{protected member}} + return b.protected_foo; // expected-error 2 {{protected member}} } int test4(B &b) { - return b.protected_sfoo; // expected-error {{protected member}} + return b.protected_sfoo; // expected-error 2 {{protected member}} } }; diff --git a/clang/test/CXX/drs/dr6xx.cpp b/clang/test/CXX/drs/dr6xx.cpp --- a/clang/test/CXX/drs/dr6xx.cpp +++ b/clang/test/CXX/drs/dr6xx.cpp @@ -882,11 +882,17 @@ friend int dr674::g(int); friend int dr674::h<>(int); int n; // expected-note 2{{private}} + #if __cplusplus >= 201103L + // expected-note@-2 {{private}} + #endif }; template int f(T) { return X().n; } int g(int) { return X().n; } template int g(T) { return X().n; } // expected-error {{private}} + #if __cplusplus >= 201103L + // expected-error@-2 {{private}} + #endif int h(int) { return X().n; } // expected-error {{private}} template int h(T) { return X().n; } @@ -910,11 +916,17 @@ friend int Y::g(int); friend int Y::h<>(int); int n; // expected-note 2{{private}} + #if __cplusplus >= 201103L + // expected-note@-2 {{private}} + #endif }; template int Y::f(T) { return Z().n; } int Y::g(int) { return Z().n; } template int Y::g(T) { return Z().n; } // expected-error {{private}} + #if __cplusplus >= 201103L + // expected-error@-2 {{private}} + #endif int Y::h(int) { return Z().n; } // expected-error {{private}} template int Y::h(T) { return Z().n; } diff --git a/clang/test/CXX/temp/temp.decls/temp.friend/p1.cpp b/clang/test/CXX/temp/temp.decls/temp.friend/p1.cpp --- a/clang/test/CXX/temp/temp.decls/temp.friend/p1.cpp +++ b/clang/test/CXX/temp/temp.decls/temp.friend/p1.cpp @@ -97,17 +97,17 @@ friend class User; friend bool transform<>(Bool, bool); - bool value; // expected-note 2 {{declared private here}} + bool value; // expected-note 4 {{declared private here}} }; template class User { static T compute(Bool b) { - return b.value; // expected-error {{'value' is a private member of 'test3::Bool'}} + return b.value; // expected-error 2 {{'value' is a private member of 'test3::Bool'}} } }; template T transform(Bool b, T value) { - if (b.value) // expected-error {{'value' is a private member of 'test3::Bool'}} + if (b.value) // expected-error 2 {{'value' is a private member of 'test3::Bool'}} return value; return value + 1; } @@ -222,7 +222,7 @@ template A bar(const T*, const A&); template class A { private: - void foo(); // expected-note {{declared private here}} + void foo(); // expected-note 2 {{declared private here}} friend A bar<>(const T*, const A&); }; @@ -231,7 +231,7 @@ l1.foo(); A l2; - l2.foo(); // expected-error {{'foo' is a private member of 'test10::A'}} + l2.foo(); // expected-error 2 {{'foo' is a private member of 'test10::A'}} return l1; } diff --git a/clang/test/SemaCXX/access.cpp b/clang/test/SemaCXX/access.cpp --- a/clang/test/SemaCXX/access.cpp +++ b/clang/test/SemaCXX/access.cpp @@ -115,13 +115,13 @@ namespace N { class Y { template friend struct X; - int t; // expected-note {{here}} + int t; // expected-note 2 {{here}} }; } template struct X { - X() { (void)N::Y().t; } // expected-error {{private}} + X() { (void)N::Y().t; } // expected-error 2 {{private}} }; - X x; + X x; // expected-note {{in instantiation of member function}} } namespace comment2 { struct X;