aboutsummaryrefslogtreecommitdiff
path: root/gcc/java/parse.y
diff options
context:
space:
mode:
authorAlexandre Petit-Bianco <apbianco@cygnus.com>1999-10-22 05:27:34 +0000
committerAlexandre Petit-Bianco <apbianco@gcc.gnu.org>1999-10-21 22:27:34 -0700
commit100f7cd8b9ea79bfef97fe723e220711c3e43385 (patch)
treedb668a8231c0e086a62c51a4d6c1e2fdbb0d73b9 /gcc/java/parse.y
parentd84319deb3c0a19ef89a4208b5c46454f17d55ad (diff)
downloadgcc-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.y20
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)
{