summaryrefslogtreecommitdiff
path: root/gcc/java
diff options
context:
space:
mode:
authorapbianco <apbianco@138bc75d-0d04-0410-961f-82ee72b054a4>2001-09-27 19:20:12 +0000
committerapbianco <apbianco@138bc75d-0d04-0410-961f-82ee72b054a4>2001-09-27 19:20:12 +0000
commit2ecece8f7dc297831d2161ab6b02c5952d20628f (patch)
treeb821a55f43ed8466b11677e96c7cab18c8effb63 /gcc/java
parent1accc298db89f1feaf99a18bb8fd27c5c703bbf3 (diff)
downloadgcc-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/ChangeLog9
-rw-r--r--gcc/java/parse.y19
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