re PR java/4366 (java class initialization bug)
authorAlexandre Petit-Bianco <apbianco@redhat.com>
Sat, 22 Sep 2001 05:03:35 +0000 (22:03 -0700)
committerAlexandre Petit-Bianco <apbianco@gcc.gnu.org>
Sat, 22 Sep 2001 05:03:35 +0000 (22:03 -0700)
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

gcc/java/ChangeLog
gcc/java/parse.y

index fcfb7eb52f00f74551141790a633061b90fb73bd..837900855cec3d34bbe9ff5bcd0133b1ccd3f880 100644 (file)
@@ -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
index 0c8953e0efe491b6c1e082812ef90b0f4a32d686..9a0656a3e628950bd15c8868343f7329a26684ea 100644 (file)
@@ -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 ();