c++: Don't emit deprecated warnings or unavailable errors on lambda declarations
authorJakub Jelinek <jakub@redhat.com>
Wed, 4 May 2022 08:07:36 +0000 (10:07 +0200)
committerJakub Jelinek <jakub@redhat.com>
Fri, 6 May 2022 09:55:43 +0000 (11:55 +0200)
commit8b26d0e28bb1875392f0689266a5f5f0a7737418
treeb8ede586d4c29092c2c34698a5f4254700c4b0ec
parentf2c2ebb9eed4fa38a3e56dad4a2339a989b11e87
c++: Don't emit deprecated warnings or unavailable errors on lambda declarations

On the following testcase, we emit deprecated warnings or unavailable errors
even on merge declarations of those lambdas (the dg-bogus directives), while
IMHO we should emit them only when something actually calls those lambdas.

The following patch temporarily disables that diagnostics during
maybe_add_lambda_conv_op.

PR2173R1 also says that ambiguity between attribute-specifier-seq at the
end of requires-clause and attribute-specifier-seq from lambda-expression
should be resolved to attribute-specifier-seq for the latter.  Do we need
to do anything about that?  I mean, can a valid requires-clause end with
an attribute-specifier-seq?  Say operator int [[]] is valid primary
expression, but requires operator int [[]] isn't valid, nor is
requires operator int, no?

2022-05-04  Jakub Jelinek  <jakub@redhat.com>

* lambda.cc: Include decl.h.
(maybe_add_lambda_conv_op): Temporarily override deprecated_state to
UNAVAILABLE_DEPRECATED_SUPPRESS.

* g++.dg/cpp23/lambda-attr1.C: New test.
* g++.dg/cpp23/lambda-attr2.C: New test.

(cherry picked from commit 1c8e9bed9b9d46d479b83ae05b334543f66961fb)
gcc/cp/lambda.cc
gcc/testsuite/g++.dg/cpp23/lambda-attr1.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp23/lambda-attr2.C [new file with mode: 0644]