tree.c (tree_code_size): Add TRANSLATION_UNIT_DECL, NAMESPACE_DECL, IMPORTED_DECL...
authorJan Hubicka <hubicka@ucw.cz>
Tue, 15 Jul 2014 10:17:32 +0000 (12:17 +0200)
committerJan Hubicka <hubicka@gcc.gnu.org>
Tue, 15 Jul 2014 10:17:32 +0000 (10:17 +0000)
* tree.c (tree_code_size): Add TRANSLATION_UNIT_DECL,
NAMESPACE_DECL, IMPORTED_DECL and NAMELIST_DECL;
call langhook for unknown declaration.
(find_decls_types_r): Do not walk DECL_ARGUMENT_FLD.
* tree.h (DECL_ARGUMENTS): Update.
* print-tree.c (print_node): Update.
* tree-core.h (tree_decl_non_common): Remove arguments.
(tree_function_decl): Add arguments.

* class.c (build_clone): Do not clear assembler names of
templates.
* decl.c (cp_tree_node_structure): Add TEMPLATE_DECL.
* cp-objcp-common.c (cp_tree_size): Add TEMPLATE_DECL
as a special case return sizeof (struct tree_decl_non_common)
for other decls.
(cp_common_init_ts): Do not initialize NAMESPACE_DECL;
initialize TEMPLATE_DECL as MARK_TS_DECL_COMMON.
* cp/cp-tree.h (tree_template_decl): New structure.
(cp_tree_node_structure_enum): Add TS_CP_TEMPLATE_DECL.
(union cp_lang_tree_node): Add template_decl.
(DECL_TEMPLATE_PARMS, DECL_TEMPLATE_RESULT): Update.

* lto/lto.c (mentions_vars_p_decl_non_common): Skip
DECL_ARGUMENT_FLD.
mentions_vars_p_function): Do DECL_ARGUMENTS.
(lto_fixup_prevailing_decls): Update.

* objc-act.c (objc_common_tree_size): New function.
* objc-act.h (KEYWORD_KEY_NAME, KEYWORD_ARG_NAME): Add type
checking.
(INSTANCE_METHOD_OR_CLASS_METHOD_DECL_CHECK): New macro.
(METHOD_SEL_NAME, METHOD_SEL_ARGS, METHOD_ADD_ARGS,
  METHOD_ADD_ARGS_ELLIPSIS_P, METHOD_DEFINITION, METHOD_ENCODING,
METHOD_TYPE_ATTRIBUTES, METHOD_PROPERTY_CONTEXT): Add type checking.
(METHOD_SEL_ARGS): Use decl_common.size instead of
decl_non_common.result.
(PROPERTY_NAME, PROPERTY_GETTER_NAME, PROPERTY_SETTER_NAME,
PROPERTY_READONLY, PROPERTY_NONATOMIC, PROPERTY_ASSIGN_SEMANTICS,
PROPERTY_IVAR_NAME, PROPERTY_DYNAMIC, PROPERTY_HAS_NO_GETTER,
PROPERTY_HAS_NO_SETTER, PROPERTY_OPTIONAL): Add type checking.
(objc_common_tree_size): Declare.
* objc/objc-lang.c (LANG_HOOKS_TREE_SIZE): New macro.

From-SVN: r212549

16 files changed:
gcc/ChangeLog
gcc/cp/ChangeLog
gcc/cp/class.c
gcc/cp/cp-objcp-common.c
gcc/cp/cp-tree.h
gcc/cp/decl.c
gcc/lto/ChangeLog
gcc/lto/lto.c
gcc/objc/ChangeLog
gcc/objc/objc-act.c
gcc/objc/objc-act.h
gcc/objc/objc-lang.c
gcc/print-tree.c
gcc/tree-core.h
gcc/tree.c
gcc/tree.h

