https://github.com/Endilll updated https://github.com/llvm/llvm-project/pull/237113
>From 22a0fa3b24570012022d4e5c4dac0853be006ec0 Mon Sep 17 00:00:00 2001 From: Vlad Serebrennikov <[email protected]> Date: Fri, 30 Oct 2026 08:39:19 +0300 Subject: [PATCH 1/5] [clang] Add tests for CWG issues about namespaces --- clang/test/CXX/drs/cwg10xx.cpp | 30 ++++++++++++++++ clang/test/CXX/drs/cwg14xx.cpp | 36 +++++++++++++++++++ clang/test/CXX/drs/cwg16xx.cpp | 30 ++++++++++++++++ clang/test/CXX/drs/cwg17xx.cpp | 11 ++++++ clang/test/CXX/drs/cwg1xx.cpp | 3 +- clang/test/CXX/drs/cwg8xx.cpp | 40 +++++++++++++++++++++ clang/test/CXX/drs/cwg9xx.cpp | 64 ++++++++++++++++++++++++++++++++++ 7 files changed, 212 insertions(+), 2 deletions(-) diff --git a/clang/test/CXX/drs/cwg10xx.cpp b/clang/test/CXX/drs/cwg10xx.cpp index 28c5e2e40129af..cdca0ff35a82d4 100644 --- a/clang/test/CXX/drs/cwg10xx.cpp +++ b/clang/test/CXX/drs/cwg10xx.cpp @@ -47,6 +47,10 @@ namespace cwg1004 { // cwg1004: 5 Third<A<int> > t; // #cwg1004-t } // namespace cwg1004 +namespace cwg1012 { // cwg1012: 2.7 +static void f() {} +} // namespace cwg1012 + namespace cwg1042 { // cwg1042: 3.5 #if __cplusplus >= 201402L // C++14 added an attribute that we can test the semantics of. @@ -112,6 +116,32 @@ namespace cwg1070 { // cwg1070: 3.5 #endif } // namespace cwg1070 +namespace cwg1077 { // cwg1077: 2.7 +namespace N { + template <typename> + void f(); // #cwg1077-f + + template <typename, typename> + struct S; // #cwg1077-S +} +namespace M { + template <> + void N::f<int>(); + // expected-error@-1 {{function template specialization of 'f' not in a namespace enclosing 'N'}} + // expected-note@#cwg1077-f {{explicitly specialized declaration is here}} + + template <> + struct N::S<int, int>; + // expected-error@-1 {{class template specialization of 'S' not in a namespace enclosing 'N'}} + // expected-note@#cwg1077-S {{explicitly specialized declaration is here}} + + template <typename T> + struct N::S<int, T>; + // expected-error@-1 {{class template partial specialization of 'S' not in a namespace enclosing 'N'}} + // expected-note@#cwg1077-S {{explicitly specialized declaration is here}} +} +} // namespace cwg1077 + namespace cwg1094 { // cwg1094: 24 #if __cplusplus >= 201103L enum class E : bool { Zero, One }; diff --git a/clang/test/CXX/drs/cwg14xx.cpp b/clang/test/CXX/drs/cwg14xx.cpp index f3b2bab8e7f3ac..c082cc62c827aa 100644 --- a/clang/test/CXX/drs/cwg14xx.cpp +++ b/clang/test/CXX/drs/cwg14xx.cpp @@ -110,6 +110,42 @@ namespace cwg1432 { // cwg1432: 16 open 2022-11-11 #endif } // namespace cwg1432 +namespace cwg1439 { // cwg1439: 2.7 +class A { + template <typename> + friend void f(); + + template <typename> + friend struct B; +}; + +void (*p1)() = &f<int>; +// expected-error@-1 {{use of undeclared identifier 'f'}} + +// FIXME: only the first error is relevant, others are noise +void (*p2)() = &cwg1439::f<int>; +// expected-error@-1 {{no member named 'f' in namespace 'cwg1439'}} +// expected-error@-2 {{expected '(' for function-style cast or type construction}} +// expected-error@-3 {{expected expression}} + +B<int>* p3; +// expected-error@-1 {{no template named 'B'}} + +cwg1439::B<int>* p4; +// expected-error@-1 {{no template named 'B' in namespace 'cwg1439'}} + +template <typename> +void f(); + +template <typename> +struct B; + +void (*p5)() = &f<int>; +void (*p6)() = &cwg1439::f<int>; +B<int>* p7; +cwg1439::B<int>* p8; +} // namespace cwg1439 + namespace cwg1443 { // cwg1443: 2.7 struct A { int i; diff --git a/clang/test/CXX/drs/cwg16xx.cpp b/clang/test/CXX/drs/cwg16xx.cpp index 91cc8261eb6bef..eedb50ca954f9a 100644 --- a/clang/test/CXX/drs/cwg16xx.cpp +++ b/clang/test/CXX/drs/cwg16xx.cpp @@ -175,6 +175,36 @@ namespace cwg1653 { // cwg1653: 4 c++17 } } // namespace cwg1653 +namespace cwg1657 { // cwg1657: 3.6 +#if __cplusplus >= 201103L +enum { + one [[]] + // cxx11-14-error@-1 {{attributes on an enumerator declaration are a C++17 extension}} +}; +enum E { + two [[]] + // cxx11-14-error@-1 {{attributes on an enumerator declaration are a C++17 extension}} +}; +enum struct E2 { + three [[]] + // cxx11-14-error@-1 {{attributes on an enumerator declaration are a C++17 extension}} +}; + +inline namespace [[]] {} // #cwg1657-unnamed +// cxx11-14-error@-1 {{attributes on a namespace declaration are a C++17 extension}} +namespace [[]] {} +// cxx11-14-error@-1 {{attributes on a namespace declaration are a C++17 extension}} +// since-cxx11-warning@-2 {{inline namespace reopened as a non-inline namespace}} +// since-cxx11-note@#cwg1657-unnamed {{previous definition is here}} + +inline namespace [[]] N {} +// cxx11-14-error@-1 {{attributes on a namespace declaration are a C++17 extension}} + +namespace [[]] M {} +// cxx11-14-error@-1 {{attributes on a namespace declaration are a C++17 extension}} +#endif +} // namespace cwg1657 + namespace cwg1658 { // cwg1658: 5 namespace DefCtor { class A { A(); }; // #cwg1658-A1 diff --git a/clang/test/CXX/drs/cwg17xx.cpp b/clang/test/CXX/drs/cwg17xx.cpp index 62ea94c4c21733..96280e0ee08a81 100644 --- a/clang/test/CXX/drs/cwg17xx.cpp +++ b/clang/test/CXX/drs/cwg17xx.cpp @@ -264,3 +264,14 @@ template auto GLL::operator()<int>(int a) const -> int; #endif } // namespace cwg1780 + +namespace cwg1795 { // cwg1975: 2.7 +namespace N { + struct S{}; // #cwg1795-S +} +namespace N { + struct S{}; + // expected-error@-1 {{redefinition of 'S'}} + // expected-note@#cwg1795-S {{previous definition is here}} +} +} // namespace cwg1795 diff --git a/clang/test/CXX/drs/cwg1xx.cpp b/clang/test/CXX/drs/cwg1xx.cpp index e85adff7bb7fba..3bd8cd4c2f5265 100644 --- a/clang/test/CXX/drs/cwg1xx.cpp +++ b/clang/test/CXX/drs/cwg1xx.cpp @@ -1005,10 +1005,9 @@ namespace cwg165 { // cwg165: no struct A { friend struct B; }; void f() { void g(); } } - // FIXME: cwg1477 says this is ok, cwg165 says it's ill-formed struct N::B {}; - // FIXME: cwg165 says this is ill-formed, but the argument in cwg1477 says it's ok void N::g() {} + // FIXME-error@-1 {{'g' is not nominable in 'N'}} } // namespace cwg165 namespace cwg166 { // cwg166: 2.9 diff --git a/clang/test/CXX/drs/cwg8xx.cpp b/clang/test/CXX/drs/cwg8xx.cpp index b512411bdf27b7..688cd0ee27264c 100644 --- a/clang/test/CXX/drs/cwg8xx.cpp +++ b/clang/test/CXX/drs/cwg8xx.cpp @@ -6,6 +6,30 @@ // RUN: %clang_cc1 -std=c++23 -triple x86_64-unknown-unknown %s -fexceptions -fcxx-exceptions -pedantic-errors -verify-directives -verify=expected,since-cxx20,since-cxx11 // RUN: %clang_cc1 -std=c++2c -triple x86_64-unknown-unknown %s -fexceptions -fcxx-exceptions -pedantic-errors -verify-directives -verify=expected,since-cxx20,since-cxx11 +namespace cwg812 { // cwg812: 2.8 +#if __cplusplus >= 201103L +namespace Q { + inline namespace V1 { + int i = 1; // #cwg812-v1-i + int j = 1; // #cwg812-v1-j + } + inline namespace V2 { + int j = 2; // #cwg812-v2-j + } + int i = 0; // #cwg812-Q-i +} + +static_assert(Q::i, ""); +// since-cxx11-error@-1 {{reference to 'i' is ambiguous}} +// since-cxx11-note@#cwg812-v1-i {{candidate found by name lookup is 'cwg812::Q::V1::i'}} +// since-cxx11-note@#cwg812-Q-i {{candidate found by name lookup is 'cwg812::Q::i'}} +static_assert(Q::j, ""); +// since-cxx11-error@-1 {{reference to 'j' is ambiguous}} +// since-cxx11-note@#cwg812-v1-j {{candidate found by name lookup is 'cwg812::Q::V1::j'}} +// since-cxx11-note@#cwg812-v2-j {{candidate found by name lookup is 'cwg812::Q::V2::j'}} +#endif +} // namespace cwg812 + namespace cwg820 { // cwg820: 2.7 export template <class T> struct B {}; // cxx98-17-warning@-1 {{exported templates are unsupported}} @@ -15,6 +39,22 @@ export template<typename T> void f() {} // since-cxx20-error@-2 {{export declaration can only be used within a module interface}} } // namespace cwg820 +namespace cwg861 { // cwg861: 2.7 +#if __cplusplus >= 201103L +namespace A { + inline namespace B { + namespace C { + constexpr int i = 0; + } + using namespace C; + } + constexpr int i = 1; +} + +static_assert(A::i == 1, ""); +#endif +} // namespace cwg861 + namespace cwg873 { // cwg873: 3.0 #if __cplusplus >= 201103L template <typename T> void f(T &&); diff --git a/clang/test/CXX/drs/cwg9xx.cpp b/clang/test/CXX/drs/cwg9xx.cpp index f218ecddb9686d..2826a69cebcd74 100644 --- a/clang/test/CXX/drs/cwg9xx.cpp +++ b/clang/test/CXX/drs/cwg9xx.cpp @@ -15,6 +15,52 @@ namespace std { }; } // namespace std +namespace cwg919 { // cwg919: 2.7 +#if __cplusplus >= 201103L +namespace N { + inline namespace M { + template <typename, typename> + struct S; + + template <typename> + void f(); + } +} + +template <> +struct N::S<int, int> {}; + +template <typename T> +struct N::S<float, T> {}; + +template <> +void N::f<int>() {} +#endif +} // namespace cwg919 + +namespace cwg921 { // cwg921: 3.1 +#if __cplusplus >= 201103L +namespace N { + struct S {}; + inline namespace M { + int f(S); + } +} +int i = f(N::S{}); +#endif +} // namespace cwg921 + +namespace cwg926 { // cwg926: 2.8 +#if __cplusplus >= 201103L +namespace N { + inline namespace { + struct S {}; + } +} +N::S s; +#endif +} // namespace cwg926 + namespace cwg930 { // cwg930: 2.7 #if __cplusplus >= 201103L static_assert(alignof(int[]) == alignof(int), ""); @@ -207,6 +253,24 @@ enum struct E4 : int { e = static_cast<int>(E4()) }; #endif } // namespace cwg977 +namespace cwg986 { // cwg986: 2.7 +namespace A { + int f(); // #cwg986-A-f +} +namespace B { + using namespace A; + int f(); // #cwg986-B-f +} +namespace C { + using namespace B; + int i = C::f(); + int j = f(); + // expected-error@-1 {{call to 'f' is ambiguous}} + // expected-note@#cwg986-A-f {{candidate function}} + // expected-note@#cwg986-B-f {{candidate function}} +} +} // namespace cwg986 + namespace cwg988 { // cwg988: 2.7 #if __cplusplus >= 201103L void f(int& lvalue_ref, int&& rvalue_ref) { >From 3c848a254bd1800e4c22367c859079b3f741f1ea Mon Sep 17 00:00:00 2001 From: Vlad Serebrennikov <[email protected]> Date: Fri, 30 Oct 2026 12:06:32 +0300 Subject: [PATCH 2/5] Fix CWG1012 test --- clang/test/CXX/drs/cwg10xx.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/test/CXX/drs/cwg10xx.cpp b/clang/test/CXX/drs/cwg10xx.cpp index cdca0ff35a82d4..19436f610a2264 100644 --- a/clang/test/CXX/drs/cwg10xx.cpp +++ b/clang/test/CXX/drs/cwg10xx.cpp @@ -48,7 +48,7 @@ namespace cwg1004 { // cwg1004: 5 } // namespace cwg1004 namespace cwg1012 { // cwg1012: 2.7 -static void f() {} +static int f; } // namespace cwg1012 namespace cwg1042 { // cwg1042: 3.5 >From ff6782aa42b510948491b3a3fcd0aecea6de0c32 Mon Sep 17 00:00:00 2001 From: Vlad Serebrennikov <[email protected]> Date: Fri, 30 Oct 2026 12:29:56 +0300 Subject: [PATCH 3/5] Make sure that CWG1439 checks that friendship was granted --- clang/test/CXX/drs/cwg14xx.cpp | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/clang/test/CXX/drs/cwg14xx.cpp b/clang/test/CXX/drs/cwg14xx.cpp index c082cc62c827aa..dcc88e76437832 100644 --- a/clang/test/CXX/drs/cwg14xx.cpp +++ b/clang/test/CXX/drs/cwg14xx.cpp @@ -113,17 +113,19 @@ namespace cwg1432 { // cwg1432: 16 open 2022-11-11 namespace cwg1439 { // cwg1439: 2.7 class A { template <typename> - friend void f(); + friend int f(); template <typename> friend struct B; + + static int private_i; }; -void (*p1)() = &f<int>; +int (*p1)() = &f<int>; // expected-error@-1 {{use of undeclared identifier 'f'}} // FIXME: only the first error is relevant, others are noise -void (*p2)() = &cwg1439::f<int>; +int (*p2)() = &cwg1439::f<int>; // expected-error@-1 {{no member named 'f' in namespace 'cwg1439'}} // expected-error@-2 {{expected '(' for function-style cast or type construction}} // expected-error@-3 {{expected expression}} @@ -135,13 +137,15 @@ cwg1439::B<int>* p4; // expected-error@-1 {{no template named 'B' in namespace 'cwg1439'}} template <typename> -void f(); +int f() { return A::private_i; } template <typename> -struct B; +struct B { + int i = A::private_i; +}; -void (*p5)() = &f<int>; -void (*p6)() = &cwg1439::f<int>; +int (*p5)() = &f<int>; +int (*p6)() = &cwg1439::f<int>; B<int>* p7; cwg1439::B<int>* p8; } // namespace cwg1439 >From 21742e25790de4ef2d7a105ce2e0309b887ff9f9 Mon Sep 17 00:00:00 2001 From: Vlad Serebrennikov <[email protected]> Date: Fri, 30 Oct 2026 13:21:45 +0300 Subject: [PATCH 4/5] Add test for CWG987 --- clang/test/CXX/drs/cwg14xx.cpp | 4 +++- clang/test/CXX/drs/cwg17xx.cpp | 25 +++++++++++++++++----- clang/test/CXX/drs/cwg9xx.cpp | 39 +++++++++++++++++++++++++++++++++- clang/www/cxx_dr_status.html | 24 ++++++++++----------- 4 files changed, 73 insertions(+), 19 deletions(-) diff --git a/clang/test/CXX/drs/cwg14xx.cpp b/clang/test/CXX/drs/cwg14xx.cpp index dcc88e76437832..7e81681e5aeb42 100644 --- a/clang/test/CXX/drs/cwg14xx.cpp +++ b/clang/test/CXX/drs/cwg14xx.cpp @@ -141,7 +141,9 @@ int f() { return A::private_i; } template <typename> struct B { - int i = A::private_i; + int g() { + return A::private_i; + } }; int (*p5)() = &f<int>; diff --git a/clang/test/CXX/drs/cwg17xx.cpp b/clang/test/CXX/drs/cwg17xx.cpp index 96280e0ee08a81..26913154f98b91 100644 --- a/clang/test/CXX/drs/cwg17xx.cpp +++ b/clang/test/CXX/drs/cwg17xx.cpp @@ -1,7 +1,7 @@ // RUN: %clang_cc1 -std=c++98 %s -fexceptions -fcxx-exceptions -pedantic-errors -verify-directives -verify=expected -// RUN: %clang_cc1 -std=c++11 %s -fexceptions -fcxx-exceptions -pedantic-errors -verify-directives -verify=expected,since-cxx11 -// RUN: %clang_cc1 -std=c++14 %s -fexceptions -fcxx-exceptions -pedantic-errors -verify-directives -verify=expected,since-cxx11 -// RUN: %clang_cc1 -std=c++17 %s -fexceptions -fcxx-exceptions -pedantic-errors -verify-directives -verify=expected,since-cxx11 +// RUN: %clang_cc1 -std=c++11 %s -fexceptions -fcxx-exceptions -pedantic-errors -verify-directives -verify=expected,since-cxx11,cxx11-17 +// RUN: %clang_cc1 -std=c++14 %s -fexceptions -fcxx-exceptions -pedantic-errors -verify-directives -verify=expected,since-cxx11,cxx11-17 +// RUN: %clang_cc1 -std=c++17 %s -fexceptions -fcxx-exceptions -pedantic-errors -verify-directives -verify=expected,since-cxx11,cxx11-17 // RUN: %clang_cc1 -std=c++20 %s -fexceptions -fcxx-exceptions -pedantic-errors -verify-directives -verify=expected,since-cxx11 // RUN: %clang_cc1 -std=c++23 %s -fexceptions -fcxx-exceptions -pedantic-errors -verify-directives -verify=expected,since-cxx11 // RUN: %clang_cc1 -std=c++2c %s -fexceptions -fcxx-exceptions -pedantic-errors -verify-directives -verify=expected,since-cxx11 @@ -119,6 +119,21 @@ template B::B(int, double); // cwg1739: na +namespace cwg1742 { // cwg1742: 13 +#if __cplusplus >= 201103L +enum struct E { + one +}; +using E::one; +// cxx11-17-error@-1 {{using declaration naming a scoped enumerator is a C++20 extension}} +struct S { + using E::one; + // cxx11-17-error@-1 {{using declaration naming a scoped enumerator is a C++20 extension}} + // cxx11-17-error@-2 {{using declaration in class refers into 'E', which is not a class}} +}; +#endif +} // namespace cwg1742 + // cwg1748 is in cwg1748.cpp namespace cwg1753 { // cwg1753: 11 @@ -267,10 +282,10 @@ template auto GLL::operator()<int>(int a) const -> int; namespace cwg1795 { // cwg1975: 2.7 namespace N { - struct S{}; // #cwg1795-S + struct S {}; // #cwg1795-S } namespace N { - struct S{}; + struct S {}; // expected-error@-1 {{redefinition of 'S'}} // expected-note@#cwg1795-S {{previous definition is here}} } diff --git a/clang/test/CXX/drs/cwg9xx.cpp b/clang/test/CXX/drs/cwg9xx.cpp index 2826a69cebcd74..1917748c8b0391 100644 --- a/clang/test/CXX/drs/cwg9xx.cpp +++ b/clang/test/CXX/drs/cwg9xx.cpp @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -std=c++98 %s -fexceptions -fcxx-exceptions -pedantic-errors -verify-directives -verify=expected +// RUN: %clang_cc1 -std=c++98 %s -fexceptions -fcxx-exceptions -pedantic-errors -verify-directives -verify=expected,cxx98 // RUN: %clang_cc1 -std=c++11 %s -fexceptions -fcxx-exceptions -pedantic-errors -verify-directives -verify=expected,since-cxx11 // RUN: %clang_cc1 -std=c++14 %s -fexceptions -fcxx-exceptions -pedantic-errors -verify-directives -verify=expected,since-cxx11 // RUN: %clang_cc1 -std=c++17 %s -fexceptions -fcxx-exceptions -pedantic-errors -verify-directives -verify=expected,since-cxx11 @@ -271,6 +271,43 @@ namespace C { } } // namespace cwg986 +namespace cwg987 { // cwg987: 2.7 +namespace N { + template <typename, typename> + struct S; // #cwg987-S + + template <typename> + int f(); // #cwg987-f +} + +template <> +struct N::S<int, int> {}; + +template <typename T> +struct N::S<float, T> {}; + +template <> +int N::f<int>() { return 0; } + +S<int, int> s1; +// expected-error@-1 {{no template named 'S'; did you mean 'N::S'?}} +// expected-note@#cwg987-S {{'N::S' declared here}} +cwg987::S<int, int> s2; +// expected-error@-1 {{no template named 'S' in namespace 'cwg987'; did you mean 'N::S'?}} +// expected-note@#cwg987-S {{'N::S' declared here}} + +int (*p1)() = &f<int>; +// since-cxx11-error@-1 {{use of undeclared identifier 'f'}} +// cxx98-error@-2 {{use of undeclared identifier 'f'; did you mean 'N::f'?}} +// cxx98-note@#cwg987-f {{'N::f' declared here}} +int (*p2)() = &cwg987::f<int>; +// since-cxx11-error@-1 {{no member named 'f' in namespace 'cwg987'}} +// since-cxx11-error@-2 {{expected '(' for function-style cast or type construction}} +// since-cxx11-error@-3 {{expected expression}} +// cxx98-error@-4 {{no template named 'f' in namespace 'cwg987'; did you mean 'N::f'?}} +// cxx98-note@#cwg987-f {{'N::f' declared here}} +} // namespace cwg987 + namespace cwg988 { // cwg988: 2.7 #if __cplusplus >= 201103L void f(int& lvalue_ref, int&& rvalue_ref) { diff --git a/clang/www/cxx_dr_status.html b/clang/www/cxx_dr_status.html index 31f4e026353961..319e16af5c9301 100755 --- a/clang/www/cxx_dr_status.html +++ b/clang/www/cxx_dr_status.html @@ -5678,7 +5678,7 @@ <h2 id="cxxdr">C++ defect report implementation status</h2> <td>[<a href="https://wg21.link/namespace.def">namespace.def</a>]</td> <td>CD2</td> <td>Duplicate names in inline namespaces</td> - <td class="unknown" align="center">Unknown</td> + <td class="full" align="center">Clang 2.8</td> </tr> <tr class="open" id="813"> <td><a href="https://cplusplus.github.io/CWG/issues/813.html">813</a></td> @@ -5923,7 +5923,7 @@ <h2 id="cxxdr">C++ defect report implementation status</h2> <td>[<a href="https://wg21.link/namespace.qual">namespace.qual</a>]</td> <td>CD2</td> <td>Unintended ambiguity in inline namespace lookup</td> - <td class="unknown" align="center">Unknown</td> + <td class="full" align="center">Clang 2.7</td> </tr> <tr id="862"> <td><a href="https://cplusplus.github.io/CWG/issues/862.html">862</a></td> @@ -6210,7 +6210,7 @@ <h2 id="cxxdr">C++ defect report implementation status</h2> <td>[<a href="https://wg21.link/namespace.def">namespace.def</a>]</td> <td>CD2</td> <td>Contradictions regarding inline namespaces</td> - <td class="unknown" align="center">Unknown</td> + <td class="full" align="center">Clang 2.7</td> </tr> <tr id="920"> <td><a href="https://cplusplus.github.io/CWG/issues/920.html">920</a></td> @@ -6224,7 +6224,7 @@ <h2 id="cxxdr">C++ defect report implementation status</h2> <td>[<a href="https://wg21.link/namespace.def">namespace.def</a>]</td> <td>CD2</td> <td>Unclear specification of inline namespaces</td> - <td class="unknown" align="center">Unknown</td> + <td class="full" align="center">Clang 3.1</td> </tr> <tr id="922"> <td><a href="https://cplusplus.github.io/CWG/issues/922.html">922</a></td> @@ -6259,7 +6259,7 @@ <h2 id="cxxdr">C++ defect report implementation status</h2> <td>[<a href="https://wg21.link/namespace.unnamed">namespace.unnamed</a>]</td> <td>CD2</td> <td>Inline unnamed namespaces</td> - <td class="unknown" align="center">Unknown</td> + <td class="full" align="center">Clang 2.8</td> </tr> <tr id="927"> <td><a href="https://cplusplus.github.io/CWG/issues/927.html">927</a></td> @@ -6679,14 +6679,14 @@ <h2 id="cxxdr">C++ defect report implementation status</h2> <td>[<a href="https://wg21.link/namespace.udir">namespace.udir</a>]</td> <td>CD2</td> <td>Transitivity of <I>using-directive</I>s versus qualified lookup</td> - <td class="unknown" align="center">Unknown</td> + <td class="full" align="center">Clang 2.7</td> </tr> <tr id="987"> <td><a href="https://cplusplus.github.io/CWG/issues/987.html">987</a></td> <td>[<a href="https://wg21.link/basic.namespace">basic.namespace</a>]</td> <td>CD4</td> <td>Which declarations introduce namespace members?</td> - <td class="unknown" align="center">Unknown</td> + <td class="full" align="center">Clang 2.7</td> </tr> <tr id="988"> <td><a href="https://cplusplus.github.io/CWG/issues/988.html">988</a></td> @@ -6861,7 +6861,7 @@ <h2 id="cxxdr">C++ defect report implementation status</h2> <td>[<a href="https://wg21.link/namespace.unnamed">namespace.unnamed</a>]</td> <td>C++11</td> <td>Undeprecating <TT>static</TT></td> - <td class="unknown" align="center">Unknown</td> + <td class="full" align="center">Clang 2.7</td> </tr> <tr id="1013"> <td><a href="https://cplusplus.github.io/CWG/issues/1013.html">1013</a></td> @@ -7316,7 +7316,7 @@ <h2 id="cxxdr">C++ defect report implementation status</h2> <td>[<a href="https://wg21.link/namespace.memdef">namespace.memdef</a>]</td> <td>NAD</td> <td>Explicit specializations in non-containing namespaces</td> - <td class="unknown" align="center">Unknown</td> + <td class="full" align="center">Clang 2.7</td> </tr> <tr id="1078"> <td><a href="https://cplusplus.github.io/CWG/issues/1078.html">1078</a></td> @@ -9854,7 +9854,7 @@ <h2 id="cxxdr">C++ defect report implementation status</h2> <td>[<a href="https://wg21.link/namespace.memdef">namespace.memdef</a>]</td> <td>CD3</td> <td>Lookup and friend template declarations</td> - <td class="unknown" align="center">Unknown</td> + <td class="full" align="center">Clang 2.7</td> </tr> <tr id="1440"> <td><a href="https://cplusplus.github.io/CWG/issues/1440.html">1440</a></td> @@ -11384,7 +11384,7 @@ <h2 id="cxxdr">C++ defect report implementation status</h2> <td>[<a href="https://wg21.link/namespace.def">namespace.def</a>]</td> <td>CD4</td> <td>Attributes for namespaces and enumerators</td> - <td class="unknown" align="center">Unknown</td> + <td class="full" align="center">Clang 3.6</td> </tr> <tr id="1658"> <td><a href="https://cplusplus.github.io/CWG/issues/1658.html">1658</a></td> @@ -12350,7 +12350,7 @@ <h2 id="cxxdr">C++ defect report implementation status</h2> <td>[<a href="https://wg21.link/namespace.def">namespace.def</a>]</td> <td>CD4</td> <td>Disambiguating <I>original-namespace-definition</I> and <I>extension-namespace-definition</I></td> - <td class="unknown" align="center">Unknown</td> + <td class="full" align="center">Clang 2.7</td> </tr> <tr id="1796"> <td><a href="https://cplusplus.github.io/CWG/issues/1796.html">1796</a></td> >From 7acb3d40d0995529789242a1039433777c216708 Mon Sep 17 00:00:00 2001 From: Vlad Serebrennikov <[email protected]> Date: Fri, 30 Oct 2026 16:38:01 +0300 Subject: [PATCH 5/5] Add missing RUN line changes to cwg16xx.cpp --- clang/test/CXX/drs/cwg16xx.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/clang/test/CXX/drs/cwg16xx.cpp b/clang/test/CXX/drs/cwg16xx.cpp index eedb50ca954f9a..02cc8e24f139a9 100644 --- a/clang/test/CXX/drs/cwg16xx.cpp +++ b/clang/test/CXX/drs/cwg16xx.cpp @@ -1,6 +1,6 @@ // RUN: %clang_cc1 -std=c++98 -triple x86_64-unknown-unknown %s -fexceptions -fcxx-exceptions -pedantic-errors -verify-directives -verify=expected,cxx98-14,cxx98 -// RUN: %clang_cc1 -std=c++11 -triple x86_64-unknown-unknown %s -fexceptions -fcxx-exceptions -pedantic-errors -verify-directives -verify=expected,cxx11-20,cxx98-14,since-cxx11,cxx11 -// RUN: %clang_cc1 -std=c++14 -triple x86_64-unknown-unknown %s -fexceptions -fcxx-exceptions -pedantic-errors -verify-directives -verify=expected,cxx11-20,since-cxx14,cxx98-14,since-cxx11 +// RUN: %clang_cc1 -std=c++11 -triple x86_64-unknown-unknown %s -fexceptions -fcxx-exceptions -pedantic-errors -verify-directives -verify=expected,cxx11-20,cxx11-14,cxx98-14,since-cxx11,cxx11 +// RUN: %clang_cc1 -std=c++14 -triple x86_64-unknown-unknown %s -fexceptions -fcxx-exceptions -pedantic-errors -verify-directives -verify=expected,cxx11-20,cxx11-14,since-cxx14,cxx98-14,since-cxx11 // RUN: %clang_cc1 -std=c++17 -triple x86_64-unknown-unknown %s -fexceptions -fcxx-exceptions -pedantic-errors -verify-directives -verify=expected,cxx11-20,since-cxx14,since-cxx17,since-cxx11 // RUN: %clang_cc1 -std=c++20 -triple x86_64-unknown-unknown %s -fexceptions -fcxx-exceptions -pedantic-errors -verify-directives -verify=expected,cxx11-20,since-cxx14,since-cxx20,since-cxx17,since-cxx11 // RUN: %clang_cc1 -std=c++23 -triple x86_64-unknown-unknown %s -fexceptions -fcxx-exceptions -pedantic-errors -verify-directives -verify=expected,since-cxx23,since-cxx14,since-cxx20,since-cxx17,since-cxx11 _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
