* parse.y (maybe_yank_clinit): A field without an initializer is not
authorbothner <bothner@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 4 Sep 2001 21:50:31 +0000 (21:50 +0000)
committerbothner <bothner@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 4 Sep 2001 21:50:31 +0000 (21:50 +0000)
relevant.  All initializers except static final and constant require
<clinit>, regardless of flag_emit_class_files.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@45388 138bc75d-0d04-0410-961f-82ee72b054a4

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

index 3a92114..0f19738 100644 (file)
@@ -1,3 +1,9 @@
+2001-09-01  Per Bothner  <per@bothner.com>
+
+       * parse.y (maybe_yank_clinit):  A field without an initializer is not
+       relevant.  All initializers except static final and constant require
+       <clinit>, regardless of flag_emit_class_files.
+
 2001-08-31  Per Bothner  <per@bothner.com>
 
        * class.c (set_constant_value):  When not emiting class files, then a
index 09a4dcd..698f422 100644 (file)
@@ -7862,6 +7862,12 @@ maybe_yank_clinit (mdecl)
       if (!FIELD_STATIC (current))
        continue;
 
+      /* nor in fields with initializers. */
+      f_init = DECL_INITIAL (current);
+
+      if (f_init == NULL_TREE)
+       continue;
+
       /* Anything that isn't String or a basic type is ruled out -- or
         if we know how to deal with it (when doing things natively) we
         should generated an empty <clinit> so that SUID are computed
@@ -7869,18 +7875,8 @@ maybe_yank_clinit (mdecl)
       if (! JSTRING_TYPE_P (TREE_TYPE (current))
          && ! JNUMERIC_TYPE_P (TREE_TYPE (current)))
        break;
-         
-      f_init = DECL_INITIAL (current);
-      /* If we're emitting native code, we want static final fields to
-        have constant initializers. If we don't meet these
-        conditions, we keep <clinit> */
-      if (!flag_emit_class_files
-         && !(FIELD_FINAL (current) && f_init && TREE_CONSTANT (f_init)))
-       break;
-      /* If we're emitting bytecode, we want static fields to have
-        constant initializers or no initializer. If we don't meet
-        these conditions, we keep <clinit> */
-      if (flag_emit_class_files && f_init && !TREE_CONSTANT (f_init))
+
+      if (! FIELD_FINAL (current) || ! TREE_CONSTANT (f_init))
        break;
     }