OSDN Git Service

* check-init.c (check_init): Don't allow pre- or post- increment
authortromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 9 Dec 2001 23:43:19 +0000 (23:43 +0000)
committertromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 9 Dec 2001 23:43:19 +0000 (23:43 +0000)
or decrement of final variable.
(final_assign_error): Minor error message rewording.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@47821 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/java/ChangeLog
gcc/java/check-init.c

index 08cc7f1..aa5a8df 100644 (file)
@@ -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.
index dfc355e..bc73ab2 100644 (file)
@@ -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;