diff options
author | Patrick Palka <ppalka@gcc.gnu.org> | 2016-09-19 18:12:36 +0000 |
---|---|---|
committer | Patrick Palka <ppalka@gcc.gnu.org> | 2016-09-19 18:12:36 +0000 |
commit | 6101a7ab878f784558c908d6e4773d49b0858e0e (patch) | |
tree | 418e0d7e8d09dbc87f2f70bec91de96afdb2fdff | |
parent | d0f5943566482b094ac600e63271c22ebf227c5f (diff) | |
download | gcc-6101a7ab878f784558c908d6e4773d49b0858e0e.zip gcc-6101a7ab878f784558c908d6e4773d49b0858e0e.tar.gz gcc-6101a7ab878f784558c908d6e4773d49b0858e0e.tar.bz2 |
Fix PR c++/77639 (ICE during error recovery)
gcc/cp/ChangeLog:
PR c++/77639
* parser.c (cp_parser_class_head): When
processing_template_parmlist, don't assume that the
class-head may start an explicit specialization.
gcc/testsuite/ChangeLog:
PR c++/77639
* g++.dg/template/error-recovery4.C: New test.
From-SVN: r240245
-rw-r--r-- | gcc/cp/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/cp/parser.c | 1 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/error-recovery4.C | 5 |
4 files changed, 18 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 9d74bdb..e4bd392 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,10 @@ +2016-09-16 Patrick Palka <ppalka@gcc.gnu.org> + + PR c++/77639 + * parser.c (cp_parser_class_head): When + processing_template_parmlist, don't assume that the + class-head may start an explicit specialization. + 2016-09-16 Jakub Jelinek <jakub@redhat.com> PR c++/77482 diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index fb88021..c03b9c2 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -22025,6 +22025,7 @@ cp_parser_class_head (cp_parser* parser, it is not, try to recover gracefully. */ if (at_namespace_scope_p () && parser->num_template_parameter_lists == 0 + && !processing_template_parmlist && template_id_p) { /* Build a location of this form: diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 68d3973..f7d0048 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2016-09-19 Patrick Palka <ppalka@gcc.gnu.org> + + PR c++/77639 + * g++.dg/template/error-recovery4.C: New test. + 2016-09-19 Bin Cheng <bin.cheng@arm.com> * gcc.dg/vect/pr57558-1.c: Use unsigned int instead of unsigned long. diff --git a/gcc/testsuite/g++.dg/template/error-recovery4.C b/gcc/testsuite/g++.dg/template/error-recovery4.C new file mode 100644 index 0000000..1e52c6a --- /dev/null +++ b/gcc/testsuite/g++.dg/template/error-recovery4.C @@ -0,0 +1,5 @@ +// PR c++/77639 + +template <class, int, class, int> struct B {}; +template <class T, int a, class U struct B<T, a, U, 1> {}; // { dg-error "" } +B<int, 2, char, 1> i; |