Commit 6c0cc713 by Giovanni Bajo

re PR c++/14028 (Parser accepts invalid unbalanced triangular bracketing.)

	PR c++/14028
	* parser.c (cp_parser_enclosed_template_argument_list): Emit straight
	error when terminator can not be found.

From-SVN: r77402
parent 3298fd35
2003-02-06 Giovanni Bajo <giovannibajo@gcc.gnu.org>
PR c++/14028
* parser.c (cp_parser_enclosed_template_argument_list): Emit straight
error when terminator can not be found.
2004-02-05 Kelley Cook <kcook@gcc.gnu.org> 2004-02-05 Kelley Cook <kcook@gcc.gnu.org>
Make-lang.in (po-generated): Delete. Make-lang.in (po-generated): Delete.
......
...@@ -1938,8 +1938,8 @@ cp_parser_non_integral_constant_expression (const char *thing) ...@@ -1938,8 +1938,8 @@ cp_parser_non_integral_constant_expression (const char *thing)
static void static void
cp_parser_diagnose_invalid_type_name (cp_parser *parser, tree scope, tree id) cp_parser_diagnose_invalid_type_name (cp_parser *parser, tree scope, tree id)
{ {
tree decl, old_scope; tree decl, old_scope;
/* Try to lookup the identifier. */ /* Try to lookup the identifier. */
old_scope = parser->scope; old_scope = parser->scope;
parser->scope = scope; parser->scope = scope;
...@@ -1948,8 +1948,8 @@ cp_parser_diagnose_invalid_type_name (cp_parser *parser, tree scope, tree id) ...@@ -1948,8 +1948,8 @@ cp_parser_diagnose_invalid_type_name (cp_parser *parser, tree scope, tree id)
/* If the lookup found a template-name, it means that the user forgot /* If the lookup found a template-name, it means that the user forgot
to specify an argument list. Emit an useful error message. */ to specify an argument list. Emit an useful error message. */
if (TREE_CODE (decl) == TEMPLATE_DECL) if (TREE_CODE (decl) == TEMPLATE_DECL)
error ("invalid use of template-name `%E' without an argument list", error ("invalid use of template-name `%E' without an argument list",
decl); decl);
else if (!parser->scope) else if (!parser->scope)
{ {
/* Issue an error message. */ /* Issue an error message. */
...@@ -2271,16 +2271,16 @@ cp_parser_skip_to_closing_brace (cp_parser *parser) ...@@ -2271,16 +2271,16 @@ cp_parser_skip_to_closing_brace (cp_parser *parser)
static tree static tree
cp_parser_make_typename_type (cp_parser *parser, tree scope, tree id) cp_parser_make_typename_type (cp_parser *parser, tree scope, tree id)
{ {
tree result; tree result;
if (TREE_CODE (id) == IDENTIFIER_NODE) if (TREE_CODE (id) == IDENTIFIER_NODE)
{ {
result = make_typename_type (scope, id, /*complain=*/0); result = make_typename_type (scope, id, /*complain=*/0);
if (result == error_mark_node) if (result == error_mark_node)
cp_parser_diagnose_invalid_type_name (parser, scope, id); cp_parser_diagnose_invalid_type_name (parser, scope, id);
return result; return result;
} }
return make_typename_type (scope, id, tf_error); return make_typename_type (scope, id, tf_error);
} }
...@@ -14538,8 +14538,8 @@ cp_parser_enclosed_template_argument_list (cp_parser* parser) ...@@ -14538,8 +14538,8 @@ cp_parser_enclosed_template_argument_list (cp_parser* parser)
cp_lexer_consume_token (parser->lexer); cp_lexer_consume_token (parser->lexer);
} }
} }
else else if (!cp_parser_require (parser, CPP_GREATER, "`>'"))
cp_parser_require (parser, CPP_GREATER, "`>'"); error ("missing `>' to terminate the template argument list");
/* The `>' token might be a greater-than operator again now. */ /* The `>' token might be a greater-than operator again now. */
parser->greater_than_is_operator_p parser->greater_than_is_operator_p
= saved_greater_than_is_operator_p; = saved_greater_than_is_operator_p;
......
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