diff options
author | Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net> | 2005-01-19 14:30:21 +0000 |
---|---|---|
committer | Kriang Lerdsuwanakij <lerdsuwa@gcc.gnu.org> | 2005-01-19 14:30:21 +0000 |
commit | a26ddf116ec21df0a1e74c888d469647b6f2f396 (patch) | |
tree | dc292dd0440c66ca780c389c4b36eb80e4e6e5b9 /gcc | |
parent | 625d4524faf4a92d5e503ab231d24e42ce2a9d4e (diff) | |
download | gcc-a26ddf116ec21df0a1e74c888d469647b6f2f396.zip gcc-a26ddf116ec21df0a1e74c888d469647b6f2f396.tar.gz gcc-a26ddf116ec21df0a1e74c888d469647b6f2f396.tar.bz2 |
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: r93897
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/semantics.c | 27 |
2 files changed, 27 insertions, 6 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index dc11ad8..96ddad7 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2005-01-19 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net> + + PR c++/19375 + * semantics.c (finish_id_expression): Disable access checking for + already lookuped FIELD_DECL. + 2005-01-18 Kazu Hirata <kazu@cs.umass.edu> * decl.c (delete_block): Remove. diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index 2dc0cbb..ce7233f 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -3,7 +3,7 @@ building RTL. These routines are used both during actual parsing and during the instantiation of template functions. - Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004 + Copyright (C) 1998, 1999, 2000, 2001, 2002, 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. @@ -2639,9 +2639,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; } @@ -2706,8 +2714,15 @@ finish_id_expression (tree id_expression, } } 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); |