diff options
author | Alexandre Petit-Bianco <apbianco@cygnus.com> | 1999-10-22 05:27:34 +0000 |
---|---|---|
committer | Alexandre Petit-Bianco <apbianco@gcc.gnu.org> | 1999-10-21 22:27:34 -0700 |
commit | 100f7cd8b9ea79bfef97fe723e220711c3e43385 (patch) | |
tree | db668a8231c0e086a62c51a4d6c1e2fdbb0d73b9 /gcc/java/parse.y | |
parent | d84319deb3c0a19ef89a4208b5c46454f17d55ad (diff) | |
download | gcc-100f7cd8b9ea79bfef97fe723e220711c3e43385.zip gcc-100f7cd8b9ea79bfef97fe723e220711c3e43385.tar.gz gcc-100f7cd8b9ea79bfef97fe723e220711c3e43385.tar.bz2 |
re GNATS gcj/37 (gcj fails to compile "jBYTEmark" from source code when optimization is used)
Wed Oct 20 01:41:47 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (java_complete_tree): fold_constant_for_init to work on
permanent_obstack.
(java_complete_lhs): Likewise.
(array_constructor_check_entry): Complete an initializer element
on permanent_obstack.
This patch fixes the net PR #37
(http://sourceware.cygnus.com/ml/java-prs/1999-q3/msg00043.html)
From-SVN: r30126
Diffstat (limited to 'gcc/java/parse.y')
-rw-r--r-- | gcc/java/parse.y | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/gcc/java/parse.y b/gcc/java/parse.y index 0459ed3..1fabf80 100644 --- a/gcc/java/parse.y +++ b/gcc/java/parse.y @@ -8028,7 +8028,9 @@ java_complete_tree (node) { tree value = DECL_INITIAL (node); DECL_INITIAL (node) = NULL_TREE; + push_obstacks (&permanent_obstack, &permanent_obstack); value = fold_constant_for_init (value, node); + pop_obstacks (); DECL_INITIAL (node) = value; if (value != NULL_TREE) return value; @@ -8230,8 +8232,12 @@ java_complete_lhs (node) && JDECL_P (TREE_OPERAND (cn, 1)) && FIELD_FINAL (TREE_OPERAND (cn, 1)) && DECL_INITIAL (TREE_OPERAND (cn, 1))) - cn = fold_constant_for_init (DECL_INITIAL (TREE_OPERAND (cn, 1)), - TREE_OPERAND (cn, 1)); + { + push_obstacks (&permanent_obstack, &permanent_obstack); + cn = fold_constant_for_init (DECL_INITIAL (TREE_OPERAND (cn, 1)), + TREE_OPERAND (cn, 1)); + pop_obstacks (); + } if (!TREE_CONSTANT (cn) && !flag_emit_xref) { @@ -8484,7 +8490,11 @@ java_complete_lhs (node) && TREE_CODE (nn) == VAR_DECL && TREE_STATIC (nn) && DECL_INITIAL (nn) != NULL_TREE) { - tree value = fold_constant_for_init (nn, nn); + tree value; + + push_obstacks (&permanent_obstack, &permanent_obstack); + value = fold_constant_for_init (nn, nn); + pop_obstacks (); if (value != NULL_TREE) { tree type = TREE_TYPE (value); @@ -10871,6 +10881,7 @@ array_constructor_check_entry (type, entry) new_value = NULL_TREE; wfl_value = TREE_VALUE (entry); + push_obstacks (&permanent_obstack, &permanent_obstack); value = java_complete_tree (TREE_VALUE (entry)); /* patch_string return error_mark_node if arg is error_mark_node */ if ((patched = patch_string (value))) @@ -10886,7 +10897,8 @@ array_constructor_check_entry (type, entry) new_value = try_builtin_assignconv (wfl_operator, type, value); if (!new_value && (new_value = try_reference_assignconv (type, value))) type_value = promote_type (type); - + + pop_obstacks (); /* Check and report errors */ if (!new_value) { |