aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPer Bothner <bothner@gcc.gnu.org>1999-01-09 04:49:03 -0800
committerPer Bothner <bothner@gcc.gnu.org>1999-01-09 04:49:03 -0800
commit5bba48071ea0a7bc5f7fc9c9f6aaa6ca9dd24795 (patch)
tree8b541bdda189942d0be4e3a290c3fd7a9a585fb9 /gcc
parenta6b1d0a7435a9e1e3a43d317e8aa797f37faf3a5 (diff)
downloadgcc-5bba48071ea0a7bc5f7fc9c9f6aaa6ca9dd24795.zip
gcc-5bba48071ea0a7bc5f7fc9c9f6aaa6ca9dd24795.tar.gz
gcc-5bba48071ea0a7bc5f7fc9c9f6aaa6ca9dd24795.tar.bz2
parse.y (build_new_array_init): Don't set EXPR_WFL_LINECOL on CONSTRUCTOR (since that trashes TREE_CST_RTL).
d * parse.y (build_new_array_init): Don't set EXPR_WFL_LINECOL on CONSTRUCTOR (since that trashes TREE_CST_RTL). (patch_new_array_init): Clear TREE_CONSTANT also if INDIRECT_REF. (register_fields): Set TREE_STATIC on NEW_ARRAY_INIT, not on CONSTRUCTOR (which causes expand_expr to call output_constant_def). * expr.c (java_lang_expand_expr): Check TREE_STATIC of NEW_ARRAY_INIT. From-SVN: r24578
Diffstat (limited to 'gcc')
-rw-r--r--gcc/java/parse.c9
-rw-r--r--gcc/java/parse.y9
2 files changed, 12 insertions, 6 deletions
diff --git a/gcc/java/parse.c b/gcc/java/parse.c
index 78a0745..dc4e1a1 100644
--- a/gcc/java/parse.c
+++ b/gcc/java/parse.c
@@ -5776,7 +5776,7 @@ register_fields (flags, type, variable_list)
ctxp->static_initialized = init;
DECL_INITIAL (field_decl) = TREE_OPERAND (init, 1);
if (TREE_CODE (TREE_OPERAND (init, 1)) == NEW_ARRAY_INIT)
- TREE_STATIC (TREE_OPERAND (TREE_OPERAND (init, 1), 0)) = 1;
+ TREE_STATIC (TREE_OPERAND (init, 1)) = 1;
}
/* A non-static field declared with an immediate initialization is
to be initialized in <init>, if any. This field is remembered
@@ -12478,7 +12478,7 @@ build_new_array_init (location, values)
{
tree constructor = build (CONSTRUCTOR, NULL_TREE, NULL_TREE, values);
tree to_return = build1 (NEW_ARRAY_INIT, NULL_TREE, constructor);
- EXPR_WFL_LINECOL (to_return) = EXPR_WFL_LINECOL (constructor) = location;
+ EXPR_WFL_LINECOL (to_return) = location;
return to_return;
}
@@ -12515,7 +12515,10 @@ patch_new_array_init (type, node)
if (elt == NULL_TREE || TREE_CODE (elt) != NEW_ARRAY_INIT)
{
error_seen |= array_constructor_check_entry (element_type, current);
- if (! TREE_CONSTANT (TREE_VALUE (current)))
+ elt = TREE_VALUE (current);
+ /* When compiling to native code, STRING_CST is converted to
+ INDIRECT_REF, but still with a TREE_CONSTANT flag. */
+ if (! TREE_CONSTANT (elt) || TREE_CODE (elt) == INDIRECT_REF)
all_constant = 0;
}
else
diff --git a/gcc/java/parse.y b/gcc/java/parse.y
index 1680a68..25722e0 100644
--- a/gcc/java/parse.y
+++ b/gcc/java/parse.y
@@ -3138,7 +3138,7 @@ register_fields (flags, type, variable_list)
ctxp->static_initialized = init;
DECL_INITIAL (field_decl) = TREE_OPERAND (init, 1);
if (TREE_CODE (TREE_OPERAND (init, 1)) == NEW_ARRAY_INIT)
- TREE_STATIC (TREE_OPERAND (TREE_OPERAND (init, 1), 0)) = 1;
+ TREE_STATIC (TREE_OPERAND (init, 1)) = 1;
}
/* A non-static field declared with an immediate initialization is
to be initialized in <init>, if any. This field is remembered
@@ -9840,7 +9840,7 @@ build_new_array_init (location, values)
{
tree constructor = build (CONSTRUCTOR, NULL_TREE, NULL_TREE, values);
tree to_return = build1 (NEW_ARRAY_INIT, NULL_TREE, constructor);
- EXPR_WFL_LINECOL (to_return) = EXPR_WFL_LINECOL (constructor) = location;
+ EXPR_WFL_LINECOL (to_return) = location;
return to_return;
}
@@ -9877,7 +9877,10 @@ patch_new_array_init (type, node)
if (elt == NULL_TREE || TREE_CODE (elt) != NEW_ARRAY_INIT)
{
error_seen |= array_constructor_check_entry (element_type, current);
- if (! TREE_CONSTANT (TREE_VALUE (current)))
+ elt = TREE_VALUE (current);
+ /* When compiling to native code, STRING_CST is converted to
+ INDIRECT_REF, but still with a TREE_CONSTANT flag. */
+ if (! TREE_CONSTANT (elt) || TREE_CODE (elt) == INDIRECT_REF)
all_constant = 0;
}
else