Author: Vlad Serebrennikov
Date: 2023-04-11T22:04:02+03:00
New Revision: feb93d28b02c41ca6b069ec1f9e62fdfbb4c8b6c

URL: 
https://github.com/llvm/llvm-project/commit/feb93d28b02c41ca6b069ec1f9e62fdfbb4c8b6c
DIFF: 
https://github.com/llvm/llvm-project/commit/feb93d28b02c41ca6b069ec1f9e62fdfbb4c8b6c.diff

LOG: [clang] Add test for CWG2370

[[https://wg21.link/p1787 | P1787]]: CWG2370 is resolved by performing a search 
in (only) the immediate scope of any friend, per the [[ 
http://wiki.edg.com/bin/view/Wg21sandiego2018/CoreWorkingGroup#Core_issue_2370_friend_declarati
 | CWG opinion from San Diego ]].
Wording: In a friend declaration declarator whose declarator-id is a 
qualified-id whose lookup context is a class or namespace S, lookup for an 
unqualified name that appears after the declarator-id performs a search in the 
scope associated with S. If that lookup finds nothing, it undergoes unqualified 
name lookup. ([basic.lookup.unqual]/6).

Clarification for P1787 description: when applied to the test in this patch, 
"immediate scope" refers to `N`, and "(only)" refers to the fact that `type` is 
not searched in parent scope of `N`. See example after the wording if 
additional clarification is needed. The most relevant line there is `friend 
void A::f(F);  // OK`.

Reviewed By: #clang-language-wg, shafik

Differential Revision: https://reviews.llvm.org/D147848

Added: 
    

Modified: 
    clang/test/CXX/drs/dr23xx.cpp
    clang/www/cxx_dr_status.html

Removed: 
    


################################################################################
diff  --git a/clang/test/CXX/drs/dr23xx.cpp b/clang/test/CXX/drs/dr23xx.cpp
index a60aa8e5609c6..4f16746aad8be 100644
--- a/clang/test/CXX/drs/dr23xx.cpp
+++ b/clang/test/CXX/drs/dr23xx.cpp
@@ -2,7 +2,9 @@
 // RUN: %clang_cc1 -std=c++11 %s -verify -fexceptions -fcxx-exceptions 
-pedantic-errors 2>&1 | FileCheck %s
 // RUN: %clang_cc1 -std=c++14 %s -verify -fexceptions -fcxx-exceptions 
-pedantic-errors 2>&1 | FileCheck %s
 // RUN: %clang_cc1 -std=c++17 %s -verify -fexceptions -fcxx-exceptions 
-pedantic-errors 2>&1 | FileCheck %s
-// RUN: %clang_cc1 -std=c++2a %s -verify -fexceptions -fcxx-exceptions 
-pedantic-errors 2>&1 | FileCheck %s
+// RUN: %clang_cc1 -std=c++20 %s -verify -fexceptions -fcxx-exceptions 
-pedantic-errors 2>&1 | FileCheck %s
+// RUN: %clang_cc1 -std=c++2b %s -verify -fexceptions -fcxx-exceptions 
-pedantic-errors 2>&1 | FileCheck %s
+
 
 #if __cplusplus >= 201103L
 namespace dr2338 { // dr2338: 12
@@ -169,6 +171,20 @@ void g() {
 } //namespace dr2303
 #endif
 
+namespace dr2370 { // dr2370: no
+namespace N {
+typedef int type;
+void g(type);
+void h(type);
+} // namespace N
+class C {
+  typedef N::type N_type;
+  // FIXME: `type` should be searched for in N
+  // friend void N::g(type);
+  friend void N::h(N_type);
+};
+} // namespace dr2370
+
 // dr2385: na
 
 namespace dr2394 { // dr2394: 15

diff  --git a/clang/www/cxx_dr_status.html b/clang/www/cxx_dr_status.html
index 6e234f63fc015..863e20a57e2cd 100755
--- a/clang/www/cxx_dr_status.html
+++ b/clang/www/cxx_dr_status.html
@@ -14027,7 +14027,7 @@ <h2 id="cxxdr">C++ defect report implementation 
status</h2>
     <td><a href="https://wg21.link/cwg2370";>2370</a></td>
     <td>CD6</td>
     <td><TT>friend</TT> declarations of namespace-scope functions</td>
-    <td class="none" align="center">Unknown</td>
+    <td class="none" align="center">No</td>
   </tr>
   <tr id="2371">
     <td><a href="https://wg21.link/cwg2371";>2371</a></td>


        
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to