https://github.com/Endilll created https://github.com/llvm/llvm-project/pull/113439
[CWG1898](https://cplusplus.github.io/CWG/issues/1898.html) Use of “equivalent” in overload resolution ==================== [P1787R6](https://wg21.link/p1787r6): > CWG1898 is resolved by explicitly using the defined term parameter-type-list. As for the wording, the first sentence [over.dcl]/1 where the word "equivalent" was used: > Two function declarations of the same name refer to the same function if they > are in the same scope and have equivalent parameter declarations > ([over.load]). was replaced with what is now known as "corresponding overloads", defined in [[basic.scope.scope]/4](https://eel.is/c++draft/basic.scope#scope-4). The definition is present in P1787R6, but it's hard to reference, because the "corresponding overloads" term was coined later. >From 467c478cbc2400e1337e6dcc344a96e4a697341a Mon Sep 17 00:00:00 2001 From: Vlad Serebrennikov <serebrennikov.vladis...@gmail.com> Date: Wed, 23 Oct 2024 12:59:36 +0300 Subject: [PATCH] =?UTF-8?q?[clang][NFC]=20Add=20test=20for=20CWG1898=20"Us?= =?UTF-8?q?e=20of=20=E2=80=9Cequivalent=E2=80=9D=20in=20overload=20resolut?= =?UTF-8?q?ion"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- clang/test/CXX/drs/cwg18xx.cpp | 45 ++++++++++++++++++++++++++++++++++ clang/www/cxx_dr_status.html | 2 +- 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/clang/test/CXX/drs/cwg18xx.cpp b/clang/test/CXX/drs/cwg18xx.cpp index 7f0fb8cf589d48..3ec5c4d5c618b4 100644 --- a/clang/test/CXX/drs/cwg18xx.cpp +++ b/clang/test/CXX/drs/cwg18xx.cpp @@ -640,3 +640,48 @@ namespace H { struct S s; } } + +namespace cwg1898 { // cwg1898: 2.7 +void e(int) {} // #cwg1898-e-int +void e(int) {} +// expected-error@-1 {{redefinition of 'e'}} +// expected-note@#cwg1898-e-int {{previous definition is here}} +void e(long) {} + +void f(int) {} // #cwg1898-f-int +void f(const int) {} +// expected-error@-1 {{redefinition of 'f'}} +// expected-note@#cwg1898-f-int {{previous definition is here}} + +void g(int) {} // #cwg1898-g-int +void g(volatile int) {} +// since-cxx20-warning@-1 {{volatile-qualified parameter type 'volatile int' is deprecated}} +// expected-error@-2 {{redefinition of 'g'}} +// expected-note@#cwg1898-g-int {{previous definition is here}} + +void h(int *) {} // #cwg1898-h-int +void h(int[]) {} +// expected-error@-1 {{redefinition of 'h'}} +// expected-note@#cwg1898-h-int {{previous definition is here}} + +void i(int *) {} // #cwg1898-i-int +void i(int[2]) {} +// expected-error@-1 {{redefinition of 'i'}} +// expected-note@#cwg1898-i-int {{previous definition is here}} + +void j(void(*)()) {} // #cwg1898-j-int +void j(void()) {} +// expected-error@-1 {{redefinition of 'j'}} +// expected-note@#cwg1898-j-int {{previous definition is here}} + +struct A { + void k(int) {} // #cwg1898-k-int + void k(int) {} + // expected-error@-1 {{class member cannot be redeclared}} + // expected-note@#cwg1898-k-int {{previous definition is here}} +}; + +struct B : A { + void k(int) {} +}; +} // namespace cwg1898 diff --git a/clang/www/cxx_dr_status.html b/clang/www/cxx_dr_status.html index 82ba9b370ba595..6640ed477a241e 100755 --- a/clang/www/cxx_dr_status.html +++ b/clang/www/cxx_dr_status.html @@ -11219,7 +11219,7 @@ <h2 id="cxxdr">C++ defect report implementation status</h2> <td><a href="https://cplusplus.github.io/CWG/issues/1898.html">1898</a></td> <td>CD6</td> <td>Use of “equivalent” in overload resolution</td> - <td class="unknown" align="center">Unknown</td> + <td class="full" align="center">Clang 2.7</td> </tr> <tr id="1899"> <td><a href="https://cplusplus.github.io/CWG/issues/1899.html">1899</a></td> _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits