Skip to content

Commit

Permalink
Reland "[clang] Add tests for CWG issues 977, 1482, 2516"
Browse files Browse the repository at this point in the history
Now with support for MSVC-specific triples.

CWG977 focus on point of /completeness/ of enums. Wording provided in CWG1482.
CWG1482 and CWG2516 focus on locus (point) of /declaration/. Wording provided in CWG2516.

Reviewed By: clang-language-wg, shafik

Differential Revision: https://reviews.llvm.org/D151042
  • Loading branch information
Endilll committed May 23, 2023
1 parent 478e392 commit 1c5a749
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 3 deletions.
11 changes: 11 additions & 0 deletions clang/test/CXX/drs/dr14xx.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -488,6 +488,17 @@ namespace dr1479 { // dr1479: yes
int operator"" _a(const char*, std::size_t = 0); // expected-error {{literal operator cannot have a default argument}}
}

namespace dr1482 { // dr1482: yes
// NB: sup 2516, test reused there
#if __cplusplus >= 201103L
template <typename T> struct S {
typedef char I;
};
enum E2 : S<E2>::I { e };
// expected-error@-1 {{use of undeclared identifier 'E2'}}
#endif
} // namespace dr1482

namespace dr1490 { // dr1490: 3.7 c++11
// List-initialization from a string literal

Expand Down
11 changes: 11 additions & 0 deletions clang/test/CXX/drs/dr25xx.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,16 @@
// RUN: %clang_cc1 -std=c++20 -triple x86_64-unknown-unknown %s -verify

namespace dr2516 { // dr2516: yes
// NB: reusing 1482 test
#if __cplusplus >= 201103L
template <typename T> struct S {
typedef char I;
};
enum E2 : S<E2>::I { e };
// expected-error@-1 {{use of undeclared identifier 'E2'}}
#endif
} // namespace dr2516

namespace dr2518 { // dr2518: 17

template <class T>
Expand Down
13 changes: 13 additions & 0 deletions clang/test/CXX/drs/dr9xx.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,19 @@ namespace dr974 { // dr974: yes
#endif
}

namespace dr977 { // dr977: yes
enum E { e = E() };
#ifndef _WIN32
// expected-error@-2 {{invalid use of incomplete type 'E'}}
// expected-note@-3 {{definition of 'dr977::E' is not complete until the closing '}'}}
#endif
#if __cplusplus >= 201103L
enum E2 : int { e2 = E2() };
enum struct E3 { e = static_cast<int>(E3()) };
enum struct E4 : int { e = static_cast<int>(E4()) };
#endif
} // namespace dr977

namespace dr990 { // dr990: 3.5
#if __cplusplus >= 201103L
struct A { // expected-note 2{{candidate}}
Expand Down
6 changes: 3 additions & 3 deletions clang/www/cxx_dr_status.html
Original file line number Diff line number Diff line change
Expand Up @@ -5669,7 +5669,7 @@ <h2 id="cxxdr">C++ defect report implementation status</h2>
<td><a href="https://cplusplus.github.io/CWG/issues/977.html">977</a></td>
<td>CD3</td>
<td>When is an enumeration type complete?</td>
<td class="none" align="center">Unknown</td>
<td class="full" align="center">Yes</td>
</tr>
<tr id="978">
<td><a href="https://cplusplus.github.io/CWG/issues/978.html">978</a></td>
Expand Down Expand Up @@ -8699,7 +8699,7 @@ <h2 id="cxxdr">C++ defect report implementation status</h2>
<td><a href="https://cplusplus.github.io/CWG/issues/1482.html">1482</a></td>
<td>CD3</td>
<td>Point of declaration of enumeration</td>
<td class="none" align="center">Unknown</td>
<td class="full" align="center">Yes</td>
</tr>
<tr id="1483">
<td><a href="https://cplusplus.github.io/CWG/issues/1483.html">1483</a></td>
Expand Down Expand Up @@ -14903,7 +14903,7 @@ <h2 id="cxxdr">C++ defect report implementation status</h2>
<td><a href="https://cplusplus.github.io/CWG/issues/2516.html">2516</a></td>
<td>DR</td>
<td>Locus of <I>enum-specifier</I> or <I>opaque-enum-declaration</I></td>
<td class="none" align="center">Unknown</td>
<td class="full" align="center">Yes</td>
</tr>
<tr id="2517">
<td><a href="https://cplusplus.github.io/CWG/issues/2517.html">2517</a></td>
Expand Down

0 comments on commit 1c5a749

Please sign in to comment.