diff options
author | JeanHeyd Meneide <phdofthehouse@gmail.com> | 2019-10-19 04:51:59 +0000 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2019-10-19 00:51:59 -0400 |
commit | 8ad0c477e888d34c8fc6dbcc008ef66505071d65 (patch) | |
tree | 9b2f5e5c5d3601b9c42221f4e30c262c62a681b4 /gcc/c-family/c-lex.c | |
parent | 9299523c9aad158f5276df2bfe777044bb144230 (diff) | |
download | gcc-8ad0c477e888d34c8fc6dbcc008ef66505071d65.zip gcc-8ad0c477e888d34c8fc6dbcc008ef66505071d65.tar.gz gcc-8ad0c477e888d34c8fc6dbcc008ef66505071d65.tar.bz2 |
Implement C++20 P1301 [[nodiscard("should have a reason")]].
2019-10-17 JeanHeyd Meneide <phdofthehouse@gmail.com>
gcc/
* escaped_string.h (escaped_string): New header.
* tree.c (escaped_string): Remove escaped_string class.
gcc/c-family
* c-lex.c (c_common_has_attribute): Update nodiscard value.
gcc/cp/
* tree.c (handle_nodiscard_attribute) Added C++2a nodiscard
string message.
(std_attribute_table) Increase nodiscard argument handling
max_length from 0 to 1.
* parser.c (cp_parser_check_std_attribute): Add requirement
that nodiscard only be seen once in attribute-list.
(cp_parser_std_attribute): Check that empty parenthesis lists are
not specified for attributes that have max_length > 0 (e.g.
[[attr()]]).
* cvt.c (maybe_warn_nodiscard): Add nodiscard message to
output, if applicable.
(convert_to_void): Allow constructors to be nodiscard-able (P1771).
gcc/testsuite/g++.dg/cpp0x
* gen-attrs-67.C: Test new error message for empty-parenthesis-list.
gcc/testsuite/g++.dg/cpp2a
* nodiscard-construct.C: New test.
* nodiscard-once.C: New test.
* nodiscard-reason-nonstring.C: New test.
* nodiscard-reason-only-one.C: New test.
* nodiscard-reason.C: New test.
Reviewed-by: Jason Merrill <jason@redhat.com>
From-SVN: r277200
Diffstat (limited to 'gcc/c-family/c-lex.c')
-rw-r--r-- | gcc/c-family/c-lex.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/gcc/c-family/c-lex.c b/gcc/c-family/c-lex.c index e3c602f..fb05b5f 100644 --- a/gcc/c-family/c-lex.c +++ b/gcc/c-family/c-lex.c @@ -353,13 +353,14 @@ c_common_has_attribute (cpp_reader *pfile) else if (is_attribute_p ("deprecated", attr_name)) result = 201309; else if (is_attribute_p ("maybe_unused", attr_name) - || is_attribute_p ("nodiscard", attr_name) || is_attribute_p ("fallthrough", attr_name)) result = 201603; else if (is_attribute_p ("no_unique_address", attr_name) || is_attribute_p ("likely", attr_name) || is_attribute_p ("unlikely", attr_name)) result = 201803; + else if (is_attribute_p ("nodiscard", attr_name)) + result = 201907; if (result) attr_name = NULL_TREE; } |