index 6f86acf4e4378dfabbf4d27eae0cd97a7c38d4b0..5a83e0e35b35b7d6f212fa17df089a9ba5b8121c 100644 (file)
@@ -1,3 +1,14 @@
+2014-07-14  Jan Hubicka  <hubicka@ucw.cz>
+
+       * tree.c (tree_code_size): Add TRANSLATION_UNIT_DECL,
+       NAMESPACE_DECL, IMPORTED_DECL and NAMELIST_DECL;
+       call langhook for unknown declaration.
+       (find_decls_types_r): Do not walk DECL_ARGUMENT_FLD.
+       * tree.h (DECL_ARGUMENTS): Update.
+       * print-tree.c (print_node): Update.
+       * tree-core.h (tree_decl_non_common): Remove arguments.
+       (tree_function_decl): Add arguments.
+
 2014-07-14  Richard Earnshaw  <rearnsha@arm.com>
 
        * aarch64.md (add_losym_<mode>): Set type to alu_imm.
index 0d66bb3820b93fa4147659352615086ff9af15a0..9ffee53b6c9e03d1a647da1acff78fb61456fa69 100644 (file)
@@ -1,3 +1,18 @@
+2014-07-14  Jan Hubicka  <hubicka@ucw.cz>
+
+       * class.c (build_clone): Do not clear assembler names of
+       templates.
+       * decl.c (cp_tree_node_structure): Add TEMPLATE_DECL.
+       * cp-objcp-common.c (cp_tree_size): Add TEMPLATE_DECL
+       as a special case return sizeof (struct tree_decl_non_common)
+       for other decls.
+       (cp_common_init_ts): Do not initialize NAMESPACE_DECL;
+       initialize TEMPLATE_DECL as MARK_TS_DECL_COMMON.
+       * cp/cp-tree.h (tree_template_decl): New structure.
+       (cp_tree_node_structure_enum): Add TS_CP_TEMPLATE_DECL.
+       (union cp_lang_tree_node): Add template_decl.
+       (DECL_TEMPLATE_PARMS, DECL_TEMPLATE_RESULT): Update.
+
 2014-07-14  Jason Merrill  <jason@redhat.com>
 
        PR c++/61445
index d0eb1033ef280074c525214153df9a0d436f4439..dbd8d3d3aa58c28e5751dc63cda37b5ee8360df7 100644 (file)
@@ -4388,7 +4388,6 @@ build_clone (tree fn, tree name)
   clone = copy_decl (fn);
   /* Reset the function name.  */
   DECL_NAME (clone) = name;
-  SET_DECL_ASSEMBLER_NAME (clone, NULL_TREE);
   /* Remember where this function came from.  */
   DECL_ABSTRACT_ORIGIN (clone) = fn;
   /* Make it easy to find the CLONE given the FN.  */
@@ -4406,6 +4405,7 @@ build_clone (tree fn, tree name)
       return clone;
     }
 
+  SET_DECL_ASSEMBLER_NAME (clone, NULL_TREE);
   DECL_CLONED_FUNCTION (clone) = fn;
   /* There's no pending inline data for this function.  */
   DECL_PENDING_INLINE_INFO (clone) = NULL;
index 78dddef70d1a617eeca7a6930d6bf24d2f1b63c3..0c50f4085ab54270a8eefac759d15980fba764f8 100644 (file)
@@ -103,7 +103,11 @@ cp_tree_size (enum tree_code code)
 
     case USERDEF_LITERAL:      return sizeof (struct tree_userdef_literal);
 
+    case TEMPLATE_DECL:                return sizeof (struct tree_template_decl);
+
     default:
+      if (TREE_CODE_CLASS (code) == tcc_declaration)
+       return sizeof (struct tree_decl_non_common);
       gcc_unreachable ();
     }
   /* NOTREACHED */
@@ -245,9 +249,8 @@ cxx_block_may_fallthru (const_tree stmt)
 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_DECL_COMMON (TEMPLATE_DECL);
 
   MARK_TS_COMMON (TEMPLATE_TEMPLATE_PARM);
   MARK_TS_COMMON (TEMPLATE_TYPE_PARM);
