From 92e948a836d98e98a1721008795dfddbb47828a6 Mon Sep 17 00:00:00 2001 From: Nathan Froyd Date: Thu, 26 May 2011 17:38:51 +0000 Subject: [PATCH] make TS_BLOCK a substructure of TS_BASE 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 | 10 ++++++++++ gcc/c-family/ChangeLog | 4 ++++ gcc/c-family/c-common.c | 3 +++ gcc/java/ChangeLog | 5 +++++ gcc/java/decl.c | 7 ++----- gcc/java/expr.c | 1 - gcc/tree.c | 5 +++-- gcc/tree.h | 7 +++---- 8 files changed, 30 insertions(+), 12 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e72b14439e0..eb152d6bf21 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2011-05-26 Nathan Froyd + + * 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 * config/rs6000/rs6000.c (rs6000_register_move_cost): Make LR/CTR diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index f9a38af4b3c..f15bd2f9f4b 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,7 @@ +2011-05-26 Nathan Froyd + + * c-common.c (warning_candidate_p): Check for BLOCKs. + 2011-05-26 Nathan Froyd * c-common.h (struct c_common_identifier): Inherit from tree_typed, diff --git a/gcc/c-family/c-common.c b/gcc/c-family/c-common.c index 2d4e4927c74..fa7ebc5d30d 100644 --- a/gcc/c-family/c-common.c +++ b/gcc/c-family/c-common.c @@ -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))) diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog index 3bf7405d8e1..62add859dd7 100644 --- a/gcc/java/ChangeLog +++ b/gcc/java/ChangeLog @@ -1,3 +1,8 @@ +2011-05-26 Nathan Froyd + + * decl.c (poplevel): Don't access TREE_TYPE of BLOCKs. + * expr.c (build_jni_stub): Likewise. + 2011-05-24 Joseph Myers * Make-lang.in ($(XGCJ)$(exeext)): Use libcommon-target.a instead diff --git a/gcc/java/decl.c b/gcc/java/decl.c index 47b4ebe8de9..e9581368088 100644 --- a/gcc/java/decl.c +++ b/gcc/java/decl.c @@ -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; diff --git a/gcc/java/expr.c b/gcc/java/expr.c index 3be1cff7d3f..b9293e0ca4e 100644 --- a/gcc/java/expr.c +++ b/gcc/java/expr.c @@ -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, diff --git a/gcc/tree.c b/gcc/tree.c index 2738979c77e..178873c8477 100644 --- a/gcc/tree.c +++ b/gcc/tree.c @@ -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; diff --git a/gcc/tree.h b/gcc/tree.h index ce01fb7d757..e214b12aac7 100644 --- a/gcc/tree.h +++ b/gcc/tree.h @@ -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; -- 2.30.2