From 2ecece8f7dc297831d2161ab6b02c5952d20628f Mon Sep 17 00:00:00 2001 From: apbianco Date: Thu, 27 Sep 2001 19:20:12 +0000 Subject: [PATCH] 2001-09-26 Alexandre Petit-Bianco * 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 --- gcc/java/ChangeLog | 9 +++++++++ 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 + + * 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 * 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 -- 2.7.4