Commit c1aaec5b by Richard Biener

cp-tree.h (TREE_INDIRECT_USING): Use TREE_LANG_FLAG_0 accessor.

2012-08-21  Richard Guenther  <rguenther@suse.de>

	cp/
	* cp-tree.h (TREE_INDIRECT_USING): Use TREE_LANG_FLAG_0 accessor.
	(ATTR_IS_DEPENDENT): Likewise.
	(ARGUMENT_PACK_INCOMPLETE_P): Use TREE_ADDRESSABLE instead of
	TREE_LANG_FLAG_0 on TREE_VECs.

	* tree.h (struct tree_base): Add union to make it possible to
	re-use the upper 4 bytes for tree codes that do not need as
	many flags as others.  Move visited and default_def_flag to
	common bits section in exchange for saturating_flag and
	unsigned_flag.  Add SSA name version and tree vec length
	fields here.
	(struct tree_vec): Remove length field here.
	(struct tree_ssa_name): Remove version field here.

From-SVN: r190558
parent 12d87607
2012-08-21 Richard Guenther <rguenther@suse.de>
* tree.h (struct tree_base): Add union to make it possible to
re-use the upper 4 bytes for tree codes that do not need as
many flags as others. Move visited and default_def_flag to
common bits section in exchange for saturating_flag and
unsigned_flag. Add SSA name version and tree vec length
fields here.
(struct tree_vec): Remove length field here.
(struct tree_ssa_name): Remove version field here.
2012-08-20 Jan Hubicka <jh@suse.cz> 2012-08-20 Jan Hubicka <jh@suse.cz>
PR fortran/48636 PR fortran/48636
* ipa-inline.c (want_inline_small_function_p): Take loop_iterations hint. * ipa-inline.c (want_inline_small_function_p): Take loop_iterations
hint.
(edge_badness): Likewise. (edge_badness): Likewise.
* ipa-inline.h (inline_hints_vals): Add INLINE_HINT_loop_iterations. * ipa-inline.h (inline_hints_vals): Add INLINE_HINT_loop_iterations.
(inline_summary): Add loop_iterations. (inline_summary): Add loop_iterations.
......
2012-08-21 Richard Guenther <rguenther@suse.de>
* cp-tree.h (TREE_INDIRECT_USING): Use TREE_LANG_FLAG_0 accessor.
(ATTR_IS_DEPENDENT): Likewise.
(ARGUMENT_PACK_INCOMPLETE_P): Use TREE_ADDRESSABLE instead of
TREE_LANG_FLAG_0 on TREE_VECs.
2012-08-20 Paolo Carlini <paolo.carlini@oracle.com> 2012-08-20 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/10416 PR c++/10416
......
...@@ -2520,11 +2520,11 @@ struct GTY((variable_size)) lang_decl { ...@@ -2520,11 +2520,11 @@ struct GTY((variable_size)) lang_decl {
/* In a TREE_LIST concatenating using directives, indicate indirect /* In a TREE_LIST concatenating using directives, indicate indirect
directives */ directives */
#define TREE_INDIRECT_USING(NODE) (TREE_LIST_CHECK (NODE)->base.lang_flag_0) #define TREE_INDIRECT_USING(NODE) TREE_LANG_FLAG_0 (TREE_LIST_CHECK (NODE))
/* In a TREE_LIST in an attribute list, indicates that the attribute /* In a TREE_LIST in an attribute list, indicates that the attribute
must be applied at instantiation time. */ must be applied at instantiation time. */
#define ATTR_IS_DEPENDENT(NODE) (TREE_LIST_CHECK (NODE)->base.lang_flag_0) #define ATTR_IS_DEPENDENT(NODE) TREE_LANG_FLAG_0 (TREE_LIST_CHECK (NODE))
extern tree decl_shadowed_for_var_lookup (tree); extern tree decl_shadowed_for_var_lookup (tree);
extern void decl_shadowed_for_var_insert (tree, tree); extern void decl_shadowed_for_var_insert (tree, tree);
...@@ -2881,7 +2881,7 @@ extern void decl_shadowed_for_var_insert (tree, tree); ...@@ -2881,7 +2881,7 @@ extern void decl_shadowed_for_var_insert (tree, tree);
arguments will be placed into the beginning of the argument pack, arguments will be placed into the beginning of the argument pack,
but additional arguments might still be deduced. */ but additional arguments might still be deduced. */
#define ARGUMENT_PACK_INCOMPLETE_P(NODE) \ #define ARGUMENT_PACK_INCOMPLETE_P(NODE) \
TREE_LANG_FLAG_0 (ARGUMENT_PACK_ARGS (NODE)) TREE_ADDRESSABLE (ARGUMENT_PACK_ARGS (NODE))
/* When ARGUMENT_PACK_INCOMPLETE_P, stores the explicit template /* When ARGUMENT_PACK_INCOMPLETE_P, stores the explicit template
arguments used to fill this pack. */ arguments used to fill this pack. */
......
...@@ -417,7 +417,8 @@ enum omp_clause_code ...@@ -417,7 +417,8 @@ enum omp_clause_code
so all nodes have these fields. so all nodes have these fields.
See the accessor macros, defined below, for documentation of the See the accessor macros, defined below, for documentation of the
fields. */ fields, and the table below which connects the fileds and the
accessor macros. */
struct GTY(()) tree_base { struct GTY(()) tree_base {
ENUM_BITFIELD(tree_code) code : 16; ENUM_BITFIELD(tree_code) code : 16;
...@@ -427,9 +428,9 @@ struct GTY(()) tree_base { ...@@ -427,9 +428,9 @@ struct GTY(()) tree_base {
unsigned addressable_flag : 1; unsigned addressable_flag : 1;
unsigned volatile_flag : 1; unsigned volatile_flag : 1;
unsigned readonly_flag : 1; unsigned readonly_flag : 1;
unsigned unsigned_flag : 1;
unsigned asm_written_flag: 1; unsigned asm_written_flag: 1;
unsigned nowarning_flag : 1; unsigned nowarning_flag : 1;
unsigned visited : 1;
unsigned used_flag : 1; unsigned used_flag : 1;
unsigned nothrow_flag : 1; unsigned nothrow_flag : 1;
...@@ -438,38 +439,42 @@ struct GTY(()) tree_base { ...@@ -438,38 +439,42 @@ struct GTY(()) tree_base {
unsigned private_flag : 1; unsigned private_flag : 1;
unsigned protected_flag : 1; unsigned protected_flag : 1;
unsigned deprecated_flag : 1; unsigned deprecated_flag : 1;
unsigned saturating_flag : 1;
unsigned default_def_flag : 1; unsigned default_def_flag : 1;
unsigned lang_flag_0 : 1;
unsigned lang_flag_1 : 1;
unsigned lang_flag_2 : 1;
unsigned lang_flag_3 : 1;
unsigned lang_flag_4 : 1;
unsigned lang_flag_5 : 1;
unsigned lang_flag_6 : 1;
unsigned visited : 1; union {
unsigned packed_flag : 1; /* The bits in the following structure should only be used with
unsigned user_align : 1; accessor macros that constrain inputs with tree checking. */
unsigned nameless_flag : 1; struct {
unsigned lang_flag_0 : 1;
unsigned spare : 12; unsigned lang_flag_1 : 1;
unsigned lang_flag_2 : 1;
/* This field is only used with type nodes; the only reason it is present unsigned lang_flag_3 : 1;
in tree_base instead of tree_type is to save space. The size of the unsigned lang_flag_4 : 1;
field must be large enough to hold addr_space_t values. */ unsigned lang_flag_5 : 1;
unsigned address_space : 8; unsigned lang_flag_6 : 1;
}; unsigned saturating_flag : 1;
struct GTY(()) tree_typed { unsigned unsigned_flag : 1;
struct tree_base base; unsigned packed_flag : 1;
tree type; unsigned user_align : 1;
}; unsigned nameless_flag : 1;
unsigned spare0 : 4;
struct GTY(()) tree_common {
struct tree_typed typed; unsigned spare1 : 8;
tree chain;
/* This field is only used with TREE_TYPE nodes; the only reason it is
present in tree_base instead of tree_type is to save space. The size
of the field must be large enough to hold addr_space_t values. */
unsigned address_space : 8;
} bits;
/* The following fields are present in tree_base to save space. The
nodes using them do not require any of the flags above and so can
make better use of the 4-byte sized word. */
/* VEC length. This field is only used with TREE_VEC. */
int length;
/* SSA version number. This field is only used with SSA_NAME. */
unsigned int version;
} GTY((skip(""))) u;
}; };
/* The following table lists the uses of each of the above flags and /* The following table lists the uses of each of the above flags and
...@@ -638,7 +643,10 @@ struct GTY(()) tree_common { ...@@ -638,7 +643,10 @@ struct GTY(()) tree_common {
TREE_ASM_WRITTEN in TREE_ASM_WRITTEN in
VAR_DECL, FUNCTION_DECL, TYPE_DECL VAR_DECL, FUNCTION_DECL, TYPE_DECL
RECORD_TYPE, UNION_TYPE, QUAL_UNION_TYPE RECORD_TYPE, UNION_TYPE, QUAL_UNION_TYPE
BLOCK, SSA_NAME, STRING_CST BLOCK, STRING_CST
SSA_NAME_OCCURS_IN_ABNORMAL_PHI in
SSA_NAME
used_flag: used_flag:
...@@ -659,6 +667,9 @@ struct GTY(()) tree_common { ...@@ -659,6 +667,9 @@ struct GTY(()) tree_common {
TREE_THIS_NOTRAP in TREE_THIS_NOTRAP in
INDIRECT_REF, MEM_REF, TARGET_MEM_REF, ARRAY_REF, ARRAY_RANGE_REF INDIRECT_REF, MEM_REF, TARGET_MEM_REF, ARRAY_REF, ARRAY_RANGE_REF
SSA_NAME_IN_FREELIST in
SSA_NAME
deprecated_flag: deprecated_flag:
TREE_DEPRECATED in TREE_DEPRECATED in
...@@ -699,6 +710,16 @@ struct GTY(()) tree_common { ...@@ -699,6 +710,16 @@ struct GTY(()) tree_common {
SSA_NAME SSA_NAME
*/ */
struct GTY(()) tree_typed {
struct tree_base base;
tree type;
};
struct GTY(()) tree_common {
struct tree_typed typed;
tree chain;
};
#undef DEFTREESTRUCT #undef DEFTREESTRUCT
#define DEFTREESTRUCT(ENUM, NAME) ENUM, #define DEFTREESTRUCT(ENUM, NAME) ENUM,
enum tree_node_structure_enum { enum tree_node_structure_enum {
...@@ -1226,10 +1247,10 @@ extern void omp_clause_range_check_failed (const_tree, const char *, int, ...@@ -1226,10 +1247,10 @@ extern void omp_clause_range_check_failed (const_tree, const char *, int,
/* In a decl (most significantly a FIELD_DECL), means an unsigned field. */ /* In a decl (most significantly a FIELD_DECL), means an unsigned field. */
#define DECL_UNSIGNED(NODE) \ #define DECL_UNSIGNED(NODE) \
(DECL_COMMON_CHECK (NODE)->base.unsigned_flag) (DECL_COMMON_CHECK (NODE)->base.u.bits.unsigned_flag)
/* In integral and pointer types, means an unsigned type. */ /* In integral and pointer types, means an unsigned type. */
#define TYPE_UNSIGNED(NODE) (TYPE_CHECK (NODE)->base.unsigned_flag) #define TYPE_UNSIGNED(NODE) (TYPE_CHECK (NODE)->base.u.bits.unsigned_flag)
/* True if overflow wraps around for the given integral type. That /* True if overflow wraps around for the given integral type. That
is, TYPE_MAX + 1 == TYPE_MIN. */ is, TYPE_MAX + 1 == TYPE_MIN. */
...@@ -1277,7 +1298,7 @@ extern void omp_clause_range_check_failed (const_tree, const char *, int, ...@@ -1277,7 +1298,7 @@ extern void omp_clause_range_check_failed (const_tree, const char *, int,
throw an exception. In a CALL_EXPR, nonzero means the call cannot throw an exception. In a CALL_EXPR, nonzero means the call cannot
throw. We can't easily check the node type here as the C++ throw. We can't easily check the node type here as the C++
frontend also uses this flag (for AGGR_INIT_EXPR). */ frontend also uses this flag (for AGGR_INIT_EXPR). */
#define TREE_NOTHROW(NODE) ((NODE)->base.nothrow_flag) #define TREE_NOTHROW(NODE) (TREE_NOT_CHECK (NODE, TREE_VEC)->base.nothrow_flag)
/* In a CALL_EXPR, means that it's safe to use the target of the call /* In a CALL_EXPR, means that it's safe to use the target of the call
expansion as the return slot for a call that returns in memory. */ expansion as the return slot for a call that returns in memory. */
...@@ -1347,16 +1368,23 @@ extern void omp_clause_range_check_failed (const_tree, const char *, int, ...@@ -1347,16 +1368,23 @@ extern void omp_clause_range_check_failed (const_tree, const char *, int,
(IDENTIFIER_NODE_CHECK (NODE)->base.deprecated_flag) (IDENTIFIER_NODE_CHECK (NODE)->base.deprecated_flag)
/* In fixed-point types, means a saturating type. */ /* In fixed-point types, means a saturating type. */
#define TYPE_SATURATING(NODE) ((NODE)->base.saturating_flag) #define TYPE_SATURATING(NODE) (TYPE_CHECK (NODE)->base.u.bits.saturating_flag)
/* These flags are available for each language front end to use internally. */ /* These flags are available for each language front end to use internally. */
#define TREE_LANG_FLAG_0(NODE) ((NODE)->base.lang_flag_0) #define TREE_LANG_FLAG_0(NODE) \
#define TREE_LANG_FLAG_1(NODE) ((NODE)->base.lang_flag_1) (TREE_NOT_CHECK2(NODE, TREE_VEC, SSA_NAME)->base.u.bits.lang_flag_0)
#define TREE_LANG_FLAG_2(NODE) ((NODE)->base.lang_flag_2) #define TREE_LANG_FLAG_1(NODE) \
#define TREE_LANG_FLAG_3(NODE) ((NODE)->base.lang_flag_3) (TREE_NOT_CHECK2(NODE, TREE_VEC, SSA_NAME)->base.u.bits.lang_flag_1)
#define TREE_LANG_FLAG_4(NODE) ((NODE)->base.lang_flag_4) #define TREE_LANG_FLAG_2(NODE) \
#define TREE_LANG_FLAG_5(NODE) ((NODE)->base.lang_flag_5) (TREE_NOT_CHECK2(NODE, TREE_VEC, SSA_NAME)->base.u.bits.lang_flag_2)
#define TREE_LANG_FLAG_6(NODE) ((NODE)->base.lang_flag_6) #define TREE_LANG_FLAG_3(NODE) \
(TREE_NOT_CHECK2(NODE, TREE_VEC, SSA_NAME)->base.u.bits.lang_flag_3)
#define TREE_LANG_FLAG_4(NODE) \
(TREE_NOT_CHECK2(NODE, TREE_VEC, SSA_NAME)->base.u.bits.lang_flag_4)
#define TREE_LANG_FLAG_5(NODE) \
(TREE_NOT_CHECK2(NODE, TREE_VEC, SSA_NAME)->base.u.bits.lang_flag_5)
#define TREE_LANG_FLAG_6(NODE) \
(TREE_NOT_CHECK2(NODE, TREE_VEC, SSA_NAME)->base.u.bits.lang_flag_6)
/* Define additional fields and accessors for nodes representing constants. */ /* Define additional fields and accessors for nodes representing constants. */
...@@ -1476,15 +1504,14 @@ struct GTY(()) tree_list { ...@@ -1476,15 +1504,14 @@ struct GTY(()) tree_list {
}; };
/* In a TREE_VEC node. */ /* In a TREE_VEC node. */
#define TREE_VEC_LENGTH(NODE) (TREE_VEC_CHECK (NODE)->vec.length) #define TREE_VEC_LENGTH(NODE) (TREE_VEC_CHECK (NODE)->base.u.length)
#define TREE_VEC_END(NODE) \ #define TREE_VEC_END(NODE) \
((void) TREE_VEC_CHECK (NODE), &((NODE)->vec.a[(NODE)->vec.length])) ((void) TREE_VEC_CHECK (NODE), &((NODE)->vec.a[(NODE)->vec.base.u.length]))
#define TREE_VEC_ELT(NODE,I) TREE_VEC_ELT_CHECK (NODE, I) #define TREE_VEC_ELT(NODE,I) TREE_VEC_ELT_CHECK (NODE, I)
struct GTY(()) tree_vec { struct GTY(()) tree_vec {
struct tree_common common; struct tree_common common;
int length;
tree GTY ((length ("TREE_VEC_LENGTH ((tree)&%h)"))) a[1]; tree GTY ((length ("TREE_VEC_LENGTH ((tree)&%h)"))) a[1];
}; };
...@@ -1888,7 +1915,7 @@ struct GTY(()) tree_exp { ...@@ -1888,7 +1915,7 @@ struct GTY(()) tree_exp {
/* Returns the SSA version number of this SSA name. Note that in /* Returns the SSA version number of this SSA name. Note that in
tree SSA, version numbers are not per variable and may be recycled. */ tree SSA, version numbers are not per variable and may be recycled. */
#define SSA_NAME_VERSION(NODE) SSA_NAME_CHECK (NODE)->ssa_name.version #define SSA_NAME_VERSION(NODE) SSA_NAME_CHECK (NODE)->base.u.version
/* Nonzero if this SSA name occurs in an abnormal PHI. SSA_NAMES are /* Nonzero if this SSA name occurs in an abnormal PHI. SSA_NAMES are
never output, so we can safely use the ASM_WRITTEN_FLAG for this never output, so we can safely use the ASM_WRITTEN_FLAG for this
...@@ -1943,9 +1970,6 @@ struct GTY(()) tree_ssa_name { ...@@ -1943,9 +1970,6 @@ struct GTY(()) tree_ssa_name {
/* Statement that defines this SSA name. */ /* Statement that defines this SSA name. */
gimple def_stmt; gimple def_stmt;
/* SSA version number. */
unsigned int version;
/* Pointer attributes used for alias analysis. */ /* Pointer attributes used for alias analysis. */
struct ptr_info_def *ptr_info; struct ptr_info_def *ptr_info;
...@@ -2008,7 +2032,7 @@ struct GTY(()) tree_omp_clause { ...@@ -2008,7 +2032,7 @@ struct GTY(()) tree_omp_clause {
#define BLOCK_ABSTRACT(NODE) (BLOCK_CHECK (NODE)->block.abstract_flag) #define BLOCK_ABSTRACT(NODE) (BLOCK_CHECK (NODE)->block.abstract_flag)
/* True if BLOCK has the same ranges as its BLOCK_SUPERCONTEXT. */ /* True if BLOCK has the same ranges as its BLOCK_SUPERCONTEXT. */
#define BLOCK_SAME_RANGE(NODE) (BLOCK_CHECK (NODE)->base.nameless_flag) #define BLOCK_SAME_RANGE(NODE) (BLOCK_CHECK (NODE)->base.u.bits.nameless_flag)
/* An index number for this block. These values are not guaranteed to /* An index number for this block. These values are not guaranteed to
be unique across functions -- whether or not they are depends on be unique across functions -- whether or not they are depends on
...@@ -2148,7 +2172,7 @@ extern enum machine_mode vector_type_mode (const_tree); ...@@ -2148,7 +2172,7 @@ extern enum machine_mode vector_type_mode (const_tree);
/* 1 if the alignment for this type was requested by "aligned" attribute, /* 1 if the alignment for this type was requested by "aligned" attribute,
0 if it is the default for this type. */ 0 if it is the default for this type. */
#define TYPE_USER_ALIGN(NODE) (TYPE_CHECK (NODE)->base.user_align) #define TYPE_USER_ALIGN(NODE) (TYPE_CHECK (NODE)->base.u.bits.user_align)
/* The alignment for NODE, in bytes. */ /* The alignment for NODE, in bytes. */
#define TYPE_ALIGN_UNIT(NODE) (TYPE_ALIGN (NODE) / BITS_PER_UNIT) #define TYPE_ALIGN_UNIT(NODE) (TYPE_ALIGN (NODE) / BITS_PER_UNIT)
...@@ -2179,10 +2203,10 @@ extern enum machine_mode vector_type_mode (const_tree); ...@@ -2179,10 +2203,10 @@ extern enum machine_mode vector_type_mode (const_tree);
#define TYPE_RESTRICT(NODE) (TYPE_CHECK (NODE)->type_common.restrict_flag) #define TYPE_RESTRICT(NODE) (TYPE_CHECK (NODE)->type_common.restrict_flag)
/* If nonzero, type's name shouldn't be emitted into debug info. */ /* If nonzero, type's name shouldn't be emitted into debug info. */
#define TYPE_NAMELESS(NODE) (TYPE_CHECK (NODE)->base.nameless_flag) #define TYPE_NAMELESS(NODE) (TYPE_CHECK (NODE)->base.u.bits.nameless_flag)
/* The address space the type is in. */ /* The address space the type is in. */
#define TYPE_ADDR_SPACE(NODE) (TYPE_CHECK (NODE)->base.address_space) #define TYPE_ADDR_SPACE(NODE) (TYPE_CHECK (NODE)->base.u.bits.address_space)
/* There is a TYPE_QUAL value for each type qualifier. They can be /* There is a TYPE_QUAL value for each type qualifier. They can be
combined by bitwise-or to form the complete set of qualifiers for a combined by bitwise-or to form the complete set of qualifiers for a
...@@ -2272,7 +2296,7 @@ enum cv_qualifier ...@@ -2272,7 +2296,7 @@ enum cv_qualifier
/* Indicated that objects of this type should be laid out in as /* Indicated that objects of this type should be laid out in as
compact a way as possible. */ compact a way as possible. */
#define TYPE_PACKED(NODE) (TYPE_CHECK (NODE)->base.packed_flag) #define TYPE_PACKED(NODE) (TYPE_CHECK (NODE)->base.u.bits.packed_flag)
/* Used by type_contains_placeholder_p to avoid recomputation. /* Used by type_contains_placeholder_p to avoid recomputation.
Values are: 0 (unknown), 1 (false), 2 (true). Never access Values are: 0 (unknown), 1 (false), 2 (true). Never access
...@@ -2610,7 +2634,7 @@ struct function; ...@@ -2610,7 +2634,7 @@ struct function;
(FIELD_DECL_CHECK (NODE)->decl_minimal.context) (FIELD_DECL_CHECK (NODE)->decl_minimal.context)
/* If nonzero, decl's name shouldn't be emitted into debug info. */ /* If nonzero, decl's name shouldn't be emitted into debug info. */
#define DECL_NAMELESS(NODE) (DECL_MINIMAL_CHECK (NODE)->base.nameless_flag) #define DECL_NAMELESS(NODE) (DECL_MINIMAL_CHECK (NODE)->base.u.bits.nameless_flag)
struct GTY(()) tree_decl_minimal { struct GTY(()) tree_decl_minimal {
struct tree_common common; struct tree_common common;
...@@ -2671,7 +2695,7 @@ struct GTY(()) tree_decl_minimal { ...@@ -2671,7 +2695,7 @@ struct GTY(()) tree_decl_minimal {
/* Set if the alignment of this DECL has been set by the user, for /* Set if the alignment of this DECL has been set by the user, for
example with an 'aligned' attribute. */ example with an 'aligned' attribute. */
#define DECL_USER_ALIGN(NODE) \ #define DECL_USER_ALIGN(NODE) \
(DECL_COMMON_CHECK (NODE)->base.user_align) (DECL_COMMON_CHECK (NODE)->base.u.bits.user_align)
/* Holds the machine mode corresponding to the declaration of a variable or /* 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. Always equal to TYPE_MODE (TREE_TYPE (decl)) except for a
FIELD_DECL. */ FIELD_DECL. */
...@@ -2956,7 +2980,7 @@ struct GTY(()) tree_decl_with_rtl { ...@@ -2956,7 +2980,7 @@ struct GTY(()) tree_decl_with_rtl {
#define DECL_FCONTEXT(NODE) (FIELD_DECL_CHECK (NODE)->field_decl.fcontext) #define DECL_FCONTEXT(NODE) (FIELD_DECL_CHECK (NODE)->field_decl.fcontext)
/* In a FIELD_DECL, indicates this field should be bit-packed. */ /* In a FIELD_DECL, indicates this field should be bit-packed. */
#define DECL_PACKED(NODE) (FIELD_DECL_CHECK (NODE)->base.packed_flag) #define DECL_PACKED(NODE) (FIELD_DECL_CHECK (NODE)->base.u.bits.packed_flag)
/* Nonzero in a FIELD_DECL means it is a bit field, and must be accessed /* Nonzero in a FIELD_DECL means it is a bit field, and must be accessed
specially. */ specially. */
...@@ -3246,7 +3270,7 @@ extern void decl_fini_priority_insert (tree, priority_type); ...@@ -3246,7 +3270,7 @@ extern void decl_fini_priority_insert (tree, priority_type);
#define MAX_RESERVED_INIT_PRIORITY 100 #define MAX_RESERVED_INIT_PRIORITY 100
#define VAR_DECL_IS_VIRTUAL_OPERAND(NODE) \ #define VAR_DECL_IS_VIRTUAL_OPERAND(NODE) \
(VAR_DECL_CHECK (NODE)->base.saturating_flag) (VAR_DECL_CHECK (NODE)->base.u.bits.saturating_flag)
struct GTY(()) tree_var_decl { struct GTY(()) tree_var_decl {
struct tree_decl_with_vis common; struct tree_decl_with_vis common;
...@@ -3822,8 +3846,8 @@ tree_vec_elt_check (tree __t, int __i, ...@@ -3822,8 +3846,8 @@ tree_vec_elt_check (tree __t, int __i,
{ {
if (TREE_CODE (__t) != TREE_VEC) if (TREE_CODE (__t) != TREE_VEC)
tree_check_failed (__t, __f, __l, __g, TREE_VEC, 0); tree_check_failed (__t, __f, __l, __g, TREE_VEC, 0);
if (__i < 0 || __i >= __t->vec.length) if (__i < 0 || __i >= __t->base.u.length)
tree_vec_elt_check_failed (__i, __t->vec.length, __f, __l, __g); tree_vec_elt_check_failed (__i, __t->base.u.length, __f, __l, __g);
return &CONST_CAST_TREE (__t)->vec.a[__i]; return &CONST_CAST_TREE (__t)->vec.a[__i];
} }
...@@ -4028,8 +4052,8 @@ tree_vec_elt_check (const_tree __t, int __i, ...@@ -4028,8 +4052,8 @@ tree_vec_elt_check (const_tree __t, int __i,
{ {
if (TREE_CODE (__t) != TREE_VEC) if (TREE_CODE (__t) != TREE_VEC)
tree_check_failed (__t, __f, __l, __g, TREE_VEC, 0); tree_check_failed (__t, __f, __l, __g, TREE_VEC, 0);
if (__i < 0 || __i >= __t->vec.length) if (__i < 0 || __i >= __t->base.u.length)
tree_vec_elt_check_failed (__i, __t->vec.length, __f, __l, __g); tree_vec_elt_check_failed (__i, __t->base.u.length, __f, __l, __g);
return CONST_CAST (const_tree *, &__t->vec.a[__i]); return CONST_CAST (const_tree *, &__t->vec.a[__i]);
//return &__t->vec.a[__i]; //return &__t->vec.a[__i];
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment