From 9b88d08d3ad00c838a22d832ff570e96f082f330 Mon Sep 17 00:00:00 2001 From: froydnj Date: Wed, 13 Apr 2011 03:09:53 +0000 Subject: gcc/ada/ * gcc-interface/ada-tree.h (union lang_tree_node): Check for TS_COMMON before calling TREE_CHAIN. * gcc-interface/misc.c (gnat_init_ts): New function. (LANG_HOOKS_INIT_TS): Define. gcc/ * c-decl.c (union lang_tree_node): Check for TS_COMMON before calling TREE_CHAIN. * print-tree.c (print_node): Likewise. * tree-inline.c (copy_tree_r): Likewise. * c-lang.c (LANG_HOOKS_INIT_TS): Define. * lto-streamer-in.c (lto_input_tree_pointers): Check for TS_TYPED instead of TS_COMMON. * lto-streamer-out.c (lto_output_tree_pointers): Likewise. * tree.c (initialize_tree_contains_struct): Handle TS_TYPED. (copy_node_stat): Zero TREE_CHAIN only if necessary. (MARK_TS_BASE, MARK_TS_TYPED, MARK_TS_COMMON): Move these... (MARK_TS_DECL_COMMON, MARK_TS_DECL_COMMON, MARK_TS_DECL_WRTL): ...and these... (MARK_TS_DECL_WITH_VIS, MARK_TS_DECL_NON_COMMON): ...and these... * tree.h: ...here. (TREE_CHAIN): Check for a TS_COMMON structure. (TREE_TYPE): Check for a TS_TYPED structure. gcc/c-family/ * c-common.h (c_common_init_ts): Declare. * c-common.c (c_common_init_ts): Define. gcc/cp/ * 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. gcc/fortran/ * f95-lang.c (union lang_tree_node): Check for TS_COMMON before calling TREE_CHAIN. gcc/go/ * go-lang.c (union lang_tree_node): Check for TS_COMMON before calling TREE_CHAIN. gcc/java/ * java-tree.h (union lang_tree_node): Check for TS_COMMON before calling TREE_CHAIN. gcc/lto/ * lto-tree.h (union lang_tree_node): Check for TS_COMMON before calling TREE_CHAIN. * lto.c (lto_fixup_common): Likewise. gcc/objc/ * objc-lang.c (objc_init_ts): Move code for this function... * objc-act.c (objc_common_init_ts): ...here. Define. * objc-act.h (objc_common_init_ts): Declare. gcc/objcp/ * objcp-lang.c (objcxx_init_ts): Call objc_common_init_ts and cp_common_init_ts. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@172359 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ada/ChangeLog | 7 +++++++ gcc/ada/gcc-interface/ada-tree.h | 2 +- gcc/ada/gcc-interface/misc.c | 19 +++++++++++++++++++ 3 files changed, 27 insertions(+), 1 deletion(-) (limited to 'gcc/ada') diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 285d61d5648..f97a087ae46 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,10 @@ +2011-04-12 Nathan Froyd + + * gcc-interface/ada-tree.h (union lang_tree_node): Check for + TS_COMMON before calling TREE_CHAIN. + * gcc-interface/misc.c (gnat_init_ts): New function. + (LANG_HOOKS_INIT_TS): Define. + 2011-04-12 Martin Jambor * gcc-interface/utils.c (end_subprog_body): Call diff --git a/gcc/ada/gcc-interface/ada-tree.h b/gcc/ada/gcc-interface/ada-tree.h index de47afcebc0..2b14b95cdef 100644 --- a/gcc/ada/gcc-interface/ada-tree.h +++ b/gcc/ada/gcc-interface/ada-tree.h @@ -25,7 +25,7 @@ /* The resulting tree type. */ union GTY((desc ("0"), - chain_next ("(union lang_tree_node *)TREE_CHAIN (&%h.generic)"))) + 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 ("0"), diff --git a/gcc/ada/gcc-interface/misc.c b/gcc/ada/gcc-interface/misc.c index c35a22ae9bc..1f00b33ace3 100644 --- a/gcc/ada/gcc-interface/misc.c +++ b/gcc/ada/gcc-interface/misc.c @@ -690,6 +690,23 @@ gnat_eh_personality (void) return gnat_eh_personality_decl; } +/* Initialize language-specific bits of tree_contains_struct. */ + +static void +gnat_init_ts (void) +{ + MARK_TS_COMMON (UNCONSTRAINED_ARRAY_TYPE); + + MARK_TS_TYPED (UNCONSTRAINED_ARRAY_REF); + MARK_TS_TYPED (NULL_EXPR); + MARK_TS_TYPED (PLUS_NOMOD_EXPR); + MARK_TS_TYPED (MINUS_NOMOD_EXPR); + MARK_TS_TYPED (ATTR_ADDR_EXPR); + MARK_TS_TYPED (STMT_STMT); + MARK_TS_TYPED (LOOP_STMT); + MARK_TS_TYPED (EXIT_STMT); +} + /* Definitions for our language-specific hooks. */ #undef LANG_HOOKS_NAME @@ -750,6 +767,8 @@ gnat_eh_personality (void) #define LANG_HOOKS_EH_PERSONALITY gnat_eh_personality #undef LANG_HOOKS_DEEP_UNSHARING #define LANG_HOOKS_DEEP_UNSHARING true +#undef LANG_HOOKS_INIT_TS +#define LANG_HOOKS_INIT_TS gnat_init_ts struct lang_hooks lang_hooks = LANG_HOOKS_INITIALIZER; -- cgit v1.2.1