diff options
Diffstat (limited to 'gcc/java/check-init.c')
-rw-r--r-- | gcc/java/check-init.c | 18 |
1 files changed, 13 insertions, 5 deletions
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; |