diff options
author | Paolo Carlini <paolo.carlini@oracle.com> | 2018-08-29 20:29:55 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2018-08-29 20:29:55 +0000 |
commit | 849ec6caae2fa53d3f552a1d58fd151a93a39edc (patch) | |
tree | d77f992637292e58d75092ef01c038e185996a64 /gcc | |
parent | e84bf0ef66aa72228299dd92d342c4de3a37c55c (diff) | |
download | gcc-849ec6caae2fa53d3f552a1d58fd151a93a39edc.zip gcc-849ec6caae2fa53d3f552a1d58fd151a93a39edc.tar.gz gcc-849ec6caae2fa53d3f552a1d58fd151a93a39edc.tar.bz2 |
re PR c++/85265 ([concepts] ICE with missing identifier)
/cp
2018-08-29 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/85265
* parser.c (cp_parser_introduction_list): If cp_parser_identifier
returns error_mark_node early exit the loop.
(cp_parser_template_introduction): Improve error-recovery, remove
error call about empty introduction-list.
/testsuite
2018-08-29 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/85265
* g++.dg/concepts/pr85265.C: New.
From-SVN: r263966
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/cp/parser.c | 16 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/concepts/pr85265.C | 6 |
4 files changed, 29 insertions, 6 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 0719186..6ed074e 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,11 @@ +2018-08-29 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/85265 + * parser.c (cp_parser_introduction_list): If cp_parser_identifier + returns error_mark_node early exit the loop. + (cp_parser_template_introduction): Improve error-recovery, remove + error call about empty introduction-list. + 2018-08-29 David Malcolm <dmalcolm@redhat.com> PR c++/85110 diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 8291b13..92e6b40 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -15242,11 +15242,15 @@ cp_parser_introduction_list (cp_parser *parser) if (is_pack) cp_lexer_consume_token (parser->lexer); + tree identifier = cp_parser_identifier (parser); + if (identifier == error_mark_node) + break; + /* Build placeholder. */ tree parm = build_nt (WILDCARD_DECL); DECL_SOURCE_LOCATION (parm) = cp_lexer_peek_token (parser->lexer)->location; - DECL_NAME (parm) = cp_parser_identifier (parser); + DECL_NAME (parm) = identifier; WILDCARD_PACK_P (parm) = is_pack; vec_safe_push (introduction_vec, parm); @@ -27178,18 +27182,18 @@ cp_parser_template_introduction (cp_parser* parser, bool member_p) matching identifiers. */ tree introduction_list = cp_parser_introduction_list (parser); + /* Look for closing brace for introduction. */ + if (!braces.require_close (parser)) + return true; + /* The introduction-list shall not be empty. */ int nargs = TREE_VEC_LENGTH (introduction_list); if (nargs == 0) { - error ("empty introduction-list"); + /* In cp_parser_introduction_list we have already issued an error. */ return true; } - /* Look for closing brace for introduction. */ - if (!braces.require_close (parser)) - return true; - if (tmpl_decl == error_mark_node) { cp_parser_name_lookup_error (parser, concept_name, tmpl_decl, NLE_NULL, diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 2011973..78bbd7f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2018-08-29 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/85265 + * g++.dg/concepts/pr85265.C: New. + 2018-08-29 Martin Sebor <msebor@redhat.com> Bernd Edlinger <bernd.edlinger@hotmail.de> diff --git a/gcc/testsuite/g++.dg/concepts/pr85265.C b/gcc/testsuite/g++.dg/concepts/pr85265.C new file mode 100644 index 0000000..86124ce --- /dev/null +++ b/gcc/testsuite/g++.dg/concepts/pr85265.C @@ -0,0 +1,6 @@ +// { dg-do compile { target c++14 } } +// { dg-additional-options "-fconcepts" } + +template<typename> concept bool C = true; + +C{} void foo(); // { dg-error "expected identifier" } |