diff options
author | apbianco <apbianco@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-09-27 19:20:12 +0000 |
---|---|---|
committer | apbianco <apbianco@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-09-27 19:20:12 +0000 |
commit | 2ecece8f7dc297831d2161ab6b02c5952d20628f (patch) | |
tree | b821a55f43ed8466b11677e96c7cab18c8effb63 /gcc/java | |
parent | 1accc298db89f1feaf99a18bb8fd27c5c703bbf3 (diff) | |
download | gcc-2ecece8f7dc297831d2161ab6b02c5952d20628f.tar.gz |
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 )
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@45844 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/java')
-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 8ce096a2851..53b1ce6dc43 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 9a0656a3e62..154fef3f699 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 |