mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-10 01:20:56 +08:00
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
This commit is contained in:
parent
0bc371d376
commit
a58d74533c
@ -1,3 +1,11 @@
|
||||
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>
|
||||
|
||||
* lang.c (flag_new_verifier): Define.
|
||||
|
@ -164,6 +164,11 @@ static void check_final_reassigned (tree, words);
|
||||
static tree
|
||||
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_STATIC (exp) || FIELD_FINAL (exp))
|
||||
|
@ -1922,4 +1922,6 @@ extern tree build_expr_wfl PARAMS ((tree, const char *, int, int));
|
||||
extern void java_genericize PARAMS ((tree));
|
||||
extern int java_gimplify_expr PARAMS ((tree *, tree *, tree *));
|
||||
|
||||
extern tree extract_field_decl (tree);
|
||||
|
||||
#endif /* ! GCC_JAVA_TREE_H */
|
||||
|
@ -277,7 +277,6 @@ static tree maybe_build_array_element_wfl (tree);
|
||||
static int array_constructor_check_entry (tree, tree);
|
||||
static const char *purify_type_name (const char *);
|
||||
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 void static_ref_err (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)
|
||||
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
|
||||
NODE. */
|
||||
|
||||
static tree
|
||||
strip_out_static_field_access_decl (tree node)
|
||||
tree
|
||||
extract_field_decl (tree node)
|
||||
{
|
||||
if (TREE_CODE (node) == COMPOUND_EXPR)
|
||||
{
|
||||
@ -14260,7 +14259,7 @@ patch_unaryop (tree node, tree wfl_op)
|
||||
case PREINCREMENT_EXPR:
|
||||
/* 15.14.2 Prefix Decrement Operator -- */
|
||||
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);
|
||||
/* We might be trying to change an outer field accessed using
|
||||
access method. */
|
||||
|
Loading…
x
Reference in New Issue
Block a user