From: Vlad Serebrennikov Date: Thu, 1 Dec 2022 14:09:28 +0000 (+0300) Subject: [clang] Add test for CWG360 X-Git-Tag: upstream/17.0.6~25728 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=3f950ad58919309882a29bcb4bf6f8db62ffc384;p=platform%2Fupstream%2Fllvm.git [clang] Add test for CWG360 P1787: "CWG360 is resolved by applying access control to using-declarations." [[ http://eel.is/c++draft/class.access#general-4.sentence-3 | class.access.general#4 ]]: "When a using-declarator is named, access control is applied to it, not to the declarations that replace it." Reviewed By: #clang-language-wg, aaron.ballman Differential Revision: https://reviews.llvm.org/D139090 --- diff --git a/clang/test/CXX/drs/dr3xx.cpp b/clang/test/CXX/drs/dr3xx.cpp index 4ae56fc..de7f6b9b 100644 --- a/clang/test/CXX/drs/dr3xx.cpp +++ b/clang/test/CXX/drs/dr3xx.cpp @@ -890,6 +890,33 @@ namespace dr359 { // dr359: yes }; } +namespace dr360 { // dr360: yes +struct A { + int foo(); + int bar(); + +protected: + int baz(); +}; + +struct B : A { +private: + using A::foo; // #dr360-foo-using-decl +protected: + using A::bar; // #dr360-bar-using-decl +public: + using A::baz; // #dr360-baz-using-decl +}; + +int main() { + int foo = B().foo(); // expected-error {{is a private member}} + // expected-note@#dr360-foo-using-decl {{declared private here}} + int bar = B().bar(); // expected-error {{is a protected member}} + // expected-note@#dr360-bar-using-decl {{declared protected here}} + int baz = B().baz(); +} +} // namespace dr360 + // dr362: na // dr363: na diff --git a/clang/www/cxx_dr_status.html b/clang/www/cxx_dr_status.html index cec9fe5..e4d0a24 100755 --- a/clang/www/cxx_dr_status.html +++ b/clang/www/cxx_dr_status.html @@ -2200,7 +2200,7 @@ of class templates 360 CD6 Using-declaration that reduces access - Unknown + Yes 361