From d7a60f715c1506baaa58d4d5c4f0104eab910d98 Mon Sep 17 00:00:00 2001 From: bothner Date: Sat, 9 Jan 1999 12:49:03 +0000 Subject: [PATCH] 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@24578 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/java/parse.c | 9 ++++++--- gcc/java/parse.y | 9 ++++++--- 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 , 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 , 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 -- 2.7.4