From: H.J. Lu Date: Wed, 18 Mar 2009 15:00:32 +0000 (+0000) Subject: backport: re PR c++/39425 (gcc loops after reporting template instantiation errors) X-Git-Tag: releases/gcc-4.3.4~268 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=785674e8892374e9fba51e3334e6e516804fc7b9;p=thirdparty%2Fgcc.git backport: re PR c++/39425 (gcc loops after reporting template instantiation errors) gcc/cp/ 2009-03-18 H.J. Lu Backport from mainline: 2009-03-18 H.J. Lu PR c++/39425 * parser.c (cp_parser_explicit_specialization): Don't skip the rest of the specialization when begin_specialization returns false. gcc/testsuite/ 2009-03-18 H.J. Lu Backport from mainline: 2009-03-18 H.J. Lu PR c++/39425 * g++.dg/template/pr39425.C: New. * g++.dg/template/spec33.C: Updated. From-SVN: r144933 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 082de660ce03..3c8006ed6c8b 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,13 @@ +2009-03-18 H.J. Lu + + Backport from mainline: + 2009-03-18 H.J. Lu + + PR c++/39425 + * parser.c (cp_parser_explicit_specialization): Don't skip the + rest of the specialization when begin_specialization returns + false. + 2009-03-04 Jason Merrill PR c++/9634 diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 5134d7dd890e..8247c9cc0d8f 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -10497,7 +10497,6 @@ cp_parser_explicit_specialization (cp_parser* parser) if (!begin_specialization ()) { end_specialization (); - cp_parser_skip_to_end_of_block_or_statement (parser); return; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 8f3ee1cc729a..5c9b6fa93c63 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,13 @@ +2009-03-18 H.J. Lu + + Backport from mainline: + 2009-03-18 H.J. Lu + + PR c++/39425 + * g++.dg/template/pr39425.C: New. + + * g++.dg/template/spec33.C: Updated. + 2009-03-13 H.J. Lu Backport from mainline: diff --git a/gcc/testsuite/g++.dg/template/pr39425.C b/gcc/testsuite/g++.dg/template/pr39425.C new file mode 100644 index 000000000000..a063e05c2c71 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/pr39425.C @@ -0,0 +1,18 @@ +// PR c++/39425 +// { dg-do compile } + +class a { + + template + struct _rec { + static const char size = _rec< (s >> 1) >::size; + }; + + template<> // { dg-error "explicit" } + struct _rec <0> { + static const char size = 0; + }; + + static const unsigned int value = _rec < 1 >::size; + +} // { dg-error "unqualified-id" } diff --git a/gcc/testsuite/g++.dg/template/spec33.C b/gcc/testsuite/g++.dg/template/spec33.C index 809d4f012c1a..7b7a7519829a 100644 --- a/gcc/testsuite/g++.dg/template/spec33.C +++ b/gcc/testsuite/g++.dg/template/spec33.C @@ -3,5 +3,5 @@ struct A { template static void foo () {} - template<> static void foo<0>() {} // { dg-error "explicit" } + template<> static void foo<0>() {} // { dg-error "explicit|template" } };