diff options
author | Mark Mitchell <mark@codesourcery.com> | 2004-11-24 18:10:26 +0000 |
---|---|---|
committer | Mark Mitchell <mmitchel@gcc.gnu.org> | 2004-11-24 18:10:26 +0000 |
commit | 62a4d9428b459473bdb080c9734c1db46e87d6dd (patch) | |
tree | 8c71e87be9e6aaa39c6f76290576dce0b58c5637 /gcc | |
parent | fc57e2c7efcdb90838f863b5d6337341bff5fc27 (diff) | |
download | gcc-62a4d9428b459473bdb080c9734c1db46e87d6dd.zip gcc-62a4d9428b459473bdb080c9734c1db46e87d6dd.tar.gz gcc-62a4d9428b459473bdb080c9734c1db46e87d6dd.tar.bz2 |
re PR c++/18586 (ICE on invalid template member declaration)
PR c++/18586
* parser.c (cp_parser_init_declarator): Do not pop scope twice.
PR c++/18586
* g++.dg/template/crash27.C: New test.
From-SVN: r91182
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/cp/parser.c | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/deduce3.C | 9 |
4 files changed, 19 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index faf73ad..abfc86a 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,8 @@ 2004-11-24 Mark Mitchell <mark@codesourcery.com> + PR c++/18586 + * parser.c (cp_parser_init_declarator): Do not pop scope twice. + PR c++/18530 * cp-tree.h (CTOR_NAME): Remove. (DTOR_NAME): Remove. diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 265abdb..ccd8a95 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -10590,7 +10590,10 @@ cp_parser_init_declarator (cp_parser* parser, if (member_p) { if (pop_p) - pop_scope (scope); + { + pop_scope (scope); + pop_p = false; + } decl = grokfield (declarator, decl_specifiers, initializer, /*asmspec=*/NULL_TREE, /*attributes=*/NULL_TREE); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 03014a1..d569fb7 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2004-11-24 Mark Mitchell <mark@codesourcery.com> + PR c++/18586 + * g++.dg/template/crash27.C: New test. + PR c++/18530 * g++.dg/warn/Wshadow-3.C: New test. diff --git a/gcc/testsuite/g++.dg/template/deduce3.C b/gcc/testsuite/g++.dg/template/deduce3.C new file mode 100644 index 0000000..d6d68a8 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/deduce3.C @@ -0,0 +1,9 @@ +template <typename T> +void f(int, T (*)() = 0); + +void g() { + typedef int A[2]; + f<A>(0); // { dg-error "" } + typedef void F(); + f<F>(0); // { dg-error "" } +} |