re PR c++/19253 (bad error message / ICE for invalid template parameter)

PR c++/19253
	* parser.c (cp_parser_diagnose_invalid_type_name): Commit to
	tentative parses.

	PR c++/19253
	* g++.dg/template/crash33.C: New test.

From-SVN: r94403
This commit is contained in:
Mark Mitchell 2005-01-29 02:07:18 +00:00 committed by Mark Mitchell
parent ee921ddf21
commit 6ca2d67f22
4 changed files with 20 additions and 1 deletions

View file

@ -1,5 +1,9 @@
2005-01-28 Mark Mitchell <mark@codesourcery.com>
PR c++/19253
* parser.c (cp_parser_diagnose_invalid_type_name): Commit to
tentative parses.
PR c++/19667
* pt.c (redeclare_class_template): Robustify.

View file

@ -1961,7 +1961,10 @@ cp_parser_non_integral_constant_expression (cp_parser *parser,
}
/* Emit a diagnostic for an invalid type name. SCOPE is the
qualifying scope (or NULL, if none) for ID. */
qualifying scope (or NULL, if none) for ID. This function commits
to the current active tentative parse, if any. (Otherwise, the
problematic construct might be encountered again later, resulting
in duplicate error messages.) */
static void
cp_parser_diagnose_invalid_type_name (cp_parser *parser, tree scope, tree id)
@ -2033,6 +2036,7 @@ cp_parser_diagnose_invalid_type_name (cp_parser *parser, tree scope, tree id)
else
gcc_unreachable ();
}
cp_parser_commit_to_tentative_parse (parser);
}
/* Check for a common situation where a type-name should be present,

View file

@ -1,5 +1,8 @@
2005-01-28 Mark Mitchell <mark@codesourcery.com>
PR c++/19253
* g++.dg/template/crash33.C: New test.
PR c++/19667
* g++.dg/template/crash32.C: New test.

View file

@ -0,0 +1,8 @@
// PR c++/19253
namespace N {}
template<typename> struct A
{
A<typename N::X<int> > a; // { dg-error "" }
};