From: Kriang Lerdsuwanakij Date: Wed, 19 Jan 2005 14:46:35 +0000 (+0000) Subject: re PR c++/19258 (Incorrect access check for default argument) X-Git-Tag: releases/gcc-3.4.4~289 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8cd5b125dc33bf48369d96822906caed872870f6;p=thirdparty%2Fgcc.git re PR c++/19258 (Incorrect access check for default argument) PR c++/19258 * parser.c (cp_parser_late_parsing_default_args): Handle friend defined in class. * pt.c (push_access_scope, pop_access_scope): Likewise. * g++.dg/lookup/friend6.C: New test. From-SVN: r93898 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index e31e6db6f9b7..885d5d1178fd 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,10 @@ +2005-01-19 Kriang Lerdsuwanakij + + PR c++/19258 + * parser.c (cp_parser_late_parsing_default_args): Handle friend + defined in class. + * pt.c (push_access_scope, pop_access_scope): Likewise. + 2005-01-15 Jakub Jelinek PR c++/19263 diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 2a3ce9258bf7..1bde1f9830b7 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -1,5 +1,6 @@ /* C++ Parser. - Copyright (C) 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. + Copyright (C) 2000, 2001, 2002, 2003, 2004, + 2005 Free Software Foundation, Inc. Written by Mark Mitchell . This file is part of GCC. @@ -14843,10 +14844,12 @@ cp_parser_late_parsing_default_args (cp_parser *parser, tree fn) saved_local_variables_forbidden_p = parser->local_variables_forbidden_p; parser->local_variables_forbidden_p = true; /* Parse the assignment-expression. */ - if (DECL_CLASS_SCOPE_P (fn)) + if (DECL_FRIEND_CONTEXT (fn)) + push_nested_class (DECL_FRIEND_CONTEXT (fn)); + else if (DECL_CLASS_SCOPE_P (fn)) push_nested_class (DECL_CONTEXT (fn)); TREE_PURPOSE (parameters) = cp_parser_assignment_expression (parser); - if (DECL_CLASS_SCOPE_P (fn)) + if (DECL_FRIEND_CONTEXT (fn) || DECL_CLASS_SCOPE_P (fn)) pop_nested_class (); /* If the token stream has not been completely used up, then diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 206c44935f32..8472bbb698f3 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -1,6 +1,6 @@ /* Handle parameterized types (templates) for GNU C++. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, - 2001, 2002, 2003, 2004 Free Software Foundation, Inc. + 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. Written by Ken Raeburn (raeburn@cygnus.com) while at Watchmaker Computing. Rewritten by Jason Merrill (jason@cygnus.com). @@ -180,7 +180,9 @@ push_access_scope (tree t) || TREE_CODE (t) == VAR_DECL, 0); - if (DECL_CLASS_SCOPE_P (t)) + if (DECL_FRIEND_CONTEXT (t)) + push_nested_class (DECL_FRIEND_CONTEXT (t)); + else if (DECL_CLASS_SCOPE_P (t)) push_nested_class (DECL_CONTEXT (t)); else push_to_top_level (); @@ -205,7 +207,7 @@ pop_access_scope (tree t) saved_access_scope = TREE_CHAIN (saved_access_scope); } - if (DECL_CLASS_SCOPE_P (t)) + if (DECL_FRIEND_CONTEXT (t) || DECL_CLASS_SCOPE_P (t)) pop_nested_class (); else pop_from_top_level (); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c3fb9f3497a7..74841e8c016f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2005-01-19 Kriang Lerdsuwanakij + + PR c++/19258 + * g++.dg/lookup/friend6.C: New test. + 2005-01-19 Jakub Jelinek PR rtl-optimization/15139