diff options
-rw-r--r-- | gcc/java/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/java/check-init.c | 18 |
2 files changed, 19 insertions, 5 deletions
diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog index 08cc7f1..aa5a8df 100644 --- a/gcc/java/ChangeLog +++ b/gcc/java/ChangeLog @@ -1,3 +1,9 @@ +2001-12-09 Tom Tromey <tromey@redhat.com> + + * check-init.c (check_init): Don't allow pre- or post- increment + or decrement of final variable. + (final_assign_error): Minor error message rewording. + 2001-12-08 Tom Tromey <tromey@redhat.com> * java-tree.h: Fixed typo. diff --git a/gcc/java/check-init.c b/gcc/java/check-init.c index dfc355e..bc73ab2 100644 --- a/gcc/java/check-init.c +++ b/gcc/java/check-init.c @@ -196,7 +196,7 @@ final_assign_error (name) tree name; { static const char format[] - = "can't re-assign here a value to the final variable '%s'"; + = "can't reassign a value to the final variable '%s'"; parse_error_context (wfl, format, IDENTIFIER_POINTER (name)); } @@ -791,10 +791,6 @@ check_init (exp, before) case FIX_TRUNC_EXPR: case INDIRECT_REF: case ADDR_EXPR: - case PREDECREMENT_EXPR: - case PREINCREMENT_EXPR: - case POSTDECREMENT_EXPR: - case POSTINCREMENT_EXPR: case NON_LVALUE_EXPR: case INSTANCEOF_EXPR: case FIX_CEIL_EXPR: @@ -806,6 +802,18 @@ check_init (exp, before) exp = TREE_OPERAND (exp, 0); goto again; + case PREDECREMENT_EXPR: + case PREINCREMENT_EXPR: + case POSTDECREMENT_EXPR: + case POSTINCREMENT_EXPR: + tmp = get_variable_decl (TREE_OPERAND (exp, 0)); + if (tmp != NULL_TREE && DECL_FINAL (tmp)) + final_assign_error (DECL_NAME (tmp)); + + /* Avoid needless recursion. */ + exp = TREE_OPERAND (exp, 0); + goto again; + case SAVE_EXPR: if (IS_INIT_CHECKED (exp)) return; |