usaxena95 created this revision.
Herald added a project: All.
usaxena95 requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D140547
Files:
clang/lib/Sema/SemaTemplateInstantiate.cpp
clang/lib/Sema/TreeTransform.h
clang/test/CXX/class.access/p4.cpp
clang/test/CXX/drs/dr6xx.cpp
clang/test/CXX/temp/temp.decls/temp.friend/p1.cpp
clang/test/SemaCXX/access.cpp
Index: clang/test/SemaCXX/access.cpp
===================================================================
--- clang/test/SemaCXX/access.cpp
+++ clang/test/SemaCXX/access.cpp
@@ -115,13 +115,13 @@
namespace N {
class Y {
template<typename T> friend struct X;
- int t; // expected-note {{here}}
+ int t; // expected-note 2 {{here}}
};
}
template<typename T> struct X {
- X() { (void)N::Y().t; } // expected-error {{private}}
+ X() { (void)N::Y().t; } // expected-error 2 {{private}}
};
- X<char> x;
+ X<char> x; // expected-note {{in instantiation of member function}}
}
namespace comment2 {
struct X;
Index: clang/test/CXX/temp/temp.decls/temp.friend/p1.cpp
===================================================================
--- clang/test/CXX/temp/temp.decls/temp.friend/p1.cpp
+++ clang/test/CXX/temp/temp.decls/temp.friend/p1.cpp
@@ -97,17 +97,17 @@
friend class User<bool>;
friend bool transform<>(Bool, bool);
- bool value; // expected-note 2 {{declared private here}}
+ bool value; // expected-note 4 {{declared private here}}
};
template <class T> 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 <class T> 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 <class T> A<T> bar(const T*, const A<T>&);
template <class T> 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<T>&);
};
@@ -231,7 +231,7 @@
l1.foo();
A<char> l2;
- l2.foo(); // expected-error {{'foo' is a private member of 'test10::A<char>'}}
+ l2.foo(); // expected-error 2 {{'foo' is a private member of 'test10::A<char>'}}
return l1;
}
Index: clang/test/CXX/drs/dr6xx.cpp
===================================================================
--- clang/test/CXX/drs/dr6xx.cpp
+++ 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<typename T> int f(T) { return X().n; }
int g(int) { return X().n; }
template<typename T> 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<typename T> 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<typename T> int Y::f(T) { return Z().n; }
int Y::g(int) { return Z().n; }
template<typename T> 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<typename T> int Y::h(T) { return Z().n; }
Index: clang/test/CXX/class.access/p4.cpp
===================================================================
--- clang/test/CXX/class.access/p4.cpp
+++ clang/test/CXX/class.access/p4.cpp
@@ -503,26 +503,26 @@
namespace test15 {
template <class T> 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<int>'}}
- 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<int>'}}
+ static int protected_sfoo; // expected-note 6 {{declared protected here}}
int test1(A<int> &a) {
- return a.private_foo; // expected-error {{private member}}
+ return a.private_foo; // expected-error 2 {{private member}}
}
int test2(A<int> &a) {
- return a.private_sfoo; // expected-error {{private member}}
+ return a.private_sfoo; // expected-error 2 {{private member}}
}
int test3(A<int> &a) {
- return a.protected_foo; // expected-error {{protected member}}
+ return a.protected_foo; // expected-error 2 {{protected member}}
}
int test4(A<int> &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<T> for any T.
int test1(A<int> &a) {
- return a.protected_foo; // expected-error 2 {{protected member}}
+ return a.protected_foo; // expected-error 4 {{protected member}}
}
int test2(A<int> &a) {
- return a.protected_sfoo; // expected-error {{protected member}}
+ return a.protected_sfoo; // expected-error 2 {{protected member}}
}
int test3(B<int> &b) {
- return b.protected_foo; // expected-error {{protected member}}
+ return b.protected_foo; // expected-error 2 {{protected member}}
}
int test4(B<int> &b) {
- return b.protected_sfoo; // expected-error {{protected member}}
+ return b.protected_sfoo; // expected-error 2 {{protected member}}
}
};
Index: clang/lib/Sema/TreeTransform.h
===================================================================
--- clang/lib/Sema/TreeTransform.h
+++ 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,
Index: clang/lib/Sema/SemaTemplateInstantiate.cpp
===================================================================
--- clang/lib/Sema/SemaTemplateInstantiate.cpp
+++ 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<Expr *, concepts::Requirement::SubstitutionDiagnostic *>
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits