c++: P0847R7 (deducing this) - xobj lambdas. [PR102609]
commit07d09f0af100a9873982fba663800d87bfd73585
authorwaffl3x <waffl3x@protonmail.com>
Sun, 7 Jan 2024 00:53:32 +0000 (7 00:53 +0000)
committerJason Merrill <jason@redhat.com>
Tue, 9 Jan 2024 20:59:04 +0000 (9 15:59 -0500)
treec6895f013844012394f132c662211fd1c324591c
parentf8bf6a69e260a5f1aa0dbf89a6e4bcdf1a24af5d
c++: P0847R7 (deducing this) - xobj lambdas. [PR102609]

This implements support for xobj lambdas.  There are extensive tests
included, but not exhaustive.  Dependent lambdas should work and have been
tested lightly, but we need more exhaustive tests for them.

PR c++/102609

gcc/cp/ChangeLog:

PR c++/102609
C++23 P0847R7 (deducing this) - xobj lambdas.
* lambda.cc (build_capture_proxy): Don't fold direct object types.
* parser.cc (cp_parser_lambda_declarator_opt): Handle xobj lambdas,
diagnostics.  Comments also updated.
* pt.cc (tsubst_function_decl): Handle xobj lambdas.  Check object
type of xobj lambda call operator, diagnose incorrect types.
(tsubst_lambda_expr): Update comment.
* semantics.cc (finish_decltype_type): Also consider by-value object
parameter qualifications.

gcc/testsuite/ChangeLog:

PR c++/102609
C++23 P0847R7 (deducing this) - xobj lambdas.
* g++.dg/cpp23/explicit-obj-diagnostics8.C: New test.
* g++.dg/cpp23/explicit-obj-lambda1.C: New test.
* g++.dg/cpp23/explicit-obj-lambda10.C: New test.
* g++.dg/cpp23/explicit-obj-lambda11.C: New test.
* g++.dg/cpp23/explicit-obj-lambda12.C: New test.
* g++.dg/cpp23/explicit-obj-lambda13.C: New test.
* g++.dg/cpp23/explicit-obj-lambda2.C: New test.
* g++.dg/cpp23/explicit-obj-lambda3.C: New test.
* g++.dg/cpp23/explicit-obj-lambda4.C: New test.
* g++.dg/cpp23/explicit-obj-lambda5.C: New test.
* g++.dg/cpp23/explicit-obj-lambda6.C: New test.
* g++.dg/cpp23/explicit-obj-lambda7.C: New test.
* g++.dg/cpp23/explicit-obj-lambda8.C: New test.
* g++.dg/cpp23/explicit-obj-lambda9.C: New test.

Signed-off-by: Waffl3x <waffl3x@protonmail.com>
18 files changed:
gcc/cp/lambda.cc
gcc/cp/parser.cc
gcc/cp/pt.cc
gcc/cp/semantics.cc
gcc/testsuite/g++.dg/cpp23/explicit-obj-diagnostics8.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp23/explicit-obj-lambda1.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp23/explicit-obj-lambda10.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp23/explicit-obj-lambda11.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp23/explicit-obj-lambda12.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp23/explicit-obj-lambda13.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp23/explicit-obj-lambda2.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp23/explicit-obj-lambda3.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp23/explicit-obj-lambda4.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp23/explicit-obj-lambda5.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp23/explicit-obj-lambda6.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp23/explicit-obj-lambda7.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp23/explicit-obj-lambda8.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp23/explicit-obj-lambda9.C [new file with mode: 0644]