parse.y (maybe_yank_clinit): A field without an initializer is not relevant.

* 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
This commit is contained in:
Per Bothner 2001-09-04 14:50:31 -07:00 committed by Per Bothner
parent c0dae541cf
commit 0286a91d40
2 changed files with 14 additions and 12 deletions

View 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

View 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;
}