c++: Allow attributes on concepts - DR 2428

The following patch adds parsing of attributes to concept definition,
allows deprecated attribute to be specified (as CONCEPT_DECL now needs
to be checked in c-family/c-attribs.cc, I had to move its declaration
from cp/*.def to c-family/*.def) and checks TREE_DEPRECATED in
build_standard_check (not sure if that is the right spot, or whether
it shouldn't be checked also for variable and function concepts and
how to write testcase coverage for that).

2022-11-16  Jakub Jelinek  <jakub@redhat.com>

gcc/c-family/
	* c-common.def (CONCEPT_DECL): New tree, moved here from
	cp-tree.def.
	* c-common.cc (c_common_init_ts): Handle CONCEPT_DECL.
	* c-attribs.cc (handle_deprecated_attribute): Allow deprecated
	attribute on CONCEPT_DECL.
gcc/cp/
	* cp-tree.def (CONCEPT_DECL): Move to c-common.def.
	* cp-objcp-common.cc (cp_common_init_ts): Don't handle CONCEPT_DECL
	here.
	* cp-tree.h (finish_concept_definition): Add ATTRS parameter.
	* parser.cc (cp_parser_concept_definition): Parse attributes in
	between identifier and =.  Adjust finish_concept_definition
	caller.
	* pt.cc (finish_concept_definition): Add ATTRS parameter.  Call
	cplus_decl_attributes.
	* constraint.cc (build_standard_check): If CONCEPT_DECL is
	TREE_DEPRECATED, emit -Wdeprecated-declaration warnings.
gcc/testsuite/
	* g++.dg/cpp2a/concepts-dr2428.C: New test.
10 files changed