[PATCH] D147848: [clang] Add test for CWG2370
Vlad Serebrennikov via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Sat Apr 8 04:04:09 PDT 2023
Endill created this revision.
Endill added a reviewer: clang-language-wg.
Herald added a project: All.
Endill requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.
P1787 <https://wg21.link/p1787>: CWG2370 is resolved by performing a search in (only) the immediate scope of any friend, per the CWG opinion from San Diego <http://wiki.edg.com/bin/view/Wg21sandiego2018/CoreWorkingGroup#Core_issue_2370_friend_declarati>.
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 <https://reviews.llvm.org/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`.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D147848
Files:
clang/test/CXX/drs/dr23xx.cpp
clang/www/cxx_dr_status.html
Index: clang/www/cxx_dr_status.html
===================================================================
--- clang/www/cxx_dr_status.html
+++ clang/www/cxx_dr_status.html
@@ -14027,7 +14027,7 @@
<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>
Index: clang/test/CXX/drs/dr23xx.cpp
===================================================================
--- clang/test/CXX/drs/dr23xx.cpp
+++ 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 @@
} //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
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D147848.511873.patch
Type: text/x-patch
Size: 1827 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20230408/661394c8/attachment-0001.bin>
More information about the cfe-commits
mailing list