tree.h (struct typed_tree): New.
authorNathan Froyd <froydnj@codesourcery.com>
Tue, 12 Apr 2011 02:18:41 +0000 (02:18 +0000)
committerNathan Froyd <froydnj@gcc.gnu.org>
Tue, 12 Apr 2011 02:18:41 +0000 (02:18 +0000)
* tree.h (struct typed_tree): New.
(struct tree_common): Include it instead of tree_base.
(TREE_TYPE): Update for new location of type field.
(TYPE_USER_ALIGN, TYPE_PACKED): Refer to base field directly.
(DECL_USER_ALIGN, DECL_PACKED): Likewise.
(union tree_node): Add typed field.
* treestruct.def (TS_TYPED): New.
* lto-streamer.c (check_handled_ts_structures): Handle it.
* tree.c (MARK_TS_TYPED): New macro.
(MARK_TS_COMMON): Call it instead of MARK_TS_BASE.

From-SVN: r172295

gcc/ChangeLog
gcc/lto-streamer.c
gcc/tree.c
gcc/tree.h
gcc/treestruct.def

index 127b189504cf41ef4001d7dbff979778e7c755f5..b034a2eb521f1537a969efc437f468d2966aaf4e 100644 (file)
@@ -1,3 +1,16 @@
+2011-04-11  Nathan Froyd  <froydnj@codesourcery.com>
+
+       * tree.h (struct typed_tree): New.
+       (struct tree_common): Include it instead of tree_base.
+       (TREE_TYPE): Update for new location of type field.
+       (TYPE_USER_ALIGN, TYPE_PACKED): Refer to base field directly.
+       (DECL_USER_ALIGN, DECL_PACKED): Likewise.
+       (union tree_node): Add typed field.
+       * treestruct.def (TS_TYPED): New.
+       * lto-streamer.c (check_handled_ts_structures): Handle it.
+       * tree.c (MARK_TS_TYPED): New macro.
+       (MARK_TS_COMMON): Call it instead of MARK_TS_BASE.
+
 2011-04-11  Eric Botcazou  <ebotcazou@adacore.com>
 
        * cfghooks.c (redirect_edge_and_branch_force): Localize variable.
index c6738d27e641cab06ae751ffd7dc527b9dfd850e..74034b0748564a09dd57d48252ece3846dc17d92 100644 (file)
@@ -270,6 +270,7 @@ check_handled_ts_structures (void)
   /* These are the TS_* structures that are either handled or
      explicitly ignored by the streamer routines.  */
   handled_p[TS_BASE] = true;
+  handled_p[TS_TYPED] = true;
   handled_p[TS_COMMON] = true;
   handled_p[TS_INT_CST] = true;
   handled_p[TS_REAL_CST] = true;
index cf6fa5068a7f32b3d1ccb76b256d4d0c8cb1fad9..e137aadb9cbf25af4447d28ea79c6a27c4fcf94a 100644 (file)
@@ -357,9 +357,15 @@ initialize_tree_contains_struct (void)
     tree_contains_struct[C][TS_BASE] = 1;              \
   } while (0)
 
-#define MARK_TS_COMMON(C)                              \
+#define MARK_TS_TYPED(C)                               \
   do {                                                 \
     MARK_TS_BASE (C);                                  \
+    tree_contains_struct[C][TS_TYPED] = 1;             \
+  } while (0)
+
+#define MARK_TS_COMMON(C)                              \
+  do {                                                 \
+    MARK_TS_TYPED (C);                                 \
     tree_contains_struct[C][TS_COMMON] = 1;            \
   } while (0)
 
index fcdebd9928ca191918f58798cac5d28e428b65e9..149ba75ef11edac09de3b8f0fec4ff052b46c578 100644 (file)
@@ -407,12 +407,16 @@ struct GTY(()) tree_base {
   unsigned address_space : 8;
 };
 
