Commit a58d7453 by Tom Tromey Committed by Tom Tromey

re PR java/14853 (Assignment to final field permitted when compiling to native)

	PR java/14853:
	* java-tree.h (extract_field_decl): Declare.
	* parse.y (extract_field_decl): Renamed from
	strip_out_static_field_access_decl.  No longer static.
	* check-init.c (get_variable_decl): Unwrap COMPOUND_EXPRs.

From-SVN: r91778
parent 0bc371d3
2004-12-06 Tom Tromey <tromey@redhat.com>
PR java/14853:
* java-tree.h (extract_field_decl): Declare.
* parse.y (extract_field_decl): Renamed from
strip_out_static_field_access_decl. No longer static.
* check-init.c (get_variable_decl): Unwrap COMPOUND_EXPRs.
2004-12-03 Tom Tromey <tromey@redhat.com> 2004-12-03 Tom Tromey <tromey@redhat.com>
* lang.c (flag_new_verifier): Define. * lang.c (flag_new_verifier): Define.
......
...@@ -164,6 +164,11 @@ static void check_final_reassigned (tree, words); ...@@ -164,6 +164,11 @@ static void check_final_reassigned (tree, words);
static tree static tree
get_variable_decl (tree exp) get_variable_decl (tree exp)
{ {
/* A static field can be wrapped in a COMPOUND_EXPR where the first
argument initializes the class. */
if (TREE_CODE (exp) == COMPOUND_EXPR)
exp = extract_field_decl (exp);
if (TREE_CODE (exp) == VAR_DECL) if (TREE_CODE (exp) == VAR_DECL)
{ {
if (! TREE_STATIC (exp) || FIELD_FINAL (exp)) if (! TREE_STATIC (exp) || FIELD_FINAL (exp))
......
...@@ -1922,4 +1922,6 @@ extern tree build_expr_wfl PARAMS ((tree, const char *, int, int)); ...@@ -1922,4 +1922,6 @@ extern tree build_expr_wfl PARAMS ((tree, const char *, int, int));
extern void java_genericize PARAMS ((tree)); extern void java_genericize PARAMS ((tree));
extern int java_gimplify_expr PARAMS ((tree *, tree *, tree *)); extern int java_gimplify_expr PARAMS ((tree *, tree *, tree *));
extern tree extract_field_decl (tree);
#endif /* ! GCC_JAVA_TREE_H */ #endif /* ! GCC_JAVA_TREE_H */
...@@ -277,7 +277,6 @@ static tree maybe_build_array_element_wfl (tree); ...@@ -277,7 +277,6 @@ static tree maybe_build_array_element_wfl (tree);
static int array_constructor_check_entry (tree, tree); static int array_constructor_check_entry (tree, tree);
static const char *purify_type_name (const char *); static const char *purify_type_name (const char *);
static tree fold_constant_for_init (tree, tree); static tree fold_constant_for_init (tree, tree);
static tree strip_out_static_field_access_decl (tree);
static jdeplist *reverse_jdep_list (struct parser_ctxt *); static jdeplist *reverse_jdep_list (struct parser_ctxt *);
static void static_ref_err (tree, tree, tree); static void static_ref_err (tree, tree, tree);
static void parser_add_interface (tree, tree, tree); static void parser_add_interface (tree, tree, tree);
...@@ -9678,12 +9677,12 @@ resolve_field_access (tree qual_wfl, tree *field_decl, tree *field_type) ...@@ -9678,12 +9677,12 @@ resolve_field_access (tree qual_wfl, tree *field_decl, tree *field_type)
return field_ref; return field_ref;
} }
/* If NODE is an access to f static field, strip out the class /* If NODE is an access to a static field, strip out the class
initialization part and return the field decl, otherwise, return initialization part and return the field decl, otherwise, return
NODE. */ NODE. */
static tree tree
strip_out_static_field_access_decl (tree node) extract_field_decl (tree node)
{ {
if (TREE_CODE (node) == COMPOUND_EXPR) if (TREE_CODE (node) == COMPOUND_EXPR)
{ {
...@@ -14260,7 +14259,7 @@ patch_unaryop (tree node, tree wfl_op) ...@@ -14260,7 +14259,7 @@ patch_unaryop (tree node, tree wfl_op)
case PREINCREMENT_EXPR: case PREINCREMENT_EXPR:
/* 15.14.2 Prefix Decrement Operator -- */ /* 15.14.2 Prefix Decrement Operator -- */
case PREDECREMENT_EXPR: case PREDECREMENT_EXPR:
op = decl = strip_out_static_field_access_decl (op); op = decl = extract_field_decl (op);
outer_field_flag = outer_field_expanded_access_p (op, NULL, NULL, NULL); outer_field_flag = outer_field_expanded_access_p (op, NULL, NULL, NULL);
/* We might be trying to change an outer field accessed using /* We might be trying to change an outer field accessed using
access method. */ access method. */
......
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