re PR java/15576 (Class initialization optimization is disabled)
authorAndrew Pinski <pinskia@physics.uc.edu>
Tue, 9 Nov 2004 14:33:32 +0000 (14:33 +0000)
committerAndrew Pinski <pinskia@gcc.gnu.org>
Tue, 9 Nov 2004 14:33:32 +0000 (06:33 -0800)
2004-11-09  Andrew Pinski  <pinskia@physics.uc.edu>

        PR java/15576
        * check-init.c (check_init): Ignore DECL_EXPR.
        * expr.c (always_initialize_class_p): Reenable.
        (build_class_init): Use a variable to store the decl.  Also use
        boolean_false_node instead of integer_zero_node.
        * parse.y (attach_init_test_initialization_flags): Add a decl_expr
        to the block.

From-SVN: r90343

gcc/java/ChangeLog
gcc/java/check-init.c
gcc/java/expr.c
gcc/java/parse.y

index 7b4ba0d01df7da1730e909c09bd69072f48f5615..7342e8c2104ae3611f8b1d33ef821ba89b6e360a 100644 (file)
@@ -1,3 +1,13 @@
+2004-11-09  Andrew Pinski  <pinskia@physics.uc.edu>
+
+       PR java/15576
+       * check-init.c (check_init): Ignore DECL_EXPR.
+       * expr.c (always_initialize_class_p): Reenable.
+       (build_class_init): Use a variable to store the decl.  Also use
+       boolean_false_node instead of integer_zero_node.
+       * parse.y (attach_init_test_initialization_flags): Add a decl_expr
+       to the block.
+
 2004-11-08  Tom Tromey  <tromey@redhat.com>
 
        PR java/16843:
index 1a86c80e3640b64b631147fb0024abceb6f9a0b8..dacc4b914b53fd4c8cd7afbedd75ee766958339c 100644 (file)
@@ -844,6 +844,7 @@ check_init (tree exp, words before)
     case INTEGER_CST:
     case REAL_CST:
     case STRING_CST:
+    case DECL_EXPR:
     case JAVA_EXC_OBJ_EXPR:
       break;
 
index 70156cf80f9ed18bfdf643da3a963888c43988c2..deb75a9e7f9f86d39db36201d40e92d8191e9435 100644 (file)
@@ -95,8 +95,7 @@ tree dtable_ident = NULL_TREE;
 
 /* Set to nonzero value in order to emit class initialization code
    before static field references.  */
-/* FIXME: Make this work with gimplify.  */
-int always_initialize_class_p = 1;
+int always_initialize_class_p = 0;
 
 /* We store the stack state in two places:
    Within a basic block, we use the quick_stack, which is a
@@ -1768,6 +1767,7 @@ build_class_init (tree clas, tree expr)
   else
     {
       tree *init_test_decl;
+      tree decl;
       init_test_decl = java_treetreehash_new
        (DECL_FUNCTION_INIT_TEST_TABLE (current_function_decl), clas);
 
@@ -1775,19 +1775,20 @@ build_class_init (tree clas, tree expr)
        {
          /* Build a declaration and mark it as a flag used to track
             static class initializations. */
-         *init_test_decl = build_decl (VAR_DECL, NULL_TREE,
-                                      boolean_type_node);
-         MAYBE_CREATE_VAR_LANG_DECL_SPECIFIC (*init_test_decl);
-         LOCAL_CLASS_INITIALIZATION_FLAG (*init_test_decl) = 1;
-         DECL_CONTEXT (*init_test_decl) = current_function_decl;
-         DECL_FUNCTION_INIT_TEST_CLASS (*init_test_decl) = clas;
+         decl = build_decl (VAR_DECL, NULL_TREE,
+                            boolean_type_node);
+         MAYBE_CREATE_VAR_LANG_DECL_SPECIFIC (decl);
+         LOCAL_CLASS_INITIALIZATION_FLAG (decl) = 1;
+         DECL_CONTEXT (decl) = current_function_decl;
+         DECL_FUNCTION_INIT_TEST_CLASS (decl) = clas;
          /* Tell the check-init code to ignore this decl when not
              optimizing class initialization. */
          if (!STATIC_CLASS_INIT_OPT_P ())
-           DECL_BIT_INDEX(*init_test_decl) = -1;
-         DECL_INITIAL (*init_test_decl) = integer_zero_node;
+           DECL_BIT_INDEX (decl) = -1;
+         DECL_INITIAL (decl) = boolean_false_node;
          /* Don't emit any symbolic debugging info for this decl.  */
-         DECL_IGNORED_P (*init_test_decl) = 1;
+         DECL_IGNORED_P (decl) = 1;      
+         *init_test_decl = decl;
        }
 
       init = build3 (CALL_EXPR, void_type_node,
index a2d09bbc7dbf0af410000a3861caa727087296a6..d02a448c7907caaf51b0d6c266b085f9669588cf 100644 (file)
@@ -16350,8 +16350,12 @@ attach_init_test_initialization_flags (void **entry, void *ptr)
 
   if (block != error_mark_node)
     {
+      tree body = BLOCK_SUBBLOCKS (block);
       TREE_CHAIN (ite->value) = BLOCK_EXPR_DECLS (block);
       BLOCK_EXPR_DECLS (block) = ite->value;
+      body = build2 (COMPOUND_EXPR, void_type_node,
+                     build1 (DECL_EXPR, void_type_node, ite->value), body);
+      BLOCK_SUBBLOCKS (block) = body;
     }
   return true;
 }