Package-private access checking in GCJ 3.3
Ranjit Mathew
rmathew@hotmail.com
Sun Jun 15 16:47:00 GMT 2003
Hi,
As you guys know, package-private access checking in GCJ 3.3
and 3.4 is totally busted. I have found that making the
following simple change to not_accessible_p( ) in parse.y
*seems* to resolve the problem:
------------------------------ 8< ------------------------------
Index: parse.y
===================================================================
*** parse.y Sun Jun 8 20:04:39 2003
--- parse.y Sun Jun 15 21:25:00 2003
*************** not_accessible_p (reference, member, whe
*** 10141,10152 ****
}
! /* Default access are permitted only when occurring within the
! package in which the type (REFERENCE) is declared. In other words,
! REFERENCE is defined in the current package */
! if (ctxp->package)
! return !class_in_current_package (reference);
!
! /* Otherwise, access is granted */
! return 0;
}
--- 10141,10147 ----
}
! /* Default access is permitted only when occurring from within
! the package in which the MEMBER is declared. */
! return !class_in_current_package (DECL_CONTEXT (member));
}
------------------------------ 8< ------------------------------
I made this change purely to make it consistent with the similar
check for protected access a few lines above in the same method
and not out of some profound understanding of what is
happening. ;-)
I also noted that class_in_current_package( ) correctly handles
the case where the current class is in the default package.
This change however exposes another problem - we do not use
any bit to indicate package-private access and so
java_accstring_lookup( ) returns the closest available set
flag, if any, and "" otherwise. This makes for some rather
confusing error messages. :-)
(BTW, we use the same bit for both ACC_SUPER and
ACC_SYNCHRONIZED and these are the only two that share a
bit - is this by design or is this an oversight?)
I have only "bubblestrapped" with this change and tested
against very simple testcases.
This is not a patch - merely fodder for thought - and is
taken against the 3.3 release.
Ranjit.
--
Ranjit Mathew Email: rmathew AT hotmail DOT com
Bangalore,
INDIA. Web: http://ranjitmathew.tripod.com/
More information about the Java
mailing list