make TS_BLOCK a substructure of TS_BASE
authorNathan Froyd <froydnj@codesourcery.com>
Thu, 26 May 2011 17:38:51 +0000 (17:38 +0000)
committerNathan Froyd <froydnj@gcc.gnu.org>
Thu, 26 May 2011 17:38:51 +0000 (17:38 +0000)
make TS_BLOCK a substructure of TS_BASE
gcc/
* tree.c (initialize_tree_contains_struct): Mark TS_BLOCK as
TS_BASE instead of TS_COMMON.
(find_decls_types_r): Check for TS_TYPED structure before looking at
TREE_TYPE.
* tree.h (struct tree_block): Inherit from tree_base, not tree_common.
Add chain field.
(BLOCK_CHAIN): Use new chain field.

gcc/c-family/
* c-common.c (warning_candidate_p): Check for BLOCKs.

gcc/java/
* decl.c (poplevel): Don't access TREE_TYPE of BLOCKs.
* expr.c (build_jni_stub): Likewise.

From-SVN: r174300

gcc/ChangeLog
gcc/c-family/ChangeLog
gcc/c-family/c-common.c
gcc/java/ChangeLog
gcc/java/decl.c
gcc/java/expr.c
gcc/tree.c
gcc/tree.h

index e72b14439e0c5e51e2696cd47fcfff77a1e0394f..eb152d6bf21da38c8093e5f1b9d1a2ff60c67c0a 100644 (file)
@@ -1,3 +1,13 @@
+2011-05-26  Nathan Froyd  <froydnj@codesourcery.com>
+
+       * tree.c (initialize_tree_contains_struct): Mark TS_BLOCK as
+       TS_BASE instead of TS_COMMON.
+       (find_decls_types_r): Check for TS_TYPED structure before looking at
+       TREE_TYPE.
+       * tree.h (struct tree_block): Inherit from tree_base, not tree_common.
+       Add chain field.
+       (BLOCK_CHAIN): Use new chain field.
+
 2011-05-26  Pat Haugen <pthaugen@us.ibm.com>
 
        * config/rs6000/rs6000.c (rs6000_register_move_cost): Make LR/CTR
index f9a38af4b3c77985055a7b0c8c063c2fc070227f..f15bd2f9f4bf08f15a3ab0783178e2312fd0e4fa 100644 (file)
@@ -1,3 +1,7 @@
+2011-05-26  Nathan Froyd  <froydnj@codesourcery.com>
+
+       * c-common.c (warning_candidate_p): Check for BLOCKs.
+
 2011-05-26  Nathan Froyd  <froydnj@codesourcery.com>
 
        * c-common.h (struct c_common_identifier): Inherit from tree_typed,
index 2d4e4927c741584457f3f3ba6104e85e4e1696ba..fa7ebc5d30d7ba2e5aca15d1829284bc1ae086fc 100644 (file)
@@ -2367,6 +2367,9 @@ warning_candidate_p (tree x)
   if (DECL_P (x) && DECL_ARTIFICIAL (x))
     return 0;
 
+  if (TREE_CODE (x) == BLOCK)
+    return 0;
+
   /* VOID_TYPE_P (TREE_TYPE (x)) is workaround for cp/tree.c
      (lvalue_p) crash on TRY/CATCH. */
   if (TREE_TYPE (x) == NULL_TREE || VOID_TYPE_P (TREE_TYPE (x)))
index 3bf7405d8e1ba73f1b88ef05ca1edb4c630517ac..62add859dd71939dc83a7191fced7bc78a482928 100644 (file)
@@ -1,3 +1,8 @@
+2011-05-26  Nathan Froyd  <froydnj@codesourcery.com>
+
+       * decl.c (poplevel): Don't access TREE_TYPE of BLOCKs.
+       * expr.c (build_jni_stub): Likewise.
+
 2011-05-24  Joseph Myers  <joseph@codesourcery.com>
 
        * Make-lang.in ($(XGCJ)$(exeext)): Use libcommon-target.a instead
index 47b4ebe8de97ac850588689ae07dbc95f9cc8de1..e95813680881bb31917567d2718d0a3857c6b5ff 100644 (file)
@@ -1425,10 +1425,7 @@ poplevel (int keep, int reverse, int functionbody)
 
   block = 0;
   if (keep || functionbody)