index 091d20feee5bb145a2b7f2293a5d4f2df91feca3..0c0d804d6798880d37e4fe5e27e2831e289817c1 100644 (file)
@@ -362,6 +362,12 @@ struct GTY(()) tree_overload {
   tree function;
 };
 
+struct GTY(()) tree_template_decl {
+  struct tree_decl_common common;
+  tree arguments;
+  tree result;
+};
+
 /* Returns true iff NODE is a BASELINK.  */
 #define BASELINK_P(NODE) \
   (TREE_CODE (NODE) == BASELINK)
@@ -796,6 +802,7 @@ enum cp_tree_node_structure_enum {
   TS_CP_BINDING,
   TS_CP_OVERLOAD,
   TS_CP_BASELINK,
+  TS_CP_TEMPLATE_DECL,
   TS_CP_WRAPPER,
   TS_CP_DEFAULT_ARG,
   TS_CP_DEFERRED_NOEXCEPT,
@@ -817,6 +824,7 @@ union GTY((desc ("cp_tree_node_structure (&%h)"),
   struct ptrmem_cst GTY ((tag ("TS_CP_PTRMEM"))) ptrmem;
   struct tree_overload GTY ((tag ("TS_CP_OVERLOAD"))) overload;
   struct tree_baselink GTY ((tag ("TS_CP_BASELINK"))) baselink;
+  struct tree_template_decl GTY ((tag ("TS_CP_TEMPLATE_DECL"))) template_decl;
   struct tree_default_arg GTY ((tag ("TS_CP_DEFAULT_ARG"))) default_arg;
   struct tree_deferred_noexcept GTY ((tag ("TS_CP_DEFERRED_NOEXCEPT"))) deferred_noexcept;
   struct lang_identifier GTY ((tag ("TS_CP_IDENTIFIER"))) identifier;
@@ -3753,16 +3761,22 @@ more_aggr_init_expr_args_p (const aggr_init_expr_arg_iterator *iter)
    parameter).  The TREE_PURPOSE is the default value, if any.  The
    TEMPLATE_PARM_INDEX for the parameter is available as the
    DECL_INITIAL (for a PARM_DECL) or as the TREE_TYPE (for a
-   TYPE_DECL).  */
+   TYPE_DECL). 
+
+   FIXME: CONST_CAST_TREE is a hack that hopefully will go away after
+   tree is converted to C++ class hiearchy.  */
 #define DECL_TEMPLATE_PARMS(NODE)       \
-  TEMPLATE_DECL_CHECK (NODE)->decl_non_common.arguments
+   ((struct tree_template_decl *)CONST_CAST_TREE (TEMPLATE_DECL_CHECK (NODE)))->arguments
 #define DECL_INNERMOST_TEMPLATE_PARMS(NODE) \
    INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (NODE))
 #define DECL_NTPARMS(NODE) \
    TREE_VEC_LENGTH (DECL_INNERMOST_TEMPLATE_PARMS (NODE))
-/* For function, method, class-data templates.  */
+/* For function, method, class-data templates.
+
+   FIXME: CONST_CAST_TREE is a hack that hopefully will go away after
+   tree is converted to C++ class hiearchy.  */
 #define DECL_TEMPLATE_RESULT(NODE)      \
-  DECL_RESULT_FLD (TEMPLATE_DECL_CHECK (NODE))
+   ((struct tree_template_decl *)CONST_CAST_TREE(TEMPLATE_DECL_CHECK (NODE)))->result
 /* For a function template at namespace scope, DECL_TEMPLATE_INSTANTIATIONS
    lists all instantiations and specializations of the function so that
    tsubst_friend_function can reassign them to another template if we find
index 9d3fbb275f6d06e5c3af8c31e29e80a5b2cdc2bb..87249a034a68f54e1f54260e9c842f0d60fe7da8 100644 (file)
@@ -14482,6 +14482,7 @@ cp_tree_node_structure (union lang_tree_node * t)
     case TEMPLATE_PARM_INDEX:  return TS_CP_TPI;
     case PTRMEM_CST:           return TS_CP_PTRMEM;
     case BASELINK:             return TS_CP_BASELINK;
+    case TEMPLATE_DECL:                return TS_CP_TEMPLATE_DECL;
     case STATIC_ASSERT:                return TS_CP_STATIC_ASSERT;
     case ARGUMENT_PACK_SELECT:  return TS_CP_ARGUMENT_PACK_SELECT;
     case TRAIT_EXPR:           return TS_CP_TRAIT_EXPR;
index 194acba87c992754a814a6ef0fa25572836b761d..8fd21ea828f73c332c2404a512569e95c555cbc8 100644 (file)
@@ -1,3 +1,10 @@
+2014-07-14  Jan Hubicka  <hubicka@ucw.cz>
+
+       * lto.c (mentions_vars_p_decl_non_common): Skip
+       DECL_ARGUMENT_FLD.
+       mentions_vars_p_function): Do DECL_ARGUMENTS.
+       (lto_fixup_prevailing_decls): Update.
+
 2014-07-12  Jan Hubicka  <hubicka@ucw.cz>
 
        * lto.c (read_cgraph_and_symbols): Do not push DECL_INIT_IO
index dc30884d334a3550cca471147b333055ec3b1d6a..5056915529feade9cb5b00cbfeb7cf842aaef1d5 100644 (file)
@@ -775,7 +775,6 @@ mentions_vars_p_decl_non_common (tree t)
 {
   if (mentions_vars_p_decl_with_vis (t))
     return true;
-  CHECK_NO_VAR (DECL_ARGUMENT_FLD (t));
   CHECK_NO_VAR (DECL_RESULT_FLD (t));
   return false;
 }
@@ -787,6 +786,7 @@ mentions_vars_p_function (tree t)
 {
   if (mentions_vars_p_decl_non_common (t))
     return true;
+  CHECK_NO_VAR (DECL_ARGUMENTS (t));
   CHECK_NO_VAR (DECL_VINDEX (t));
   CHECK_VAR (DECL_FUNCTION_PERSONALITY (t));
   return false;
@@ -2711,11 +2711,11 @@ lto_fixup_prevailing_decls (tree t)
        }
       if (CODE_CONTAINS_STRUCT (code, TS_DECL_NON_COMMON))
        {
-         LTO_NO_PREVAIL (DECL_ARGUMENT_FLD (t));
          LTO_NO_PREVAIL (DECL_RESULT_FLD (t));
        }
       if (CODE_CONTAINS_STRUCT (code, TS_FUNCTION_DECL))
        {
+         LTO_NO_PREVAIL (DECL_ARGUMENTS (t));
          LTO_SET_PREVAIL (DECL_FUNCTION_PERSONALITY (t));
          LTO_NO_PREVAIL (DECL_VINDEX (t));
        }
index b1f3d9e0fe3ee8074a279ef08565703d8e50141e..b9b1fdc5a9b29f6d4d8c8284f81c0a074ad0a5ac 100644 (file)
@@ -1,3 +1,21 @@
+2014-07-14  Jan Hubicka  <hubicka@ucw.cz>
+
+       * objc-act.c (objc_common_tree_size): New function.
+       * objc-act.h (KEYWORD_KEY_NAME, KEYWORD_ARG_NAME): Add type
+       checking.
+       (INSTANCE_METHOD_OR_CLASS_METHOD_DECL_CHECK): New macro.
+       (METHOD_SEL_NAME, METHOD_SEL_ARGS, METHOD_ADD_ARGS,
+       METHOD_ADD_ARGS_ELLIPSIS_P, METHOD_DEFINITION, METHOD_ENCODING,
+       METHOD_TYPE_ATTRIBUTES, METHOD_PROPERTY_CONTEXT): Add type checking.
+       (METHOD_SEL_ARGS): Use decl_common.size instead of
+       decl_non_common.result.
+       (PROPERTY_NAME, PROPERTY_GETTER_NAME, PROPERTY_SETTER_NAME,
+       PROPERTY_READONLY, PROPERTY_NONATOMIC, PROPERTY_ASSIGN_SEMANTICS,
+       PROPERTY_IVAR_NAME, PROPERTY_DYNAMIC, PROPERTY_HAS_NO_GETTER,
+       PROPERTY_HAS_NO_SETTER, PROPERTY_OPTIONAL): Add type checking.
+       (objc_common_tree_size): Declare.
+       * objc-lang.c (LANG_HOOKS_TREE_SIZE): New macro.
+
 2014-06-24  Jan Hubicka  <hubicka@ucw.cz>
 
        * objc-act.c (objc_xref_basetypes): Set TYPE_BINFO of type variants,
index ef110523691dbd37cfa9600df42a643ce66c923d..16a015b97bd4ba5bded5b538f5d24f50af874321 100644 (file)
@@ -10115,4 +10115,21 @@ objc_common_init_ts (void)
   MARK_TS_TYPED (PROPERTY_REF);
 }
 
+size_t
+objc_common_tree_size (enum tree_code code)
+{
+  switch (code)
+    {
+    case CLASS_METHOD_DECL:
+    case INSTANCE_METHOD_DECL:
+    case KEYWORD_DECL:
+    case PROPERTY_DECL:
+      return sizeof (struct tree_decl_non_common);
+    default:
+      gcc_unreachable ();
+  
+    }
+}
+
+
 #include "gt-objc-objc-act.h"
index 7e1e265bf08948c5787e50b43950b30e18522722..cb01e1ac87ce0062c5a84d47d621b1cb40f535ec 100644 (file)
@@ -38,18 +38,29 @@ void objc_common_init_ts (void);
 #define OBJC_INFO_SLOT_ELTS            2
 
 /* KEYWORD_DECL */
