From 572c28962ecce76c43a77174801e44dfdfe9bac9 Mon Sep 17 00:00:00 2001
From: bryce <bryce@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Mon, 2 Aug 2004 21:20:46 +0000
Subject: [PATCH] 2004-08-02  Bryce McKinlay  <mckinlay@redhat.com>

	PR java/16701
	* parse.y (fold_constant_for_init): Call resolve_field_access with
	correct current_class context.

2004-08-02  Bryce McKinlay  <mckinlay@redhat.com>

	* testsuite/libjava.compile/PR16701.java: New test.


git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@85453 138bc75d-0d04-0410-961f-82ee72b054a4
---
 gcc/java/ChangeLog                             |  6 ++++++
 gcc/java/parse.y                               | 10 +++++-----
 libjava/ChangeLog                              |  4 ++++
 libjava/testsuite/libjava.compile/PR16701.java | 10 ++++++++++
 4 files changed, 25 insertions(+), 5 deletions(-)
 create mode 100644 libjava/testsuite/libjava.compile/PR16701.java

diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog
index b2c0a625fa6a..1cd9315f14b9 100644
--- a/gcc/java/ChangeLog
+++ b/gcc/java/ChangeLog
@@ -1,3 +1,9 @@
+2004-08-02  Bryce McKinlay  <mckinlay@redhat.com>
+
+	PR java/16701
+	* parse.y (fold_constant_for_init): Call resolve_field_access with
+	correct current_class context.
+
 2004-08-01  Roger Sayle  <roger@eyesopen.com>
 
 	* decl.c (update_aliases, initialize_local_variable): Replace calls
diff --git a/gcc/java/parse.y b/gcc/java/parse.y
index c251f2f12b70..fdff74676498 100644
--- a/gcc/java/parse.y
+++ b/gcc/java/parse.y
@@ -15970,16 +15970,16 @@ fold_constant_for_init (tree node, tree context)
 	    }
 	  else
 	    {
-	      /* Install the proper context for the field resolution.
-		 The prior context is restored once the name is
-		 properly qualified. */
+	      tree r = NULL_TREE;
+	      /* Install the proper context for the field resolution.  */
 	      tree saved_current_class = current_class;
 	      /* Wait until the USE_COMPONENT_REF re-write.  FIXME. */
 	      current_class = DECL_CONTEXT (context);
 	      qualify_ambiguous_name (node);
+	      r = resolve_field_access (node, &decl, NULL);
+	      /* Restore prior context.  */
 	      current_class = saved_current_class;
-	      if (resolve_field_access (node, &decl, NULL)
-		  && decl != NULL_TREE)
+	      if (r != error_mark_node && decl != NULL_TREE)
 		return fold_constant_for_init (decl, decl);
 	      return NULL_TREE;
 	    }
diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index 28973292b363..81922f2655cd 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -1,3 +1,7 @@
+2004-08-02  Bryce McKinlay  <mckinlay@redhat.com>
+
+	* testsuite/libjava.compile/PR16701.java: New test.
+
 2004-08-01  Andrew John Hughes  <gnu_andrew@member.fsf.org>
 
 	* java/util/Collection.java, java/util/List.java,
diff --git a/libjava/testsuite/libjava.compile/PR16701.java b/libjava/testsuite/libjava.compile/PR16701.java
new file mode 100644
index 000000000000..60d459a69c76
--- /dev/null
+++ b/libjava/testsuite/libjava.compile/PR16701.java
@@ -0,0 +1,10 @@
+class Cl
+{
+  private static final int CONSTANT1 = 0x001;
+  public static final int CONSTANT2 = 0x002 >> CONSTANT1;
+}
+
+public class PR16701
+{
+  public static final int VALUE = Cl.CONSTANT2;
+}
-- 
GitLab