aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPaolo Carlini <paolo.carlini@oracle.com>2018-08-29 20:29:55 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2018-08-29 20:29:55 +0000
commit849ec6caae2fa53d3f552a1d58fd151a93a39edc (patch)
treed77f992637292e58d75092ef01c038e185996a64 /gcc
parente84bf0ef66aa72228299dd92d342c4de3a37c55c (diff)
downloadgcc-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/ChangeLog8
-rw-r--r--gcc/cp/parser.c16
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/concepts/pr85265.C6
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" }