OSDN Git Service

2007-04-07 Daniel Berlin <dberlin@dberlin.org>
authordberlin <dberlin@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 7 Apr 2007 23:08:23 +0000 (23:08 +0000)
committerdberlin <dberlin@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 7 Apr 2007 23:08:23 +0000 (23:08 +0000)
Revert change removing staticp.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@123650 138bc75d-0d04-0410-961f-82ee72b054a4

13 files changed:
gcc/ChangeLog
gcc/c-common.c
gcc/c-common.h
gcc/c-objc-common.h
gcc/cp/ChangeLog
gcc/cp/cp-objcp-common.c
gcc/cp/cp-objcp-common.h
gcc/cp/cp-tree.h
gcc/langhooks-def.h
gcc/langhooks.c
gcc/langhooks.h
gcc/tree.c
gcc/tree.h

index b7d23c4..019d8fd 100644 (file)
@@ -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
index af8b8aa..8f71e69 100644 (file)
@@ -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);
+}
 \f
 
 /* Given a boolean expression ARG, return a tree representing an increment
index 40025c3..b128e31 100644 (file)
@@ -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 *);
index 00519c7..f3f0867 100644 (file)
@@ -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
index 5d3491f..32f6829 100644 (file)
@@ -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.
index f74c60a..af8eb94 100644 (file)
@@ -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)
index 2d40e22..23e1f0f 100644 (file)
@@ -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
index 32eb084..3b3821e 100644 (file)
@@ -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 *);
index 4416bb9..004b3c5 100644 (file)
@@ -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, \
index 49a5a07..919f05d 100644 (file)
@@ -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
index 85dbec6..f0220fc 100644 (file)
@@ -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);
index 816275c..0ea18b2 100644 (file)
@@ -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;
     }
 }
 \f
index e781e64..64efe7c 100644 (file)
@@ -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"