diff options
author | Daniel Berlin <dberlin@dberlin.org> | 2007-04-07 23:08:23 +0000 |
---|---|---|
committer | Daniel Berlin <dberlin@gcc.gnu.org> | 2007-04-07 23:08:23 +0000 |
commit | 270c60bb5f93889717d18a7835069897a7ce3e16 (patch) | |
tree | 52566fdbb0b084676aa3532c776e0d3c48a44aae | |
parent | ee57a66148bae672e53312950c296ef81294f064 (diff) | |
download | gcc-270c60bb5f93889717d18a7835069897a7ce3e16.zip gcc-270c60bb5f93889717d18a7835069897a7ce3e16.tar.gz gcc-270c60bb5f93889717d18a7835069897a7ce3e16.tar.bz2 |
2007-04-07 Daniel Berlin <dberlin@dberlin.org>
Revert change removing staticp.
From-SVN: r123650
-rw-r--r-- | gcc/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/c-common.c | 9 | ||||
-rw-r--r-- | gcc/c-common.h | 2 | ||||
-rw-r--r-- | gcc/c-objc-common.h | 2 | ||||
-rw-r--r-- | gcc/cp/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/cp/cp-objcp-common.c | 15 | ||||
-rw-r--r-- | gcc/cp/cp-objcp-common.h | 2 | ||||
-rw-r--r-- | gcc/cp/cp-tree.h | 1 | ||||
-rw-r--r-- | gcc/langhooks-def.h | 3 | ||||
-rw-r--r-- | gcc/langhooks.c | 8 | ||||
-rw-r--r-- | gcc/langhooks.h | 3 | ||||
-rw-r--r-- | gcc/tree.c | 14 | ||||
-rw-r--r-- | gcc/tree.h | 1 |
13 files changed, 62 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b7d23c4..019d8fd 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2007-04-07 Daniel Berlin <dberlin@dberlin.org> + + Revert change removing staticp. + 2007-04-07 Anatoly Sokolov <aesok@post.ru> PR target/30289 diff --git a/gcc/c-common.c b/gcc/c-common.c index af8b8aa..8f71e691 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 40025c3..b128e31 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 00519c7..f3f0867 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 5d3491f..32f6829 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,7 @@ +2007-04-07 Daniel Berlin <dberlin@dberlin.org> + + Revert change removing staticp. + 2007-04-06 Daniel Berlin <dberlin@dberlin.org> * cp-objcp-common.c (cxx_staticp): Remove. diff --git a/gcc/cp/cp-objcp-common.c b/gcc/cp/cp-objcp-common.c index f74c60a..af8eb94 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 2d40e22..23e1f0f 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 32eb084..3b3821e 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 4416bb9..004b3c5 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 49a5a07..919f05d 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 85dbec6..f0220fc 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); @@ -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; } } @@ -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" |