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
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to