-#define KEYWORD_KEY_NAME(DECL) ((DECL)->decl_minimal.name)
-#define KEYWORD_ARG_NAME(DECL) ((DECL)->decl_non_common.arguments)
+#define KEYWORD_KEY_NAME(DECL) (KEYWORD_DECL_CHECK (DECL)->decl_minimal.name)
+#define KEYWORD_ARG_NAME(DECL) (KEYWORD_DECL_CHECK (DECL)->decl_common.size)
+
+#define INSTANCE_METHOD_OR_CLASS_METHOD_DECL_CHECK(NODE) \
+  TREE_CHECK2(NODE,INSTANCE_METHOD_DECL,CLASS_METHOD_DECL)
 
 /* INSTANCE_METHOD_DECL, CLASS_METHOD_DECL */
-#define METHOD_SEL_NAME(DECL) ((DECL)->decl_minimal.name)
-#define METHOD_SEL_ARGS(DECL) ((DECL)->decl_non_common.arguments)
-#define METHOD_ADD_ARGS(DECL) ((DECL)->decl_non_common.result)
-#define METHOD_ADD_ARGS_ELLIPSIS_P(DECL) ((DECL)->decl_common.lang_flag_0)
-#define METHOD_DEFINITION(DECL) ((DECL)->decl_common.initial)
-#define METHOD_ENCODING(DECL) ((DECL)->decl_minimal.context)
-#define METHOD_TYPE_ATTRIBUTES(DECL) ((DECL)->decl_common.abstract_origin)
-#define METHOD_PROPERTY_CONTEXT(DECL) ((DECL)->decl_common.size_unit)
+#define METHOD_SEL_NAME(DECL) \
+  (INSTANCE_METHOD_OR_CLASS_METHOD_DECL_CHECK (DECL)->decl_minimal.name)
+#define METHOD_SEL_ARGS(DECL) \
+  (INSTANCE_METHOD_OR_CLASS_METHOD_DECL_CHECK (DECL)->decl_common.size)
+#define METHOD_ADD_ARGS(DECL) \
+  (INSTANCE_METHOD_OR_CLASS_METHOD_DECL_CHECK (DECL)->decl_non_common.result)
+#define METHOD_ADD_ARGS_ELLIPSIS_P(DECL) \
+  (INSTANCE_METHOD_OR_CLASS_METHOD_DECL_CHECK (DECL)->decl_common.lang_flag_0)
+#define METHOD_DEFINITION(DECL) \
+  (INSTANCE_METHOD_OR_CLASS_METHOD_DECL_CHECK (DECL)->decl_common.initial)
+#define METHOD_ENCODING(DECL) \
+  (INSTANCE_METHOD_OR_CLASS_METHOD_DECL_CHECK (DECL)->decl_minimal.context)
+#define METHOD_TYPE_ATTRIBUTES(DECL) \
+  (INSTANCE_METHOD_OR_CLASS_METHOD_DECL_CHECK (DECL)->decl_common.abstract_origin)
+#define METHOD_PROPERTY_CONTEXT(DECL) \
+  (INSTANCE_METHOD_OR_CLASS_METHOD_DECL_CHECK (DECL)->decl_common.size_unit)
 
 
 /* PROPERTY_DECL.  A PROPERTY_DECL repesents a @property declaration
@@ -65,19 +76,24 @@ void objc_common_init_ts (void);
    valid getter/setter.  */
 
 /* PROPERTY_NAME is the name of the property.  */
