re PR c++/16637 (syntax error on valid input code)

PR c++/16637
	* parser.c (cp_parser_simple_type_specifier): Do not record usage
	of globally-qualified names.

	PR c++/16637
	* g++.dg/parse/lookup4.C: New test.

From-SVN: r84965
This commit is contained in:
Mark Mitchell 2004-07-20 17:58:43 +00:00 committed by Mark Mitchell
parent f82bb1bed3
commit f68e4dc883
4 changed files with 23 additions and 2 deletions

View File

@ -1,3 +1,9 @@
2004-07-20 Mark Mitchell <mark@codesourcery.com>
PR c++/16637
* parser.c (cp_parser_simple_type_specifier): Do not record usage
of globally-qualified names.
2004-07-20 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
PR c++/16175

View File

@ -9459,6 +9459,7 @@ cp_parser_simple_type_specifier (cp_parser* parser,
if (!(flags & CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES))
{
bool qualified_p;
bool global_p;
/* Don't gobble tokens or issue error messages if this is an
optional type-specifier. */
@ -9466,8 +9467,9 @@ cp_parser_simple_type_specifier (cp_parser* parser,
cp_parser_parse_tentatively (parser);
/* Look for the optional `::' operator. */
cp_parser_global_scope_opt (parser,
/*current_scope_valid_p=*/false);
global_p
= cp_parser_global_scope_opt (parser,
/*current_scope_valid_p=*/false);
/* Look for the nested-name specifier. */
qualified_p
= (cp_parser_nested_name_specifier_opt (parser,
@ -9499,6 +9501,7 @@ cp_parser_simple_type_specifier (cp_parser* parser,
type = cp_parser_type_name (parser);
/* Keep track of all name-lookups performed in class scopes. */
if (type
&& !global_p
&& !qualified_p
&& TREE_CODE (type) == TYPE_DECL
&& TREE_CODE (DECL_NAME (type)) == IDENTIFIER_NODE)

View File

@ -1,3 +1,8 @@
2004-07-20 Mark Mitchell <mark@codesourcery.com>
PR c++/16637
* g++.dg/parse/lookup4.C: New test.
2004-07-20 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
PR c++/16175

View File

@ -0,0 +1,7 @@
// PR c++/16637
typedef int I;
struct S {
::I I;
};