diff options
author | Jakub Jelinek <jakub@redhat.com> | 2022-11-16 07:37:05 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@redhat.com> | 2022-11-16 07:37:05 +0100 |
commit | 7f014022861b5b3f00be9bb32fe3fe772517ddac (patch) | |
tree | ed009c2de327bf023de96fb16d0e71d14c749985 /gcc/c-family/c-common.cc | |
parent | 7c6cd9c05efca29a1a9635b81c86cbad25bbdbbe (diff) | |
download | gcc-7f014022861b5b3f00be9bb32fe3fe772517ddac.zip gcc-7f014022861b5b3f00be9bb32fe3fe772517ddac.tar.gz gcc-7f014022861b5b3f00be9bb32fe3fe772517ddac.tar.bz2 |
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.
Diffstat (limited to 'gcc/c-family/c-common.cc')
-rw-r--r-- | gcc/c-family/c-common.cc | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/gcc/c-family/c-common.cc b/gcc/c-family/c-common.cc index 71507d4..6f1f21b 100644 --- a/gcc/c-family/c-common.cc +++ b/gcc/c-family/c-common.cc @@ -8497,6 +8497,8 @@ c_common_init_ts (void) MARK_TS_EXP (FOR_STMT); MARK_TS_EXP (SWITCH_STMT); MARK_TS_EXP (WHILE_STMT); + + MARK_TS_DECL_COMMON (CONCEPT_DECL); } /* Build a user-defined numeric literal out of an integer constant type VALUE |