Commit 0286a91d by Per Bothner Committed by Per Bothner

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
parent c0dae541
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
......
......@@ -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;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment