diff options
| author | Alexandre Oliva <aoliva@redhat.com> | 2005-02-01 05:56:08 +0000 | 
|---|---|---|
| committer | Alexandre Oliva <aoliva@gcc.gnu.org> | 2005-02-01 05:56:08 +0000 | 
| commit | c8a7ed431adf3bbadac565ff67c78d0195143f94 (patch) | |
| tree | 41959edd402fc21a4a2cf1568e59e9fdc454395b /gcc/cp/parser.c | |
| parent | 7d793e369d9247bc0f839be7e7516075dea525be (diff) | |
| download | gcc-c8a7ed431adf3bbadac565ff67c78d0195143f94.zip gcc-c8a7ed431adf3bbadac565ff67c78d0195143f94.tar.gz gcc-c8a7ed431adf3bbadac565ff67c78d0195143f94.tar.bz2 | |
re PR c++/18757 (ICE (on invalid) in get_innermost_template_args)
gcc/cp/ChangeLog:
PR c++/18757
PR c++/19366
PR c++/19499
* parser.c (cp_parser_template_id): Revert 2004-12-09's patch.
Issue an error when creating the template id.
* pt.c (fn_type_unification): Return early if the explicit
template arg list is an error_mark_node.
gcc/testsuite/ChangeLog:
* g++.dg/parse/typename7.C: Adjust error messages.
From-SVN: r94520
Diffstat (limited to 'gcc/cp/parser.c')
| -rw-r--r-- | gcc/cp/parser.c | 9 | 
1 files changed, 8 insertions, 1 deletions
| diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index e5ea069..473d205 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -8514,7 +8514,7 @@ cp_parser_template_id (cp_parser *parser,       error messages about problems during instantiation of the       template.  Do so only if parsing succeeded, otherwise we may       silently accept template arguments with syntax errors.  */ -  if (start_of_id && !cp_parser_error_occurred (parser)) +  if (start_of_id)      {        cp_token *token = cp_lexer_token_at (parser->lexer, start_of_id); @@ -8525,6 +8525,13 @@ cp_parser_template_id (cp_parser *parser,        /* Purge all subsequent tokens.  */        cp_lexer_purge_tokens_after (parser->lexer, start_of_id); + +      /* ??? Can we actually assume that, if template_id == +	 error_mark_node, we will have issued a diagnostic to the +	 user, as opposed to simply marking the tentative parse as +	 failed?  */ +      if (cp_parser_error_occurred (parser) && template_id != error_mark_node) +	error ("parse error in template argument list");      }    pop_deferring_access_checks (); | 
