Skip to content

[clang][NFC] Add test for CWG1898 "Use of “equivalent” in overload resolution" #113439

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Oct 25, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
83 changes: 83 additions & 0 deletions clang/test/CXX/drs/cwg18xx.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -640,3 +640,86 @@ namespace H {
struct S s;
}
}

namespace cwg1898 { // cwg1898: 2.7
void e(int) {} // #cwg1898-e
void e(int) {}
// expected-error@-1 {{redefinition of 'e'}}
// expected-note@#cwg1898-e {{previous definition is here}}

void e2(int) {}
void e2(long) {} // OK, different type

void f(int) {} // #cwg1898-f
void f(const int) {}
// expected-error@-1 {{redefinition of 'f'}}
// expected-note@#cwg1898-f {{previous definition is here}}

void g(int) {} // #cwg1898-g
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 {{previous definition is here}}

void h(int *) {} // #cwg1898-h
void h(int[]) {}
// expected-error@-1 {{redefinition of 'h'}}
// expected-note@#cwg1898-h {{previous definition is here}}

void h2(int *) {} // #cwg1898-h2
void h2(int[2]) {}
// expected-error@-1 {{redefinition of 'h2'}}
// expected-note@#cwg1898-h2 {{previous definition is here}}

void h3(int (*)[2]) {} // #cwg1898-h3
void h3(int [3][2]) {}
// expected-error@-1 {{redefinition of 'h3'}}
// expected-note@#cwg1898-h3 {{previous definition is here}}

void h4(int (*)[2]) {}
void h4(int [3][3]) {} // OK, differ in non-top-level extent of array

void i(int *) {}
void i(const int *) {} // OK, pointee cv-qualification is not discarded

void i2(int *) {} // #cwg1898-i2
void i2(int * const) {}
// expected-error@-1 {{redefinition of 'i2'}}
// expected-note@#cwg1898-i2 {{previous definition is here}}

void j(void(*)()) {} // #cwg1898-j
void j(void()) {}
// expected-error@-1 {{redefinition of 'j'}}
// expected-note@#cwg1898-j {{previous definition is here}}

void j2(void(int)) {} // #cwg1898-j2
void j2(void(const int)) {}
// expected-error@-1 {{redefinition of 'j2'}}
// expected-note@#cwg1898-j2 {{previous definition is here}}

struct A {
void k(int) {} // #cwg1898-k
void k(int) {}
// expected-error@-1 {{class member cannot be redeclared}}
// expected-note@#cwg1898-k {{previous definition is here}}
};

struct B : A {
void k(int) {} // OK, shadows A::k
};

void l() {}
void l(...) {}

#if __cplusplus >= 201103L
template <typename T>
void m(T) {}
template <typename... Ts>
void m(Ts...) {}

template <typename T, typename U>
void m2(T, U) {}
template <typename... Ts, typename U>
void m2(Ts..., U) {}
#endif
} // namespace cwg1898
2 changes: 1 addition & 1 deletion clang/www/cxx_dr_status.html
Original file line number Diff line number Diff line change
Expand Up @@ -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 &#8220;equivalent&#8221; 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>
Expand Down
Loading