This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: PR java/25429: can't see private static final int CREATE = 1
- From: Tom Tromey <tromey at redhat dot com>
- To: Andrew Haley <aph at redhat dot com>
- Cc: gcc-patches at gcc dot gnu dot org, java-patches at gcc dot gnu dot org
- Date: 15 Dec 2005 16:53:37 -0700
- Subject: Re: PR java/25429: can't see private static final int CREATE = 1
- References: <17313.39915.239402.603593@zapata.pink>
- Reply-to: tromey at redhat dot com
>>>>> "Andrew" == Andrew Haley <aph@redhat.com> writes:
Andrew> Constant propagation is broken when importing into an inner class.
Here's an updated patch plus a couple of test cases. I tested this on
the trunk. I'm checking it in there.
Andrew, where were you going to check this in?
4.1? Does 4.0 need it?
Tom
Index: gcc/java/ChangeLog
from Tom Tromey <tromey@redhat.com>
Andrew Haley <aph@redhat.com>
PR java/25429
* parse.y (resolve_expression_name): Don't generate accessor
methods for constant fields.
Index: libjava/ChangeLog
from Tom Tromey <tromey@redhat.com>
* testsuite/libjava.compile/rh175833.java: New file.
* testsuite/libjava.compile/pr25429.java: New file.
Index: gcc/java/parse.y
===================================================================
--- gcc/java/parse.y (revision 108605)
+++ gcc/java/parse.y (working copy)
@@ -9584,8 +9584,15 @@
/* If we're processing an inner class and we're trying
to access a field belonging to an outer class, build
- the access to the field. */
- if (nested_member_access_p (current_class, decl))
+ the access to the field.
+ As usual, we have to treat initialized static final
+ variables as a special case. */
+ if (nested_member_access_p (current_class, decl)
+ && ! (JDECL_P (decl) && CLASS_FINAL_VARIABLE_P (decl)
+ && DECL_INITIAL (decl) != NULL_TREE
+ && (JSTRING_TYPE_P (TREE_TYPE (decl))
+ || JNUMERIC_TYPE_P (TREE_TYPE (decl)))
+ && TREE_CONSTANT (DECL_INITIAL (decl))))
{
if (!fs && CLASS_STATIC (TYPE_NAME (current_class)))
{
Index: libjava/testsuite/libjava.compile/pr25429.java
===================================================================
--- libjava/testsuite/libjava.compile/pr25429.java (revision 0)
+++ libjava/testsuite/libjava.compile/pr25429.java (revision 0)
@@ -0,0 +1,13 @@
+public class pr25429
+{
+ private static final int CONST = 0;
+ class I {
+ public void f () {
+ switch(0) {
+ case CONST:
+ }
+ }
+ }
+
+ public static void main(String[] args) { }
+}
Index: libjava/testsuite/libjava.compile/rh175833.java
===================================================================
--- libjava/testsuite/libjava.compile/rh175833.java (revision 0)
+++ libjava/testsuite/libjava.compile/rh175833.java (revision 0)
@@ -0,0 +1,13 @@
+// Follow-on to PR 25429
+public class rh175833
+{
+ private static final Object CONST = new Object();
+ class I {
+ public Object f () {
+ // We need an accessor here.
+ return CONST;
+ }
+ }
+
+ public static void main(String[] args) { }
+}