-#define PROPERTY_NAME(DECL) DECL_NAME(DECL)
+#define PROPERTY_NAME(DECL) \
+   DECL_NAME(PROPERTY_DECL_CHECK (DECL))
 
 /* PROPERTY_GETTER_NAME is the identifier of the getter method.  */
-#define PROPERTY_GETTER_NAME(DECL) ((DECL)->decl_non_common.arguments)
+#define PROPERTY_GETTER_NAME(DECL)\
+   (PROPERTY_DECL_CHECK (DECL)->decl_common.size)
 
 /* PROPERTY_SETTER_NAME is the identifier of the setter method.  */
-#define PROPERTY_SETTER_NAME(DECL) ((DECL)->decl_non_common.result)
+#define PROPERTY_SETTER_NAME(DECL) \
+   (PROPERTY_DECL_CHECK (DECL)->decl_non_common.result)
 
 /* PROPERTY_READONLY can be 0 or 1.  */
-#define PROPERTY_READONLY(DECL) DECL_LANG_FLAG_0 (DECL)
+#define PROPERTY_READONLY(DECL) \
+   DECL_LANG_FLAG_0 (PROPERTY_DECL_CHECK (DECL))
 
 /* PROPERTY_NONATOMIC can be 0 or 1.  */
-#define PROPERTY_NONATOMIC(DECL) DECL_LANG_FLAG_1 (DECL)
+#define PROPERTY_NONATOMIC(DECL) \
+   DECL_LANG_FLAG_1 (PROPERTY_DECL_CHECK (DECL))
 
 typedef enum objc_property_assign_semantics {
   OBJC_PROPERTY_ASSIGN = 1,
@@ -89,31 +105,37 @@ typedef enum objc_property_assign_semantics {
    OBJC_PROPERTY_RETAIN or OBJC_PROPERTY_COPY.  We need an integer to
    store it, so we hijack the alignment, that properties don't
    have.  */
-#define PROPERTY_ASSIGN_SEMANTICS(DECL) ((DECL)->decl_common.align)
+#define PROPERTY_ASSIGN_SEMANTICS(DECL) \
+   (PROPERTY_DECL_CHECK (DECL)->decl_common.align)
 
 /* PROPERTY_IVAR_NAME is the identifier of the instance variable.
    This is set only if the PROPERTY_DECL represents a @synthesize;
    otherwise, it is set to TREE_NULL.  */
-#define PROPERTY_IVAR_NAME(DECL) ((DECL)->decl_common.initial)
+#define PROPERTY_IVAR_NAME(DECL) \
+  (PROPERTY_DECL_CHECK (DECL)->decl_common.initial)
 
 /* PROPERTY_DYNAMIC can be 0 or 1.  This is 1 if the PROPERTY_DECL
    represents a @dynamic; otherwise, it is set to 0.  */
-#define PROPERTY_DYNAMIC(DECL) DECL_LANG_FLAG_2 (DECL)
+#define PROPERTY_DYNAMIC(DECL) \
+  DECL_LANG_FLAG_2 (PROPERTY_DECL_CHECK (DECL))
 
 /* PROPERTY_HAS_NO_GETTER can be 0 or 1.  Normally it is 0, but if
    this is an artificial PROPERTY_DECL that we generate even without a
    getter, it is set to 1.  */
-#define PROPERTY_HAS_NO_GETTER(DECL) DECL_LANG_FLAG_3 (DECL)
+#define PROPERTY_HAS_NO_GETTER(DECL) \
+  DECL_LANG_FLAG_3 (PROPERTY_DECL_CHECK (DECL))
 
 /* PROPERTY_HAS_NO_SETTER can be 0 or 1.  Normally it is 0, but if
    this is an artificial PROPERTY_DECL that we generate even without a
    setter, it is set to 1.  */
-#define PROPERTY_HAS_NO_SETTER(DECL) DECL_LANG_FLAG_4 (DECL)
+#define PROPERTY_HAS_NO_SETTER(DECL) \
+  DECL_LANG_FLAG_4 (PROPERTY_DECL_CHECK (DECL))
 
 /* PROPERTY_OPTIONAL can be 0 or 1.  Normally it is 0, but if this is
    a property declared as @optional in a @protocol, then it is set to
    1.  */
-#define PROPERTY_OPTIONAL(DECL) DECL_LANG_FLAG_5 (DECL)
+#define PROPERTY_OPTIONAL(DECL) \
+  DECL_LANG_FLAG_5 (PROPERTY_DECL_CHECK (DECL))
 
 /* PROPERTY_REF.  A PROPERTY_REF represents an 'object.property'
    expression.  It is normally used for property access, but when
@@ -693,6 +715,9 @@ struct objc_try_context
 
 extern tree objc_create_temporary_var (tree, const char *);
 
+size_t objc_common_tree_size (enum tree_code code);
+
+
 #define objc_is_object_id(TYPE) (OBJC_TYPE_NAME (TYPE) == objc_object_id)
 #define objc_is_class_id(TYPE) (OBJC_TYPE_NAME (TYPE) == objc_class_id)
 
index c9c5a293a98ec02546b528d4bb8ed9289808c8ad..ba06f4608e7ba5c2f6cdf4bf5628dfa492ef3931 100644 (file)
@@ -49,6 +49,8 @@ enum c_language_kind c_language = clk_objc;
 #define LANG_HOOKS_GIMPLIFY_EXPR objc_gimplify_expr
 #undef LANG_HOOKS_INIT_TS
 #define LANG_HOOKS_INIT_TS objc_common_init_ts
+#undef LANG_HOOKS_TREE_SIZE
+#define LANG_HOOKS_TREE_SIZE objc_common_tree_size
 
 /* Each front end provides its own lang hook initializer.  */
 struct lang_hooks lang_hooks = LANG_HOOKS_INITIALIZER;
index 91d88c2835d2de480ecefad5446760a11246523b..eee0df9afc0b91195e512d78209d7cc65cfdd2a6 100644 (file)
@@ -514,7 +514,6 @@ print_node (FILE *file, const char *prefix, tree node, int indent)
        }
       if (CODE_CONTAINS_STRUCT (code, TS_DECL_NON_COMMON))
        {
-         print_node (file, "arguments", DECL_ARGUMENT_FLD (node), indent + 4);
          print_node (file, "result", DECL_RESULT_FLD (node), indent + 4);
        }
 
@@ -540,6 +539,7 @@ print_node (FILE *file, const char *prefix, tree node, int indent)
       else if (code == FUNCTION_DECL
               && DECL_STRUCT_FUNCTION (node) != 0)
        {
+         print_node (file, "arguments", DECL_ARGUMENTS (node), indent + 4);
          indent_to (file, indent + 4);
          dump_addr (file, "struct-function ", DECL_STRUCT_FUNCTION (node));
        }
index 78067d563129694e042a9fb080a173f156ed7008..34c48fa1c99e462bb30a2944e329e59b4d7ec08d 100644 (file)
@@ -1494,8 +1494,6 @@ struct GTY(()) tree_var_decl {
 
 struct GTY(()) tree_decl_non_common {
   struct tree_decl_with_vis common;
-  /* C++ uses this in templates.  */
-  tree arguments;
   /* Almost all FE's use this.  */
   tree result;
 };
@@ -1510,6 +1508,8 @@ struct GTY(()) tree_function_decl {
 
   struct function *f;
 
+  /* Arguments of the function.  */
+  tree arguments;
   /* The personality function. Used for stack unwinding. */
   tree personality;
 
index 46f896362318048adee2098b3fdf4a4431db33dc..10063a4b5b6ab9edc3c94d3785c517e5c5a3a92f 100644 (file)
@@ -707,8 +707,14 @@ tree_code_size (enum tree_code code)
            return sizeof (struct tree_function_decl);
          case DEBUG_EXPR_DECL:
            return sizeof (struct tree_decl_with_rtl);
-         default:
+         case TRANSLATION_UNIT_DECL:
+           return sizeof (struct tree_translation_unit_decl);
+         case NAMESPACE_DECL:
+         case IMPORTED_DECL:
+         case NAMELIST_DECL:
            return sizeof (struct tree_decl_non_common);
+         default:
+           return lang_hooks.tree_size (code);
          }
       }
 
@@ -5304,7 +5310,6 @@ find_decls_types_r (tree *tp, int *ws, void *data)
        }
       else if (TREE_CODE (t) == TYPE_DECL)
        {
-         fld_worklist_push (DECL_ARGUMENT_FLD (t), fld);
          fld_worklist_push (DECL_ORIGINAL_TYPE (t), fld);
        }
       else if (TREE_CODE (t) == FIELD_DECL)
index 8fa928bfcf839a94481e9c391fcb60eceb1121fa..0b98de8b1e0f81616251759527fdaf1cf9edab4f 100644 (file)
@@ -2621,13 +2621,9 @@ extern vec<tree, va_gc> **decl_debug_args_insert (tree);
 #define DECL_BUILT_IN_CLASS(NODE) \
    (FUNCTION_DECL_CHECK (NODE)->function_decl.built_in_class)
 
-/* In FUNCTION_DECL, a chain of ..._DECL nodes.
-   VAR_DECL and PARM_DECL reserve the arguments slot for language-specific
-   uses.  */
+/* In FUNCTION_DECL, a chain of ..._DECL nodes.  */
 #define DECL_ARGUMENTS(NODE) \
-  (FUNCTION_DECL_CHECK (NODE)->decl_non_common.arguments)
-#define DECL_ARGUMENT_FLD(NODE) \
-  (DECL_NON_COMMON_CHECK (NODE)->decl_non_common.arguments)
+   (FUNCTION_DECL_CHECK (NODE)->function_decl.arguments)
 
 /* In FUNCTION_DECL, the function specific target options to use when compiling
    this function.  */