public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r12-7598] c++: allow variadic operator[] for C++23 [PR103460]
@ 2022-03-10 14:28 Jakub Jelinek
0 siblings, 0 replies; only message in thread
From: Jakub Jelinek @ 2022-03-10 14:28 UTC (permalink / raw)
To: gcc-cvs
https://gcc.gnu.org/g:e46843ff75c37c705811e0c13bb469eda13b5f6c
commit r12-7598-ge46843ff75c37c705811e0c13bb469eda13b5f6c
Author: Jakub Jelinek <jakub@redhat.com>
Date: Thu Mar 10 15:28:20 2022 +0100
c++: allow variadic operator[] for C++23 [PR103460]
wg21.link/p2128 removed "with exactly one parameter" from over.sub
section. grok_op_properties has for that the last 2 lines in:
case OVL_OP_FLAG_BINARY:
if (arity != 2)
{
if (operator_code == ARRAY_REF && cxx_dialect >= cxx23)
break;
but unfortunately it isn't enough, we reject variadic operator[]
earlier. The following patch accepts variadic operator[] for C++23
too.
2022-03-10 Jakub Jelinek <jakub@redhat.com>
PR c++/103460
* decl.cc (grok_op_properties): Allow variadic operator[] for
C++23.
* g++.dg/cpp23/subscript7.C: New test.
Diff:
---
gcc/cp/decl.cc | 6 +++++-
gcc/testsuite/g++.dg/cpp23/subscript7.C | 17 +++++++++++++++++
2 files changed, 22 insertions(+), 1 deletion(-)
diff --git a/gcc/cp/decl.cc b/gcc/cp/decl.cc
index 58210905ee9..37d52d8f804 100644
--- a/gcc/cp/decl.cc
+++ b/gcc/cp/decl.cc
@@ -15214,6 +15214,9 @@ grok_op_properties (tree decl, bool complain)
if (!arg)
{
/* Variadic. */
+ if (operator_code == ARRAY_REF && cxx_dialect >= cxx23)
+ break;
+
error_at (loc, "%qD must not have variable number of arguments",
decl);
return false;
@@ -15289,7 +15292,8 @@ grok_op_properties (tree decl, bool complain)
}
/* There can be no default arguments. */
- for (tree arg = argtypes; arg != void_list_node; arg = TREE_CHAIN (arg))
+ for (tree arg = argtypes; arg && arg != void_list_node;
+ arg = TREE_CHAIN (arg))
if (TREE_PURPOSE (arg))
{
TREE_PURPOSE (arg) = NULL_TREE;
diff --git a/gcc/testsuite/g++.dg/cpp23/subscript7.C b/gcc/testsuite/g++.dg/cpp23/subscript7.C
new file mode 100644
index 00000000000..bb811974433
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp23/subscript7.C
@@ -0,0 +1,17 @@
+// PR c++/103460
+// { dg-do compile }
+// { dg-options "-std=c++23" }
+
+struct S {
+ int &operator[] (int, ...);
+} s;
+struct T {
+ int &operator[] (auto...);
+} t;
+struct U {
+ int &operator[] (...);
+} u;
+
+int a = s[1] + s[2, 1] + s[3, 2, 1] + s[4, 3, 2, 1]
+ + t[0.0] + t[nullptr, s, 42]
+ + u[] + u[42] + u[1.5L, 1LL];
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2022-03-10 14:28 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-03-10 14:28 [gcc r12-7598] c++: allow variadic operator[] for C++23 [PR103460] Jakub Jelinek
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).