diff options
Diffstat (limited to 'gcc/cp')
-rw-r--r-- | gcc/cp/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/cp/cp-lang.c | 22 | ||||
-rw-r--r-- | gcc/cp/cp-objcp-common.c | 73 | ||||
-rw-r--r-- | gcc/cp/cp-objcp-common.h | 1 | ||||
-rw-r--r-- | gcc/cp/cp-tree.h | 2 |
5 files changed, 86 insertions, 22 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 21a9377..63dbaf0 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,13 @@ +2011-04-12 Nathan Froyd <froydnj@codesourcery.com> + + * cp-lang.c (cp_init_ts): Call cp_common_init_ts. Move + tree_contains_struct initialization to... + * cp-objcp-common.c (cp_common_init_ts): ...here. Use MARK_* + macros. + * cp-objcp-common.h (cp_common_init_ts): Declare. + * cp-tree.h (union lang_tree_node): Check for TS_COMMON before + calling TREE_CHAIN. + 2011-04-12 Nicola Pero <nicola.pero@meta-innovation.com> * parser.c (cp_parser_objc_message_expression): Updated call diff --git a/gcc/cp/cp-lang.c b/gcc/cp/cp-lang.c index 42fbdff..7b1f450 100644 --- a/gcc/cp/cp-lang.c +++ b/gcc/cp/cp-lang.c @@ -101,32 +101,12 @@ objcp_tsubst_copy_and_build (tree t ATTRIBUTE_UNUSED, return NULL_TREE; } - static void cp_init_ts (void) { - tree_contains_struct[NAMESPACE_DECL][TS_DECL_NON_COMMON] = 1; - tree_contains_struct[USING_DECL][TS_DECL_NON_COMMON] = 1; - tree_contains_struct[TEMPLATE_DECL][TS_DECL_NON_COMMON] = 1; - - tree_contains_struct[NAMESPACE_DECL][TS_DECL_WITH_VIS] = 1; - tree_contains_struct[USING_DECL][TS_DECL_WITH_VIS] = 1; - tree_contains_struct[TEMPLATE_DECL][TS_DECL_WITH_VIS] = 1; - - tree_contains_struct[NAMESPACE_DECL][TS_DECL_WRTL] = 1; - tree_contains_struct[USING_DECL][TS_DECL_WRTL] = 1; - tree_contains_struct[TEMPLATE_DECL][TS_DECL_WRTL] = 1; - - tree_contains_struct[NAMESPACE_DECL][TS_DECL_COMMON] = 1; - tree_contains_struct[USING_DECL][TS_DECL_COMMON] = 1; - tree_contains_struct[TEMPLATE_DECL][TS_DECL_COMMON] = 1; - - tree_contains_struct[NAMESPACE_DECL][TS_DECL_MINIMAL] = 1; - tree_contains_struct[USING_DECL][TS_DECL_MINIMAL] = 1; - tree_contains_struct[TEMPLATE_DECL][TS_DECL_MINIMAL] = 1; + cp_common_init_ts (); init_shadowed_var_for_decl (); - } static const char * diff --git a/gcc/cp/cp-objcp-common.c b/gcc/cp/cp-objcp-common.c index 6e04269..6a7f400 100644 --- a/gcc/cp/cp-objcp-common.c +++ b/gcc/cp/cp-objcp-common.c @@ -224,5 +224,78 @@ init_shadowed_var_for_decl (void) tree_decl_map_eq, 0); } +void +cp_common_init_ts (void) +{ + MARK_TS_DECL_NON_COMMON (NAMESPACE_DECL); + MARK_TS_DECL_NON_COMMON (USING_DECL); + MARK_TS_DECL_NON_COMMON (TEMPLATE_DECL); + + MARK_TS_COMMON (TEMPLATE_TEMPLATE_PARM); + MARK_TS_COMMON (TEMPLATE_TYPE_PARM); + MARK_TS_COMMON (TEMPLATE_PARM_INDEX); + MARK_TS_COMMON (OVERLOAD); + MARK_TS_COMMON (TEMPLATE_INFO); + MARK_TS_COMMON (FOR_STMT); + MARK_TS_COMMON (TYPENAME_TYPE); + MARK_TS_COMMON (TYPEOF_TYPE); + MARK_TS_COMMON (IF_STMT); + MARK_TS_COMMON (BASELINK); + MARK_TS_COMMON (SWITCH_STMT); + MARK_TS_COMMON (TYPE_PACK_EXPANSION); + MARK_TS_COMMON (EXPR_PACK_EXPANSION); + MARK_TS_COMMON (DECLTYPE_TYPE); + MARK_TS_COMMON (BOUND_TEMPLATE_TEMPLATE_PARM); + MARK_TS_COMMON (UNBOUND_CLASS_TEMPLATE); + MARK_TS_COMMON (RANGE_FOR_STMT); + + MARK_TS_TYPED (AGGR_INIT_EXPR); + MARK_TS_TYPED (EXPR_STMT); + MARK_TS_TYPED (EH_SPEC_BLOCK); + MARK_TS_TYPED (CLEANUP_STMT); + MARK_TS_TYPED (SCOPE_REF); + MARK_TS_TYPED (CAST_EXPR); + MARK_TS_TYPED (NON_DEPENDENT_EXPR); + MARK_TS_TYPED (MODOP_EXPR); + MARK_TS_TYPED (TRY_BLOCK); + MARK_TS_TYPED (THROW_EXPR); + MARK_TS_TYPED (HANDLER); + MARK_TS_TYPED (REINTERPRET_CAST_EXPR); + MARK_TS_TYPED (CONST_CAST_EXPR); + MARK_TS_TYPED (STATIC_CAST_EXPR); + MARK_TS_TYPED (DYNAMIC_CAST_EXPR); + MARK_TS_TYPED (TEMPLATE_ID_EXPR); + MARK_TS_TYPED (ARROW_EXPR); + MARK_TS_TYPED (SIZEOF_EXPR); + MARK_TS_TYPED (ALIGNOF_EXPR); + MARK_TS_TYPED (AT_ENCODE_EXPR); + MARK_TS_TYPED (UNARY_PLUS_EXPR); + MARK_TS_TYPED (TRAIT_EXPR); + MARK_TS_TYPED (TYPE_ARGUMENT_PACK); + MARK_TS_TYPED (NOEXCEPT_EXPR); + MARK_TS_TYPED (NONTYPE_ARGUMENT_PACK); + MARK_TS_TYPED (WHILE_STMT); + MARK_TS_TYPED (NEW_EXPR); + MARK_TS_TYPED (VEC_NEW_EXPR); + MARK_TS_TYPED (BREAK_STMT); + MARK_TS_TYPED (MEMBER_REF); + MARK_TS_TYPED (DOTSTAR_EXPR); + MARK_TS_TYPED (DO_STMT); + MARK_TS_TYPED (DELETE_EXPR); + MARK_TS_TYPED (VEC_DELETE_EXPR); + MARK_TS_TYPED (CONTINUE_STMT); + MARK_TS_TYPED (TAG_DEFN); + MARK_TS_TYPED (PSEUDO_DTOR_EXPR); + MARK_TS_TYPED (TYPEID_EXPR); + MARK_TS_TYPED (MUST_NOT_THROW_EXPR); + MARK_TS_TYPED (STMT_EXPR); + MARK_TS_TYPED (OFFSET_REF); + MARK_TS_TYPED (OFFSETOF_EXPR); + MARK_TS_TYPED (PTRMEM_CST); + MARK_TS_TYPED (EMPTY_CLASS_EXPR); + MARK_TS_TYPED (VEC_INIT_EXPR); + MARK_TS_TYPED (USING_STMT); + MARK_TS_TYPED (LAMBDA_EXPR); +} #include "gt-cp-cp-objcp-common.h" diff --git a/gcc/cp/cp-objcp-common.h b/gcc/cp/cp-objcp-common.h index 38da59e..c668ad8 100644 --- a/gcc/cp/cp-objcp-common.h +++ b/gcc/cp/cp-objcp-common.h @@ -28,6 +28,7 @@ extern tree objcp_tsubst_copy_and_build (tree, tree, tsubst_flags_t, tree, bool); extern bool cp_function_decl_explicit_p (tree decl); +extern void cp_common_init_ts (void); /* Lang hooks that are shared between C++ and ObjC++ are defined here. Hooks specific to C++ or ObjC++ go in cp/cp-lang.c and objcp/objcp-lang.c, diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index 4321d28..15c1974 100644 --- a/gcc/cp/cp-tree.h +++ b/gcc/cp/cp-tree.h @@ -705,7 +705,7 @@ enum cp_tree_node_structure_enum { /* The resulting tree type. */ union GTY((desc ("cp_tree_node_structure (&%h)"), - chain_next ("(union lang_tree_node *)TREE_CHAIN (&%h.generic)"))) lang_tree_node { + chain_next ("CODE_CONTAINS_STRUCT (TREE_CODE (&%h.generic), TS_COMMON) ? ((union lang_tree_node *) TREE_CHAIN (&%h.generic)) : NULL"))) lang_tree_node { union tree_node GTY ((tag ("TS_CP_GENERIC"), desc ("tree_node_structure (&%h)"))) generic; struct template_parm_index_s GTY ((tag ("TS_CP_TPI"))) tpi; |