From 25200ab2eba3e561d47d411b81612f7eda9ec109 Mon Sep 17 00:00:00 2001 From: Mark Mitchell Date: Fri, 23 Feb 2001 02:33:03 +0000 Subject: [PATCH] * spew.c (yylex): Correct handling of friends. From-SVN: r39990 --- gcc/cp/ChangeLog | 4 ++++ gcc/cp/spew.c | 10 +++++++--- gcc/testsuite/g++.old-deja/g++.other/friend11.C | 12 ++++++++++++ 3 files changed, 23 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/g++.old-deja/g++.other/friend11.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 26899a55a9e..0bb8645667a 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,7 @@ +2001-02-22 Mark Mitchell + + * spew.c (yylex): Correct handling of friends. + 2001-02-22 Mark Mitchell * mangle.c (write_encoding): Pass write_function_type the diff --git a/gcc/cp/spew.c b/gcc/cp/spew.c index ba2013b8142..02157f00b45 100644 --- a/gcc/cp/spew.c +++ b/gcc/cp/spew.c @@ -719,6 +719,8 @@ yylex () { int yychr; int old_looking_for_typename = 0; + int just_saw_new = 0; + int just_saw_friend = 0; timevar_push (TV_LEX); @@ -804,13 +806,13 @@ yylex () } /* do_aggr needs to know if the previous token was `friend'. */ else if (nth_token (0)->yylval.ttype == ridpointers[RID_FRIEND]) - after_friend = 1; + just_saw_friend = 1; break; case NEW: /* do_aggr needs to know if the previous token was `new'. */ - after_new = 1; + just_saw_new = 1; break; case TYPESPEC: @@ -824,7 +826,6 @@ yylex () case AGGR: do_aggr (); - after_friend = after_new = 0; break; case ENUM: @@ -836,6 +837,9 @@ yylex () break; } + after_friend = just_saw_friend; + after_new = just_saw_new; + /* class member lookup only applies to the first token after the object expression, except for explicit destructor calls. */ if (yychr != '~') diff --git a/gcc/testsuite/g++.old-deja/g++.other/friend11.C b/gcc/testsuite/g++.old-deja/g++.other/friend11.C new file mode 100644 index 00000000000..b9804c4e617 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.other/friend11.C @@ -0,0 +1,12 @@ +// Build don't link: +// Origin: robt@flyingpig.com + +class Outer +{ + friend void f1(); + class Inner2; +}; + +class Outer::Inner2 +{ +}; -- 2.30.2