From: Daniel Berlin Date: Sat, 7 Apr 2007 23:08:23 +0000 (+0000) Subject: 2007-04-07 Daniel Berlin X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=270c60bb5f93889717d18a7835069897a7ce3e16;p=gcc.git 2007-04-07 Daniel Berlin Revert change removing staticp. From-SVN: r123650 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b7d23c44629..019d8fd499a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2007-04-07 Daniel Berlin + + Revert change removing staticp. + 2007-04-07 Anatoly Sokolov PR target/30289 diff --git a/gcc/c-common.c b/gcc/c-common.c index af8b8aa075a..8f71e6916ed 100644 --- a/gcc/c-common.c +++ b/gcc/c-common.c @@ -4294,6 +4294,15 @@ c_expand_body (tree fndecl) decl_fini_priority_lookup (fndecl)); } +/* Hook used by staticp to handle language-specific tree codes. */ + +tree +c_staticp (tree exp) +{ + return (TREE_CODE (exp) == COMPOUND_LITERAL_EXPR + && TREE_STATIC (COMPOUND_LITERAL_EXPR_DECL (exp)) + ? exp : NULL); +} /* Given a boolean expression ARG, return a tree representing an increment diff --git a/gcc/c-common.h b/gcc/c-common.h index 40025c33c34..b128e31a008 100644 --- a/gcc/c-common.h +++ b/gcc/c-common.h @@ -825,6 +825,8 @@ extern bool vector_types_convertible_p (tree t1, tree t2, bool emit_lax_note); extern rtx c_expand_expr (tree, rtx, enum machine_mode, int, rtx *); extern void c_expand_body (tree); +extern tree c_staticp (tree); + extern void init_c_lex (void); extern void c_cpp_builtins (cpp_reader *); diff --git a/gcc/c-objc-common.h b/gcc/c-objc-common.h index 00519c7c0ee..f3f0867e958 100644 --- a/gcc/c-objc-common.h +++ b/gcc/c-objc-common.h @@ -56,6 +56,8 @@ extern void c_initialize_diagnostics (diagnostic_context *); #define LANG_HOOKS_FINISH_INCOMPLETE_DECL c_finish_incomplete_decl #undef LANG_HOOKS_REDUCE_BIT_FIELD_OPERATIONS #define LANG_HOOKS_REDUCE_BIT_FIELD_OPERATIONS true +#undef LANG_HOOKS_STATICP +#define LANG_HOOKS_STATICP c_staticp #undef LANG_HOOKS_NO_BODY_BLOCKS #define LANG_HOOKS_NO_BODY_BLOCKS true #undef LANG_HOOKS_WARN_UNUSED_GLOBAL_DECL diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 5d3491f3f10..32f6829bce8 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,7 @@ +2007-04-07 Daniel Berlin + + Revert change removing staticp. + 2007-04-06 Daniel Berlin * cp-objcp-common.c (cxx_staticp): Remove. diff --git a/gcc/cp/cp-objcp-common.c b/gcc/cp/cp-objcp-common.c index f74c60ae527..af8eb94cf49 100644 --- a/gcc/cp/cp-objcp-common.c +++ b/gcc/cp/cp-objcp-common.c @@ -200,6 +200,21 @@ cxx_types_compatible_p (tree x, tree y) return 0; } +tree +cxx_staticp (tree arg) +{ + switch (TREE_CODE (arg)) + { + case BASELINK: + return staticp (BASELINK_FUNCTIONS (arg)); + + default: + break; + } + + return NULL_TREE; +} + /* Stubs to keep c-opts.c happy. */ void push_file_scope (void) diff --git a/gcc/cp/cp-objcp-common.h b/gcc/cp/cp-objcp-common.h index 2d40e2227bb..23e1f0ffff1 100644 --- a/gcc/cp/cp-objcp-common.h +++ b/gcc/cp/cp-objcp-common.h @@ -59,6 +59,8 @@ extern tree objcp_tsubst_copy_and_build (tree, tree, tsubst_flags_t, #define LANG_HOOKS_EXPAND_DECL c_expand_decl #undef LANG_HOOKS_PARSE_FILE #define LANG_HOOKS_PARSE_FILE c_common_parse_file +#undef LANG_HOOKS_STATICP +#define LANG_HOOKS_STATICP cxx_staticp #undef LANG_HOOKS_DUP_LANG_SPECIFIC_DECL #define LANG_HOOKS_DUP_LANG_SPECIFIC_DECL cxx_dup_lang_specific_decl #undef LANG_HOOKS_SET_DECL_ASSEMBLER_NAME diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index 32eb08477d0..3b3821ef257 100644 --- a/gcc/cp/cp-tree.h +++ b/gcc/cp/cp-tree.h @@ -4816,6 +4816,7 @@ extern bool cp_var_mod_type_p (tree, tree); extern void cxx_initialize_diagnostics (struct diagnostic_context *); extern int cxx_types_compatible_p (tree, tree); extern void init_shadowed_var_for_decl (void); +extern tree cxx_staticp (tree); /* in cp-gimplify.c */ extern int cp_gimplify_expr (tree *, tree *, tree *); diff --git a/gcc/langhooks-def.h b/gcc/langhooks-def.h index 4416bb925a9..004b3c56f42 100644 --- a/gcc/langhooks-def.h +++ b/gcc/langhooks-def.h @@ -49,6 +49,7 @@ extern tree lhd_return_tree (tree); extern tree lhd_return_null_tree_v (void); extern tree lhd_return_null_tree (tree); extern tree lhd_do_nothing_iii_return_null_tree (int, int, int); +extern tree lhd_staticp (tree); extern void lhd_print_tree_nothing (FILE *, tree, int); extern const char *lhd_decl_printable_name (tree, int); extern const char *lhd_dwarf_name (tree, int); @@ -109,6 +110,7 @@ extern void lhd_omp_firstprivatize_type_sizes (struct gimplify_omp_ctx *, #define LANG_HOOKS_EXPAND_EXPR lhd_expand_expr #define LANG_HOOKS_EXPAND_DECL lhd_expand_decl #define LANG_HOOKS_FINISH_INCOMPLETE_DECL lhd_do_nothing_t +#define LANG_HOOKS_STATICP lhd_staticp #define LANG_HOOKS_DUP_LANG_SPECIFIC_DECL lhd_do_nothing_t #define LANG_HOOKS_SET_DECL_ASSEMBLER_NAME lhd_set_decl_assembler_name #define LANG_HOOKS_REDUCE_BIT_FIELD_OPERATIONS false @@ -294,6 +296,7 @@ extern tree lhd_make_node (enum tree_code); LANG_HOOKS_EXPAND_DECL, \ LANG_HOOKS_FINISH_INCOMPLETE_DECL, \ LANG_HOOKS_MARK_ADDRESSABLE, \ + LANG_HOOKS_STATICP, \ LANG_HOOKS_DUP_LANG_SPECIFIC_DECL, \ LANG_HOOKS_SET_DECL_ASSEMBLER_NAME, \ LANG_HOOKS_REDUCE_BIT_FIELD_OPERATIONS, \ diff --git a/gcc/langhooks.c b/gcc/langhooks.c index 49a5a07c9b7..919f05dea7d 100644 --- a/gcc/langhooks.c +++ b/gcc/langhooks.c @@ -117,6 +117,14 @@ lhd_print_tree_nothing (FILE * ARG_UNUSED (file), { } +/* Called from staticp. */ + +tree +lhd_staticp (tree ARG_UNUSED (exp)) +{ + return NULL; +} + /* Called from check_global_declarations. */ bool diff --git a/gcc/langhooks.h b/gcc/langhooks.h index 85dbec6bb4e..f0220fc91c3 100644 --- a/gcc/langhooks.h +++ b/gcc/langhooks.h @@ -324,6 +324,9 @@ struct lang_hooks successful. */ bool (*mark_addressable) (tree); + /* Hook called by staticp for language-specific tree codes. */ + tree (*staticp) (tree); + /* Replace the DECL_LANG_SPECIFIC data, which may be NULL, of the DECL_NODE with a newly GC-allocated copy. */ void (*dup_lang_specific_decl) (tree); diff --git a/gcc/tree.c b/gcc/tree.c index 816275c1f68..0ea18b2f700 100644 --- a/gcc/tree.c +++ b/gcc/tree.c @@ -1986,7 +1986,10 @@ staticp (tree arg) return arg; case COMPONENT_REF: - gcc_assert (TREE_CODE (TREE_OPERAND (arg, 1)) == FIELD_DECL); + /* If the thing being referenced is not a field, then it is + something language specific. */ + if (TREE_CODE (TREE_OPERAND (arg, 1)) != FIELD_DECL) + return (*lang_hooks.staticp) (arg); /* If we are referencing a bitfield, we can't evaluate an ADDR_EXPR at compile time and so it isn't a constant. */ @@ -2012,10 +2015,11 @@ staticp (tree arg) return false; default: - /* All language specific tree codes should have been lowered by - now. */ - gcc_assert_lowered (arg); - return NULL; + if ((unsigned int) TREE_CODE (arg) + >= (unsigned int) LAST_AND_UNUSED_TREE_CODE) + return lang_hooks.staticp (arg); + else + return NULL; } } diff --git a/gcc/tree.h b/gcc/tree.h index e781e64dccf..64efe7c60fe 100644 --- a/gcc/tree.h +++ b/gcc/tree.h @@ -921,7 +921,6 @@ extern void omp_clause_range_check_failed (const tree, const char *, int, #endif -#define gcc_assert_lowered(NODE) gcc_assert (TREE_CODE (NODE) <= LAST_AND_UNUSED_TREE_CODE) #define TREE_BLOCK(NODE) *(tree_block (NODE)) #include "tree-check.h"