This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
As analysed in the bug report, the scope for the accessibility check was incorrect, and hence the friend was not allowed access. Fixed by pushing into the class scope before parsing the base-clause, and popping afterwards to let the surrounding nested-name-specifier popping work correctly. Tested on x86_64-linux.
Attachment:
pr59482.changelog
Description: Binary data
diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index c3016bc..3bc943b 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -19845,7 +19845,17 @@ cp_parser_class_head (cp_parser* parser, /* Get the list of base-classes, if there is one. */ if (cp_lexer_next_token_is (parser->lexer, CPP_COLON)) - bases = cp_parser_base_clause (parser); + { + /* PR59482: enter the class scope so that base-specifiers are looked + up correctly */ + if (type) + pushclass (type); + bases = cp_parser_base_clause (parser); + /* PR59482: get out of the previously pushed class scope so that the + subsequent pops pop the right thing */ + if (type) + popclass (); + } else bases = NULL_TREE; diff --git a/gcc/testsuite/g++.dg/pr59482.C b/gcc/testsuite/g++.dg/pr59482.C new file mode 100644 index 0000000..bde8329 --- /dev/null +++ b/gcc/testsuite/g++.dg/pr59482.C @@ -0,0 +1,7 @@ +/* { dg-do compile } */ +class aa { + friend class cc; + class bb {}; +}; + +class cc : aa::bb {};
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |