From: Kriang Lerdsuwanakij Date: Wed, 19 Jan 2005 14:50:24 +0000 (+0000) Subject: re PR c++/19375 (Access violation diagnostic given twice) X-Git-Tag: releases/gcc-3.4.4~288 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=df4aac89fb8f7eeab47ad9b3e59bb89cc130d1b0;p=thirdparty%2Fgcc.git re PR c++/19375 (Access violation diagnostic given twice) PR c++/19375 * semantics.c (finish_id_expression): Disable access checking for already lookuped FIELD_DECL. From-SVN: r93899 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 885d5d1178fd..0103228ee003 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2005-01-19 Kriang Lerdsuwanakij + + PR c++/19375 + * semantics.c (finish_id_expression): Disable access checking for + already lookuped FIELD_DECL. + 2005-01-19 Kriang Lerdsuwanakij PR c++/19258 diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index cf207102749b..45fa695f294d 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -4,7 +4,7 @@ and during the instantiation of template functions. Copyright (C) 1998, 1999, 2000, 2001, 2002, - 2003, 2004 Free Software Foundation, Inc. + 2003, 2004, 2005 Free Software Foundation, Inc. Written by Mark Mitchell (mmitchell@usa.net) based on code found formerly in parse.y and pt.c. @@ -2561,9 +2561,17 @@ finish_id_expression (tree id_expression, /* The same is true for FIELD_DECL, but we also need to make sure that the syntax is correct. */ else if (TREE_CODE (decl) == FIELD_DECL) - return finish_non_static_data_member - (decl, current_class_ref, - /*qualifying_scope=*/NULL_TREE); + { + /* Since SCOPE is NULL here, this is an unqualified name. + Access checking has been performed during name lookup + already. Turn off checking to avoid duplicate errors. */ + push_deferring_access_checks (dk_no_check); + decl = finish_non_static_data_member + (decl, current_class_ref, + /*qualifying_scope=*/NULL_TREE); + pop_deferring_access_checks (); + return decl; + } return id_expression; } @@ -2623,8 +2631,15 @@ finish_id_expression (tree id_expression, decl = build (SCOPE_REF, TREE_TYPE (decl), scope, decl); } else if (TREE_CODE (decl) == FIELD_DECL) - decl = finish_non_static_data_member (decl, current_class_ref, - /*qualifying_scope=*/NULL_TREE); + { + /* Since SCOPE is NULL here, this is an unqualified name. + Access checking has been performed during name lookup + already. Turn off checking to avoid duplicate errors. */ + push_deferring_access_checks (dk_no_check); + decl = finish_non_static_data_member (decl, current_class_ref, + /*qualifying_scope=*/NULL_TREE); + pop_deferring_access_checks (); + } else if (is_overloaded_fn (decl)) { tree first_fn = OVL_CURRENT (decl);