Commit 13dbe691 by Volker Reichelt Committed by Volker Reichelt

re PR c++/27398 (ICE on missing closing parenthesis)

	PR c++/27398
	* decl.c (grokdeclarator): Return error_mark_node instead of NULL_TREE
	or void_type_node.

	* g++.dg/template/crash50.C: New test.

From-SVN: r113950
parent 476220e7
2006-05-21 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
PR c++/27398
* decl.c (grokdeclarator): Return error_mark_node instead of NULL_TREE
or void_type_node.
2006-05-19 Mike Stump <mrs@apple.com> 2006-05-19 Mike Stump <mrs@apple.com>
* typeck.c (default_conversion): Remove static. * typeck.c (default_conversion): Remove static.
......
...@@ -7285,7 +7285,7 @@ grokdeclarator (const cp_declarator *declarator, ...@@ -7285,7 +7285,7 @@ grokdeclarator (const cp_declarator *declarator,
if (dependent_name && !friendp) if (dependent_name && !friendp)
{ {
error ("%<%T::%D%> is not a valid declarator", ctype, dependent_name); error ("%<%T::%D%> is not a valid declarator", ctype, dependent_name);
return void_type_node; return error_mark_node;
} }
/* Issue errors about use of storage classes for parameters. */ /* Issue errors about use of storage classes for parameters. */
...@@ -7529,7 +7529,7 @@ grokdeclarator (const cp_declarator *declarator, ...@@ -7529,7 +7529,7 @@ grokdeclarator (const cp_declarator *declarator,
&& !member_function_or_else (ctype, && !member_function_or_else (ctype,
current_class_type, current_class_type,
flags)) flags))
return void_type_node; return error_mark_node;
if (flags != DTOR_FLAG) if (flags != DTOR_FLAG)
{ {
...@@ -7543,7 +7543,7 @@ grokdeclarator (const cp_declarator *declarator, ...@@ -7543,7 +7543,7 @@ grokdeclarator (const cp_declarator *declarator,
} }
if (decl_context == FIELD if (decl_context == FIELD
&& sfk != sfk_constructor) && sfk != sfk_constructor)
return NULL_TREE; return error_mark_node;
} }
if (decl_context == FIELD) if (decl_context == FIELD)
staticp = 0; staticp = 0;
...@@ -8148,7 +8148,7 @@ grokdeclarator (const cp_declarator *declarator, ...@@ -8148,7 +8148,7 @@ grokdeclarator (const cp_declarator *declarator,
{ {
error ("can't make %qD into a method -- not in a class", error ("can't make %qD into a method -- not in a class",
unqualified_id); unqualified_id);
return void_type_node; return error_mark_node;
} }
/* ``A union may [ ... ] not [ have ] virtual functions.'' /* ``A union may [ ... ] not [ have ] virtual functions.''
...@@ -8157,7 +8157,7 @@ grokdeclarator (const cp_declarator *declarator, ...@@ -8157,7 +8157,7 @@ grokdeclarator (const cp_declarator *declarator,
{ {
error ("function %qD declared virtual inside a union", error ("function %qD declared virtual inside a union",
unqualified_id); unqualified_id);
return void_type_node; return error_mark_node;
} }
if (NEW_DELETE_OPNAME_P (unqualified_id)) if (NEW_DELETE_OPNAME_P (unqualified_id))
...@@ -8259,7 +8259,7 @@ grokdeclarator (const cp_declarator *declarator, ...@@ -8259,7 +8259,7 @@ grokdeclarator (const cp_declarator *declarator,
funcdef_flag, template_count, in_namespace, funcdef_flag, template_count, in_namespace,
attrlist); attrlist);
if (decl == NULL_TREE) if (decl == NULL_TREE)
return NULL_TREE; return error_mark_node;
} }
else if (!staticp && !dependent_type_p (type) else if (!staticp && !dependent_type_p (type)
&& !COMPLETE_TYPE_P (complete_type (type)) && !COMPLETE_TYPE_P (complete_type (type))
...@@ -8316,7 +8316,7 @@ grokdeclarator (const cp_declarator *declarator, ...@@ -8316,7 +8316,7 @@ grokdeclarator (const cp_declarator *declarator,
return decl; return decl;
} }
else else
return void_type_node; return error_mark_node;
} }
/* Structure field. It may not be a function, except for C++. */ /* Structure field. It may not be a function, except for C++. */
...@@ -8355,7 +8355,7 @@ grokdeclarator (const cp_declarator *declarator, ...@@ -8355,7 +8355,7 @@ grokdeclarator (const cp_declarator *declarator,
void_type_node, as if this was a friend void_type_node, as if this was a friend
declaration, to cause callers to completely declaration, to cause callers to completely
ignore this declaration. */ ignore this declaration. */
return void_type_node; return error_mark_node;
} }
if (staticp) if (staticp)
...@@ -8403,7 +8403,7 @@ grokdeclarator (const cp_declarator *declarator, ...@@ -8403,7 +8403,7 @@ grokdeclarator (const cp_declarator *declarator,
int publicp = 0; int publicp = 0;
if (!unqualified_id) if (!unqualified_id)
return NULL_TREE; return error_mark_node;
if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR) if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
original_name = dname; original_name = dname;
...@@ -8458,7 +8458,7 @@ grokdeclarator (const cp_declarator *declarator, ...@@ -8458,7 +8458,7 @@ grokdeclarator (const cp_declarator *declarator,
publicp, inlinep, sfk, funcdef_flag, publicp, inlinep, sfk, funcdef_flag,
template_count, in_namespace, attrlist); template_count, in_namespace, attrlist);
if (decl == NULL_TREE) if (decl == NULL_TREE)
return NULL_TREE; return error_mark_node;
if (staticp == 1) if (staticp == 1)
{ {
......
2006-05-21 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
PR c++/27398
* g++.dg/template/crash50.C: New test.
2006-05-21 Paul Thomas <pault@gcc.gnu.org> 2006-05-21 Paul Thomas <pault@gcc.gnu.org>
PR fortran/25746 PR fortran/25746
// PR c++/27398
// { dg-do compile }
struct A
{
template<int> void* foo(; // { dg-error "primary-expression|initialization|static" }
};
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment