diff options
author | Alexandre Petit-Bianco <apbianco@redhat.com> | 2001-09-27 12:20:12 -0700 |
---|---|---|
committer | Alexandre Petit-Bianco <apbianco@gcc.gnu.org> | 2001-09-27 12:20:12 -0700 |
commit | e9546ca4386cf16a15b3969b277e8a99aba88828 (patch) | |
tree | b821a55f43ed8466b11677e96c7cab18c8effb63 | |
parent | 595207883411f36ea954689e229ff188e29c0ba1 (diff) | |
download | gcc-e9546ca4386cf16a15b3969b277e8a99aba88828.zip gcc-e9546ca4386cf16a15b3969b277e8a99aba88828.tar.gz gcc-e9546ca4386cf16a15b3969b277e8a99aba88828.tar.bz2 |
parse.y (check_final_variable_indirect_assignment): For COMPOUND_EXPR...
2001-09-26 Alexandre Petit-Bianco <apbianco@redhat.com>
* parse.y (check_final_variable_indirect_assignment): For
COMPOUND_EXPR, return only if finals were found initialized
properly, if not, keep on checking.
(check_final_variable_global_assignment_flag): New local
error_found, set when appropriate and used to decide whether to
report uninitialized finals. Fixed typo in comment.
( http://gcc.gnu.org/ml/gcc-patches/2001-09/msg01160.html )
From-SVN: r45844
-rw-r--r-- | gcc/java/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/java/parse.y | 19 |
2 files changed, 20 insertions, 8 deletions
diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog index 8ce096a..53b1ce6 100644 --- a/gcc/java/ChangeLog +++ b/gcc/java/ChangeLog @@ -1,3 +1,12 @@ +2001-09-26 Alexandre Petit-Bianco <apbianco@redhat.com> + + * parse.y (check_final_variable_indirect_assignment): For + COMPOUND_EXPR, return only if finals were found initialized + properly, if not, keep on checking. + (check_final_variable_global_assignment_flag): New local + error_found, set when appropriate and used to decide whether to + report uninitialized finals. Fixed typo in comment. + 2001-09-22 Alexandre Petit-Bianco <apbianco@redhat.com> * decl.c (init_decl_processing): Fixed typo in predef_filenames diff --git a/gcc/java/parse.y b/gcc/java/parse.y index 9a0656a..154fef3 100644 --- a/gcc/java/parse.y +++ b/gcc/java/parse.y @@ -12638,7 +12638,7 @@ check_final_variable_indirect_assignment (stmt) return check_final_variable_indirect_assignment (EXPR_WFL_NODE (stmt)); case COMPOUND_EXPR: res = check_final_variable_indirect_assignment (TREE_OPERAND (stmt, 0)); - if (res) + if (res > 0) return res; return check_final_variable_indirect_assignment (TREE_OPERAND (stmt, 1)); case SAVE_EXPR: @@ -12679,6 +12679,7 @@ check_final_variable_global_assignment_flag (class) { tree field, mdecl; int nnctor = 0; + int error_found = 0; /* We go through all natural ctors and see whether they're initializing all their final variables or not. */ @@ -12700,9 +12701,12 @@ check_final_variable_global_assignment_flag (class) nnctor++; } else - parse_error_context - (lookup_cl (mdecl), - "Final variable initialization error in this constructor"); + { + parse_error_context + (lookup_cl (mdecl), + "Final variable initialization error in this constructor"); + error_found = 1; + } } else nnctor++; @@ -12713,9 +12717,9 @@ check_final_variable_global_assignment_flag (class) if (FINAL_VARIABLE_P (field) /* If the field wasn't initialized upon declaration */ && !DECL_FIELD_FINAL_IUD (field) - /* There wasn't natural ctor in which the field could have been - initialized */ - && !nnctor + /* There wasn't a natural ctor in which the field could have been + initialized or we found an error looking for one. */ + && (error_found || !nnctor) /* If we never reported a problem with this field */ && !DECL_FIELD_FINAL_IERR (field)) { @@ -12725,7 +12729,6 @@ check_final_variable_global_assignment_flag (class) "Final variable `%s' hasn't been initialized upon its declaration", IDENTIFIER_POINTER (DECL_NAME (field))); } - } /* Return 1 if an assignment to a FINAL is attempted in a non suitable |