From ff6b8fb4fa18368b9d19e0c26d85919d8d4ec58e Mon Sep 17 00:00:00 2001 From: Mark Mitchell Date: Mon, 14 Oct 2002 07:46:30 +0000 Subject: [PATCH] re PR c++/7176 (g++ confused by friend and static member with same name) PR c++/7176 * lex.c (do_identifier): Add another option for the parsing parameter. * parse.y (do_id): Use it. PR c++/7176 * g++.dg/parse/friend1.C: New test. * g++.old-deja/g++.pt/memtemp64.C: Adjust. From-SVN: r58119 --- gcc/cp/ChangeLog | 7 +++++++ gcc/cp/lex.c | 4 ++-- gcc/cp/parse.y | 2 +- gcc/testsuite/ChangeLog | 6 ++++++ gcc/testsuite/g++.dg/parse/friend1.C | 9 +++++++++ gcc/testsuite/g++.old-deja/g++.pt/memtemp64.C | 2 +- 6 files changed, 26 insertions(+), 4 deletions(-) create mode 100644 gcc/testsuite/g++.dg/parse/friend1.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 622dca534fc1..7d06bba973aa 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,10 @@ +2002-10-14 Mark Mitchell + + PR c++/7176 + * lex.c (do_identifier): Add another option for the parsing + parameter. + * parse.y (do_id): Use it. + 2002-10-11 Mark Mitchell PR c++/5661 diff --git a/gcc/cp/lex.c b/gcc/cp/lex.c index d68957a9963e..f3d80f8b1acb 100644 --- a/gcc/cp/lex.c +++ b/gcc/cp/lex.c @@ -1194,7 +1194,7 @@ do_identifier (token, parsing, args) tree args; { register tree id; - int lexing = (parsing == 1); + int lexing = (parsing == 1 || parsing == 3); if (! lexing) id = lookup_name (token, 0); @@ -1216,7 +1216,7 @@ do_identifier (token, parsing, args) /* Remember that this name has been used in the class definition, as per [class.scope0] */ - if (id && parsing) + if (id && parsing && parsing != 3) maybe_note_name_used_in_class (token, id); if (id == error_mark_node) diff --git a/gcc/cp/parse.y b/gcc/cp/parse.y index 678262198a94..6dadc32d494e 100644 --- a/gcc/cp/parse.y +++ b/gcc/cp/parse.y @@ -1507,7 +1507,7 @@ do_id: don't do_identifier; we only do that for unqualified identifiers. */ if (!lastiddecl || TREE_CODE (lastiddecl) != TREE_LIST) - $$ = do_identifier ($-1, 1, NULL_TREE); + $$ = do_identifier ($-1, 3, NULL_TREE); else $$ = $-1; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index f3008b0d9661..3b857e0bcaa8 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2002-10-14 Mark Mitchell + + PR c++/7176 + * g++.dg/parse/friend1.C: New test. + * g++.old-deja/g++.pt/memtemp64.C: Adjust. + 2002-10-11 Mark Mitchell PR c++/5661 diff --git a/gcc/testsuite/g++.dg/parse/friend1.C b/gcc/testsuite/g++.dg/parse/friend1.C new file mode 100644 index 000000000000..f19dc9c628b9 --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/friend1.C @@ -0,0 +1,9 @@ +namespace N { + template + static void f (); + + struct S { + friend void N::f (); + static void f (int); + }; +} diff --git a/gcc/testsuite/g++.old-deja/g++.pt/memtemp64.C b/gcc/testsuite/g++.old-deja/g++.pt/memtemp64.C index fbebe3ae82f6..6185d3d60583 100644 --- a/gcc/testsuite/g++.old-deja/g++.pt/memtemp64.C +++ b/gcc/testsuite/g++.old-deja/g++.pt/memtemp64.C @@ -4,7 +4,7 @@ template struct S1 {}; template -void f(T); // ERROR - original declaration. +void f(T); template struct S2 -- 2.47.2