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
This commit is contained in:
parent
e84bf0ef66
commit
849ec6caae
@ -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
|
||||
|
@ -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,
|
||||
|
@ -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>
|
||||
|
||||
|
6
gcc/testsuite/g++.dg/concepts/pr85265.C
Normal file
6
gcc/testsuite/g++.dg/concepts/pr85265.C
Normal file
@ -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" }
|
Loading…
Reference in New Issue
Block a user