diff options
author | Per Bothner <bothner@gcc.gnu.org> | 1999-05-05 14:10:07 -0700 |
---|---|---|
committer | Per Bothner <bothner@gcc.gnu.org> | 1999-05-05 14:10:07 -0700 |
commit | cd9643f75b2f7bc41642bd988532a03ba923c3f4 (patch) | |
tree | 6125e0290d9b6e83ae6f4e2dd48bdf11dfdaa937 /gcc/java/class.c | |
parent | c14cff58e5c6d6052e940cb1adf03733154ec9b6 (diff) | |
download | gcc-cd9643f75b2f7bc41642bd988532a03ba923c3f4.zip gcc-cd9643f75b2f7bc41642bd988532a03ba923c3f4.tar.gz gcc-cd9643f75b2f7bc41642bd988532a03ba923c3f4.tar.bz2 |
class.c (make_field_value): DECL_INITIAL may be a string literal...
d
* class.c (make_field_value): DECL_INITIAL may be a string literal;
temporarily zero it while calling rest_of_decl_compilation.
* java-tree.h (string_ptr_type_node): Add declaration.
* decl.c: Define and initialize string_ptr_type_node.
* parse.y (patch_string_cst): Use string_ptr_type_node.
* parse.h (LOOP_HAS_LABEL_P, LOOP_HAS_LABEL_SKIP_P): Removed.
* parse.y (for_statement): Now unconditionally exit_block.
(finish_labeled_statement): No longer exit_block if for-loop.
(patch_loop_statement): Check harder if the loop is already labeled.
* parse.y (patch_initialized_static_field): Removed function.
(maybe_generate_clinit): Removed special handling for interfaces.
(java_complete_expand_methods): Do a preliminary java_complete_tree
on <clinit> to determine if it can be removed.
(java_complete_expand_method): Remove special handling for <clinit>.
(java_complete_lhs): For BLOCK and EXPR_WITH_FILE_LOCATION
optimize if we get back empty_stmt_node.
For MODIFY_EXPR, re-do checking of static initializers.
(fold_constant_for_init): Don't return immediate if VAR_DECL.
For VAR_DECL, pass correct context.
From-SVN: r26790
Diffstat (limited to 'gcc/java/class.c')
-rw-r--r-- | gcc/java/class.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/gcc/java/class.c b/gcc/java/class.c index e7f72ae..2e00e74 100644 --- a/gcc/java/class.c +++ b/gcc/java/class.c @@ -1025,9 +1025,16 @@ make_class_data (type) tree init = make_field_value (field); if (FIELD_STATIC (field)) { + tree initial = DECL_INITIAL (field); static_field_count++; static_fields = tree_cons (NULL_TREE, init, static_fields); + /* If the initial value is a string constant, + prevent output_constant from trying to assemble the value. */ + if (initial != NULL_TREE + && TREE_TYPE (initial) == string_ptr_type_node) + DECL_INITIAL (field) = NULL_TREE; rest_of_decl_compilation (field, (char*) 0, 1, 1); + DECL_INITIAL (field) = initial; } else { |