-    {
-      block = make_node (BLOCK);
-      TREE_TYPE (block) = void_type_node;
-    }
+    block = make_node (BLOCK);
 
   if (current_binding_level->exception_range)
     expand_end_java_handler (current_binding_level->exception_range);
@@ -1456,7 +1453,7 @@ poplevel (int keep, int reverse, int functionbody)
            }
          *var = NULL;
            
-         bind = build3 (BIND_EXPR, TREE_TYPE (block), BLOCK_VARS (block), 
+         bind = build3 (BIND_EXPR, void_type_node, BLOCK_VARS (block), 
                         BLOCK_EXPR_BODY (block), block);
          BIND_EXPR_BODY (bind) = current_binding_level->stmts;
          
index 3be1cff7d3fa21042176ceb0b2b5661a0686d59e..b9293e0ca4e98ec84c152e57ae7e7645161a6332 100644 (file)
@@ -2649,7 +2649,6 @@ build_jni_stub (tree method)
   method_args = DECL_ARGUMENTS (method);
   block = build_block (env_var, NULL_TREE, method_args, NULL_TREE);
   TREE_SIDE_EFFECTS (block) = 1;
-  TREE_TYPE (block) = TREE_TYPE (TREE_TYPE (method));
 
   /* Compute the local `env' by calling _Jv_GetJNIEnvNewFrame.  */
   body = build2 (MODIFY_EXPR, ptr_type_node, env_var,
index 2738979c77ece66646b2239a54436a0b5e78d86a..178873c84773edb124fd2b9058dacda49c484841 100644 (file)
@@ -368,6 +368,7 @@ initialize_tree_contains_struct (void)
       switch (ts_code)
        {
        case TS_TYPED:
+       case TS_BLOCK:
          MARK_TS_BASE (code);
          break;
 
@@ -389,7 +390,6 @@ initialize_tree_contains_struct (void)
        case TS_TYPE_COMMON:
        case TS_LIST:
        case TS_VEC:
-       case TS_BLOCK:
        case TS_BINFO:
        case TS_STATEMENT_LIST:
        case TS_OMP_CLAUSE:
@@ -4892,7 +4892,8 @@ find_decls_types_r (tree *tp, int *ws, void *data)
       fld_worklist_push (BLOCK_ABSTRACT_ORIGIN (t), fld);
     }
 
-  if (TREE_CODE (t) != IDENTIFIER_NODE)
+  if (TREE_CODE (t) != IDENTIFIER_NODE
+      && CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_TYPED))
     fld_worklist_push (TREE_TYPE (t), fld);
 
   return NULL_TREE;
index ce01fb7d7570023cf3b591bd1d1e8fbb44bf602e..e214b12aac7a654908f67a38b30988e639623c00 100644 (file)
@@ -2051,9 +2051,7 @@ struct GTY(()) tree_omp_clause {
   VEC_index (tree, BLOCK_NONLOCALIZED_VARS (NODE), N)
 #define BLOCK_SUBBLOCKS(NODE) (BLOCK_CHECK (NODE)->block.subblocks)
 #define BLOCK_SUPERCONTEXT(NODE) (BLOCK_CHECK (NODE)->block.supercontext)
-/* Note: when changing this, make sure to find the places
-   that use chainon or nreverse.  */
-#define BLOCK_CHAIN(NODE) TREE_CHAIN (BLOCK_CHECK (NODE))
+#define BLOCK_CHAIN(NODE) (BLOCK_CHECK (NODE)->block.chain)
 #define BLOCK_ABSTRACT_ORIGIN(NODE) (BLOCK_CHECK (NODE)->block.abstract_origin)
 #define BLOCK_ABSTRACT(NODE) (BLOCK_CHECK (NODE)->block.abstract_flag)
 
@@ -2094,7 +2092,8 @@ struct GTY(()) tree_omp_clause {
 #define BLOCK_SOURCE_LOCATION(NODE) (BLOCK_CHECK (NODE)->block.locus)
 
 struct GTY(()) tree_block {
-  struct tree_common common;
+  struct tree_base base;
+  tree chain;
 
   unsigned abstract_flag : 1;
   unsigned block_num : 31;