]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
parse.y (maybe_yank_clinit): A field without an initializer is not relevant.
authorPer Bothner <per@bothner.com>
Tue, 4 Sep 2001 21:50:31 +0000 (14:50 -0700)
committerPer Bothner <bothner@gcc.gnu.org>
Tue, 4 Sep 2001 21:50:31 +0000 (14:50 -0700)
* 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.

From-SVN: r45388

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

index 3a92114ba54b7e7a31107b21f174f11f44750d51..0f1973822b380e9b0a62d3689c248b587eae2664 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 09a4dcd6ce00e358387546e955076dad38c6f5b2..698f42274e8f2af771f4bc1dbd62c6201b505a2a 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;
     }