Author: Vlad Serebrennikov Date: 2022-12-01T21:10:28+03:00 New Revision: f5993fc7757e37a9076c5cd22de8f275e5c6097e
URL: https://github.com/llvm/llvm-project/commit/f5993fc7757e37a9076c5cd22de8f275e5c6097e DIFF: https://github.com/llvm/llvm-project/commit/f5993fc7757e37a9076c5cd22de8f275e5c6097e.diff LOG: [clang] Add test for CWG36 Reviewed By: #clang-language-wg, aaron.ballman, erichkeane Differential Revision: https://reviews.llvm.org/D138822 Added: Modified: clang/test/CXX/drs/dr0xx.cpp clang/www/cxx_dr_status.html Removed: ################################################################################ diff --git a/clang/test/CXX/drs/dr0xx.cpp b/clang/test/CXX/drs/dr0xx.cpp index 2959f4ebba91..e34dc75a1b6c 100644 --- a/clang/test/CXX/drs/dr0xx.cpp +++ b/clang/test/CXX/drs/dr0xx.cpp @@ -2,6 +2,8 @@ // RUN: %clang_cc1 -std=c++11 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors -triple %itanium_abi_triple // RUN: %clang_cc1 -std=c++14 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors -triple %itanium_abi_triple // RUN: %clang_cc1 -std=c++17 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors -triple %itanium_abi_triple +// RUN: %clang_cc1 -std=c++20 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors -triple %itanium_abi_triple +// RUN: %clang_cc1 -std=c++2b %s -verify -fexceptions -fcxx-exceptions -pedantic-errors -triple %itanium_abi_triple namespace dr1 { // dr1: no namespace X { extern "C" void dr1_f(int a = 1); } @@ -448,6 +450,94 @@ namespace dr33 { // dr33: yes // dr34: na // dr35: dup 178 + +namespace dr36 { // dr36: yes +namespace example1 { + namespace A { + int i; + } + + namespace A1 { + using A::i; + using A::i; + } + + void f() + { + using A::i; + using A::i; + } +} + +namespace example2 { + struct A + { + int i; + static int j; + }; + + struct B : A { }; + struct C : A { }; + + struct D : virtual B, virtual C + { + using B::i; // expected-note {{previous using declaration}} + using B::i; // expected-error {{redeclaration of using declaration}} + + using C::i; // expected-note {{previous using declaration}} + using C::i; // expected-error {{redeclaration of using declaration}} + + using B::j; // expected-note {{previous using declaration}} + using B::j; // expected-error {{redeclaration of using declaration}} + + using C::j; // expected-note {{previous using declaration}} + using C::j; // expected-error {{redeclaration of using declaration}} + }; +} + +namespace example3 { + template<typename T> + struct A + { + T i; + static T j; + }; + + template<typename T> + struct B : A<T> { }; + template<typename T> + struct C : A<T> { }; + + template<typename T> + struct D : virtual B<T>, virtual C<T> + { + using B<T>::i; // expected-note {{previous using declaration}} + using B<T>::i; // expected-error {{redeclaration of using declaration}} + + using C<T>::i; // expected-note {{previous using declaration}} + using C<T>::i; // expected-error {{redeclaration of using declaration}} + + using B<T>::j; // expected-note {{previous using declaration}} + using B<T>::j; // expected-error {{redeclaration of using declaration}} + + using C<T>::j; // expected-note {{previous using declaration}} + using C<T>::j; // expected-error {{redeclaration of using declaration}} + }; +} +namespace example4 { + template<typename T> + struct E { + T k; + }; + + template<typename T> + struct G : E<T> { + using E<T>::k; // expected-note {{previous using declaration}} + using E<T>::k; // expected-error {{redeclaration of using declaration}} + }; +} +} + // dr37: sup 475 namespace dr38 { // dr38: yes @@ -699,6 +789,8 @@ namespace dr58 { // dr58: yes } namespace dr59 { // dr59: yes +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-volatile" template<typename T> struct convert_to { operator T() const; }; struct A {}; // expected-note 5+{{candidate}} struct B : A {}; // expected-note 0+{{candidate}} @@ -732,6 +824,7 @@ namespace dr59 { // dr59: yes int n3 = convert_to<const int>(); int n4 = convert_to<const volatile int>(); int n5 = convert_to<const volatile int&>(); +#pragma clang diagnostic pop } namespace dr60 { // dr60: yes diff --git a/clang/www/cxx_dr_status.html b/clang/www/cxx_dr_status.html index e4d0a24e08c9..6fa7ead4138d 100755 --- a/clang/www/cxx_dr_status.html +++ b/clang/www/cxx_dr_status.html @@ -254,7 +254,7 @@ <h2 id="cxxdr">C++ defect report implementation status</h2> <td><a href="https://wg21.link/cwg36">36</a></td> <td>CD6</td> <td><I>using-declaration</I>s in multiple-declaration contexts</td> - <td class="none" align="center">Unknown</td> + <td class="full" align="center">Yes</td> </tr> <tr id="37"> <td><a href="https://wg21.link/cwg37">37</a></td> _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits