OSDN Git Service

PR c++/19375
authorlerdsuwa <lerdsuwa@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 19 Jan 2005 14:30:21 +0000 (14:30 +0000)
committerlerdsuwa <lerdsuwa@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 19 Jan 2005 14:30:21 +0000 (14:30 +0000)
* semantics.c (finish_id_expression): Disable access checking for
already lookuped FIELD_DECL.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@93897 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/cp/ChangeLog
gcc/cp/semantics.c

index dc11ad8..96ddad7 100644 (file)
@@ -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.
 2005-01-18  Kazu Hirata  <kazu@cs.umass.edu>
 
        * decl.c (delete_block): Remove.
index 2dc0cbb..ce7233f 100644 (file)
@@ -3,7 +3,7 @@
    building RTL.  These routines are used both during actual parsing
    and during the instantiation of template functions. 
 
    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.  
    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)
          /* 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;
        }
 
          return id_expression;
        }
 
@@ -2706,8 +2714,15 @@ finish_id_expression (tree id_expression,
            }
        }
       else if (TREE_CODE (decl) == FIELD_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);
       else if (is_overloaded_fn (decl))
        {
          tree first_fn = OVL_CURRENT (decl);