re PR c++/29727 (ICE on invalid initializer for template member)

gcc/cp/

2009-03-27  Simon Martin  <simartin@users.sourceforge.net>

	PR c++/29727
	* decl.c (check_array_designated_initializer): Handle error_mark_node.

gcc/testsuite/

2009-03-27  Simon Martin  <simartin@users.sourceforge.net>

	PR c++/29727
	* g++.dg/init/error2.C: New test.

From-SVN: r145104
This commit is contained in:
Simon Martin 2009-03-27 13:11:29 +00:00 committed by H.J. Lu
parent a5f805df58
commit 6a837908f9
4 changed files with 34 additions and 3 deletions

View File

@ -1,3 +1,8 @@
2009-03-27 Simon Martin <simartin@users.sourceforge.net>
PR c++/29727
* decl.c (check_array_designated_initializer): Handle error_mark_node.
2009-03-27 Manuel Lopez-Ibanez <manu@gcc.gnu.org>
PR c++/35652

View File

@ -4419,9 +4419,15 @@ check_array_designated_initializer (const constructor_elt *ce)
{
/* The parser only allows identifiers as designated
initializers. */
gcc_assert (TREE_CODE (ce->index) == IDENTIFIER_NODE);
error ("name %qD used in a GNU-style designated "
"initializer for an array", ce->index);
if (ce->index == error_mark_node)
error ("name used in a GNU-style designated "
"initializer for an array");
else
{
gcc_assert (TREE_CODE (ce->index) == IDENTIFIER_NODE);
error ("name %qD used in a GNU-style designated "
"initializer for an array", ce->index);
}
return false;
}

View File

@ -1,3 +1,8 @@
2009-03-27 Simon Martin <simartin@users.sourceforge.net>
PR c++/29727
* g++.dg/init/error2.C: New test.
2009-03-27 Manuel Lopez-Ibanez <manu@gcc.gnu.org>
PR c++/35652

View File

@ -0,0 +1,15 @@
/* PR c++/29727 */
/* { dg-do "compile" } */
template<int> struct A
{
static int a[1];
};
template<int N> int A<N>::a[1] = { X:0 }; /* { dg-error "does not allow designated|was not declared|designated initializer for an array" } */
void foo()
{
A<0>::a;
}