summaryrefslogtreecommitdiffstats
path: root/gcc/cp/semantics.c
diff options
context:
space:
mode:
authorlerdsuwa <lerdsuwa@138bc75d-0d04-0410-961f-82ee72b054a4>2003-05-18 09:42:12 +0000
committerlerdsuwa <lerdsuwa@138bc75d-0d04-0410-961f-82ee72b054a4>2003-05-18 09:42:12 +0000
commit895bc69140fa92ab577dfeffb3b614e8081cd87c (patch)
tree27deb9add3b4a28ee4fbfd8d4f3136c9d635c6c7 /gcc/cp/semantics.c
parent11b0ccc8f85195b6543892ba67a46dc07aed7dad (diff)
downloadppe42-gcc-895bc69140fa92ab577dfeffb3b614e8081cd87c.tar.gz
ppe42-gcc-895bc69140fa92ab577dfeffb3b614e8081cd87c.zip
* semantics.c (perform_deferred_access_checks): Don't discard
checked access. * g++.dg/parse/access2.C: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@66925 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/cp/semantics.c')
-rw-r--r--gcc/cp/semantics.c19
1 files changed, 15 insertions, 4 deletions
diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c
index 082bc788f1e..be524bef5dd 100644
--- a/gcc/cp/semantics.c
+++ b/gcc/cp/semantics.c
@@ -234,7 +234,21 @@ void pop_to_parent_deferring_access_checks (void)
pop_deferring_access_checks ();
}
-/* Perform the deferred access checks. */
+/* Perform the deferred access checks.
+
+ After performing the checks, we still have to keep the list
+ `deferred_access_stack->deferred_access_checks' since we may want
+ to check access for them again later in a different context.
+ For example:
+
+ class A {
+ typedef int X;
+ static X a;
+ };
+ A::X A::a, x; // No error for `A::a', error for `x'
+
+ We have to perform deferred access of `A::X', first with `A::a',
+ next with `x'. */
void perform_deferred_access_checks (void)
{
@@ -245,9 +259,6 @@ void perform_deferred_access_checks (void)
/* Check access. */
enforce_access (TREE_PURPOSE (deferred_check),
TREE_VALUE (deferred_check));
-
- /* No more deferred checks. */
- deferred_access_stack->deferred_access_checks = NULL_TREE;
}
/* Defer checking the accessibility of DECL, when looked up in
OpenPOWER on IntegriCloud