aboutsummaryrefslogtreecommitdiff
path: root/gcc/java
diff options
context:
space:
mode:
authorAlexandre Petit-Bianco <apbianco@redhat.com>2001-09-21 22:03:35 -0700
committerAlexandre Petit-Bianco <apbianco@gcc.gnu.org>2001-09-21 22:03:35 -0700
commit870a5b8a905c9beb84ba07dd3dc5297bd00b47cf (patch)
treece02214a3f412baa56820b7257afbab217b7a5f3 /gcc/java
parente5eac8efac636afeb0bef8df817cd7d8b54445f4 (diff)
downloadgcc-870a5b8a905c9beb84ba07dd3dc5297bd00b47cf.zip
gcc-870a5b8a905c9beb84ba07dd3dc5297bd00b47cf.tar.gz
gcc-870a5b8a905c9beb84ba07dd3dc5297bd00b47cf.tar.bz2
re PR java/4366 (java class initialization bug)
2001-09-20 Alexandre Petit-Bianco <apbianco@redhat.com> * parse.y (patch_method_invocation): Build class initialization when static finals are used to qualify method invocation. Fixes PR java/4366. ( http://gcc.gnu.org/ml/gcc-patches/2001-09/msg00880.html ) From-SVN: r45743
Diffstat (limited to 'gcc/java')
-rw-r--r--gcc/java/ChangeLog6
-rw-r--r--gcc/java/parse.y6
2 files changed, 12 insertions, 0 deletions
diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog
index fcfb7eb..8379008 100644
--- a/gcc/java/ChangeLog
+++ b/gcc/java/ChangeLog
@@ -4,6 +4,12 @@
(build_dtable_decl): Likewise.
* expr.c (build_invokevirtual): Likewise.
+2001-09-20 Alexandre Petit-Bianco <apbianco@redhat.com>
+
+ * parse.y (patch_method_invocation): Build class initialization
+ when static finals are used to qualify method invocation.
+ Fixes PR java/4366.
+
2001-09-19 Alexandre Petit-Bianco <apbianco@redhat.com>
* parse.h: (WFL_STRIP_BRACKET): Re-written using
diff --git a/gcc/java/parse.y b/gcc/java/parse.y
index 0c8953e..9a0656a 100644
--- a/gcc/java/parse.y
+++ b/gcc/java/parse.y
@@ -10096,6 +10096,12 @@ patch_method_invocation (patch, primary, where, from_super,
qualify_ambiguous_name (wfl);
resolved = resolve_field_access (wfl, NULL, NULL);
+ if (TREE_CODE (resolved) == VAR_DECL && FIELD_STATIC (resolved)
+ && FIELD_FINAL (resolved)
+ && !inherits_from_p (DECL_CONTEXT (resolved), current_class)
+ && !flag_emit_class_files && !flag_emit_xref)
+ resolved = build_class_init (DECL_CONTEXT (resolved), resolved);
+
if (resolved == error_mark_node)
PATCH_METHOD_RETURN_ERROR ();