-struct GTY(()) tree_common {
+struct GTY(()) tree_typed {
   struct tree_base base;
-  tree chain;
   tree type;
 };
 
+struct GTY(()) tree_common {
+  struct tree_typed typed;
+  tree chain;
+};
+
 /* The following table lists the uses of each of the above flags and
    for which types of nodes they are defined.
 
@@ -869,7 +873,7 @@ enum tree_node_structure_enum {
    In VECTOR_TYPE nodes, this is the type of the elements.  */
 #define TREE_TYPE(NODE) __extension__ \
 (*({__typeof (NODE) const __t = (NODE);                                        \
-    &__t->common.type; }))
+    &__t->typed.type; }))
 
 extern void tree_contains_struct_check_failed (const_tree,
                                               const enum tree_node_structure_enum,
@@ -936,7 +940,7 @@ extern void omp_clause_range_check_failed (const_tree, const char *, int,
 #define OMP_CLAUSE_SUBCODE_CHECK(T, CODE)      (T)
 
 #define TREE_CHAIN(NODE) ((NODE)->common.chain)
-#define TREE_TYPE(NODE) ((NODE)->common.type)
+#define TREE_TYPE(NODE) ((NODE)->typed.type)
 
 #endif
 
@@ -2151,7 +2155,7 @@ extern enum machine_mode vector_type_mode (const_tree);
 
 /* 1 if the alignment for this type was requested by "aligned" attribute,
    0 if it is the default for this type.  */
-#define TYPE_USER_ALIGN(NODE) (TYPE_CHECK (NODE)->common.base.user_align)
+#define TYPE_USER_ALIGN(NODE) (TYPE_CHECK (NODE)->base.user_align)
 
 /* The alignment for NODE, in bytes.  */
 #define TYPE_ALIGN_UNIT(NODE) (TYPE_ALIGN (NODE) / BITS_PER_UNIT)
@@ -2289,7 +2293,7 @@ extern enum machine_mode vector_type_mode (const_tree);
 
 /* Indicated that objects of this type should be laid out in as
    compact a way as possible.  */
-#define TYPE_PACKED(NODE) (TYPE_CHECK (NODE)->common.base.packed_flag)
+#define TYPE_PACKED(NODE) (TYPE_CHECK (NODE)->base.packed_flag)
 
 /* Used by type_contains_placeholder_p to avoid recomputation.
    Values are: 0 (unknown), 1 (false), 2 (true).  Never access
@@ -2632,7 +2636,7 @@ struct GTY(()) tree_decl_minimal {
 /* Set if the alignment of this DECL has been set by the user, for
    example with an 'aligned' attribute.  */
 #define DECL_USER_ALIGN(NODE) \
-  (DECL_COMMON_CHECK (NODE)->common.base.user_align)
+  (DECL_COMMON_CHECK (NODE)->base.user_align)
 /* Holds the machine mode corresponding to the declaration of a variable or
    field.  Always equal to TYPE_MODE (TREE_TYPE (decl)) except for a
    FIELD_DECL.  */
@@ -2900,7 +2904,7 @@ struct GTY(()) tree_decl_with_rtl {
 #define DECL_FCONTEXT(NODE) (FIELD_DECL_CHECK (NODE)->field_decl.fcontext)
 
 /* In a FIELD_DECL, indicates this field should be bit-packed.  */
-#define DECL_PACKED(NODE) (FIELD_DECL_CHECK (NODE)->common.base.packed_flag)
+#define DECL_PACKED(NODE) (FIELD_DECL_CHECK (NODE)->base.packed_flag)
 
 /* Nonzero in a FIELD_DECL means it is a bit field, and must be accessed
    specially.  */
@@ -3505,6 +3509,7 @@ extern tree build_target_option_node (void);
 union GTY ((ptr_alias (union lang_tree_node),
            desc ("tree_node_structure (&%h)"), variable_size)) tree_node {
   struct tree_base GTY ((tag ("TS_BASE"))) base;
+  struct tree_typed GTY ((tag ("TS_TYPED"))) typed;
   struct tree_common GTY ((tag ("TS_COMMON"))) common;
   struct tree_int_cst GTY ((tag ("TS_INT_CST"))) int_cst;
   struct tree_real_cst GTY ((tag ("TS_REAL_CST"))) real_cst;
index baea46ac096324e903d62ff924579f8f2b58031c..b65bdc2819a28493318bde1f7b28a25811e4eac7 100644 (file)
@@ -31,6 +31,7 @@ along with GCC; see the file COPYING3.  If not see
    specifying what structures contain what other structures in the
    tree_contains_struct array.  */
 DEFTREESTRUCT(TS_BASE, "base")
+DEFTREESTRUCT(TS_TYPED, "typed")
 DEFTREESTRUCT(TS_COMMON, "common")
 DEFTREESTRUCT(TS_INT_CST, "integer cst")
 DEFTREESTRUCT(TS_REAL_CST, "real cst")