Index: gcc/gcc/tree.h |
diff --git a/gcc/gcc/tree.h b/gcc/gcc/tree.h |
index e7f15e16b92ee7dbd367464859fd73582456fe9a..77bdb9ab1ceb1028ef1af304cd57a864b76449f0 100644 |
--- a/gcc/gcc/tree.h |
+++ b/gcc/gcc/tree.h |
@@ -1,6 +1,6 @@ |
/* Front-end tree definitions for GNU compiler. |
Copyright (C) 1989, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, |
- 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 |
+ 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 |
Free Software Foundation, Inc. |
This file is part of GCC. |
@@ -105,14 +105,6 @@ extern const enum tree_code_class tree_code_type[]; |
#define DECL_P(CODE)\ |
(TREE_CODE_CLASS (TREE_CODE (CODE)) == tcc_declaration) |
-/* Nonzero if CODE represents a memory tag. */ |
- |
-#define MTAG_P(CODE) \ |
- (TREE_CODE (CODE) == NAME_MEMORY_TAG \ |
- || TREE_CODE (CODE) == SYMBOL_MEMORY_TAG \ |
- || TREE_CODE (CODE) == MEMORY_PARTITION_TAG) |
- |
- |
/* Nonzero if DECL represents a VAR_DECL or FUNCTION_DECL. */ |
#define VAR_OR_FUNCTION_DECL_P(DECL)\ |
@@ -191,6 +183,22 @@ DEF_VEC_P(tree); |
DEF_VEC_ALLOC_P(tree,gc); |
DEF_VEC_ALLOC_P(tree,heap); |
+/* We have to be able to tell cgraph about the needed-ness of the target |
+ of an alias. This requires that the decl have been defined. Aliases |
+ that precede their definition have to be queued for later processing. */ |
+ |
+typedef struct GTY(()) alias_pair |
+{ |
+ tree decl; |
+ tree target; |
+} alias_pair; |
+ |
+/* Define gc'd vector type. */ |
+DEF_VEC_O(alias_pair); |
+DEF_VEC_ALLOC_O(alias_pair,gc); |
+ |
+extern GTY(()) VEC(alias_pair,gc) * alias_pairs; |
+ |
/* Classify which part of the compiler has defined a given builtin function. |
Note that we assume below that this is no more than two bits. */ |
@@ -348,10 +356,8 @@ enum omp_clause_code |
See the accessor macros, defined below, for documentation of the |
fields. */ |
-union tree_ann_d; |
-struct tree_base GTY(()) |
-{ |
+struct GTY(()) tree_base { |
ENUM_BITFIELD(tree_code) code : 16; |
unsigned side_effects_flag : 1; |
@@ -371,8 +377,8 @@ struct tree_base GTY(()) |
unsigned protected_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; |
@@ -380,15 +386,20 @@ struct tree_base GTY(()) |
unsigned lang_flag_4 : 1; |
unsigned lang_flag_5 : 1; |
unsigned lang_flag_6 : 1; |
+ |
unsigned visited : 1; |
+ unsigned packed_flag : 1; |
+ unsigned user_align : 1; |
- unsigned spare : 23; |
+ unsigned spare : 13; |
- union tree_ann_d *ann; |
+ /* This field is only used with 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; |
}; |
-struct tree_common GTY(()) |
-{ |
+struct GTY(()) tree_common { |
struct tree_base base; |
tree chain; |
tree type; |
@@ -435,9 +446,6 @@ struct tree_common GTY(()) |
ASM_INPUT_P in |
ASM_EXPR |
- EH_FILTER_MUST_NOT_THROW in |
- EH_FILTER_EXPR |
- |
TYPE_REF_CAN_ALIAS_ALL in |
POINTER_TYPE, REFERENCE_TYPE |
@@ -485,9 +493,6 @@ struct tree_common GTY(()) |
CALL_EXPR_RETURN_SLOT_OPT in |
CALL_EXPR |
- DECL_BY_REFERENCE in |
- PARM_DECL, RESULT_DECL |
- |
OMP_SECTION_LAST in |
OMP_SECTION |
@@ -587,6 +592,7 @@ struct tree_common GTY(()) |
TREE_DEPRECATED in |
all decls |
+ all types |
IDENTIFIER_TRANSPARENT_ALIAS in |
IDENTIFIER_NODE |
@@ -612,6 +618,9 @@ struct tree_common GTY(()) |
default_def_flag: |
+ TYPE_VECTOR_OPAQUE in |
+ VECTOR_TYPE |
+ |
SSA_NAME_IS_DEFAULT_DEF in |
SSA_NAME |
*/ |
@@ -933,7 +942,6 @@ extern void omp_clause_range_check_failed (const_tree, const char *, int, |
#define TYPE_CHECK(T) TREE_CLASS_CHECK (T, tcc_type) |
#define DECL_MINIMAL_CHECK(T) CONTAINS_STRUCT_CHECK (T, TS_DECL_MINIMAL) |
-#define TREE_MEMORY_TAG_CHECK(T) CONTAINS_STRUCT_CHECK (T, TS_MEMORY_TAG) |
#define DECL_COMMON_CHECK(T) CONTAINS_STRUCT_CHECK (T, TS_DECL_COMMON) |
#define DECL_WRTL_CHECK(T) CONTAINS_STRUCT_CHECK (T, TS_DECL_WRTL) |
#define DECL_WITH_VIS_CHECK(T) CONTAINS_STRUCT_CHECK (T, TS_DECL_WITH_VIS) |
@@ -974,30 +982,17 @@ extern void omp_clause_range_check_failed (const_tree, const char *, int, |
case NOP_EXPR: \ |
case CONVERT_EXPR |
-/* Given an expression as a tree, strip any NON_LVALUE_EXPRs and NOP_EXPRs |
- that don't change the machine mode. */ |
+/* Given an expression as a tree, strip any conversion that generates |
+ no instruction. Accepts both tree and const_tree arguments since |
+ we are not modifying the tree itself. */ |
-#define STRIP_NOPS(EXP) \ |
- while ((CONVERT_EXPR_P (EXP) \ |
- || TREE_CODE (EXP) == NON_LVALUE_EXPR) \ |
- && TREE_OPERAND (EXP, 0) != error_mark_node \ |
- && (TYPE_MODE (TREE_TYPE (EXP)) \ |
- == TYPE_MODE (TREE_TYPE (TREE_OPERAND (EXP, 0))))) \ |
- (EXP) = TREE_OPERAND (EXP, 0) |
+#define STRIP_NOPS(EXP) \ |
+ (EXP) = tree_strip_nop_conversions (CONST_CAST_TREE (EXP)) |
/* Like STRIP_NOPS, but don't let the signedness change either. */ |
#define STRIP_SIGN_NOPS(EXP) \ |
- while ((CONVERT_EXPR_P (EXP) \ |
- || TREE_CODE (EXP) == NON_LVALUE_EXPR) \ |
- && TREE_OPERAND (EXP, 0) != error_mark_node \ |
- && (TYPE_MODE (TREE_TYPE (EXP)) \ |
- == TYPE_MODE (TREE_TYPE (TREE_OPERAND (EXP, 0)))) \ |
- && (TYPE_UNSIGNED (TREE_TYPE (EXP)) \ |
- == TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (EXP, 0)))) \ |
- && (POINTER_TYPE_P (TREE_TYPE (EXP)) \ |
- == POINTER_TYPE_P (TREE_TYPE (TREE_OPERAND (EXP, 0))))) \ |
- (EXP) = TREE_OPERAND (EXP, 0) |
+ (EXP) = tree_strip_sign_nop_conversions (CONST_CAST_TREE (EXP)) |
/* Like STRIP_NOPS, but don't alter the TREE_TYPE either. */ |
@@ -1012,9 +1007,8 @@ extern void omp_clause_range_check_failed (const_tree, const char *, int, |
/* Remove unnecessary type conversions according to |
tree_ssa_useless_type_conversion. */ |
-#define STRIP_USELESS_TYPE_CONVERSION(EXP) \ |
- while (tree_ssa_useless_type_conversion (EXP)) \ |
- EXP = TREE_OPERAND (EXP, 0) |
+#define STRIP_USELESS_TYPE_CONVERSION(EXP) \ |
+ (EXP) = tree_ssa_strip_useless_type_conversions (EXP) |
/* Nonzero if TYPE represents an integral type. Note that we do not |
include COMPLEX types here. Keep these checks in ascending code |
@@ -1070,12 +1064,17 @@ extern void omp_clause_range_check_failed (const_tree, const char *, int, |
(SCALAR_FLOAT_TYPE_P (TYPE) \ |
&& DECIMAL_FLOAT_MODE_P (TYPE_MODE (TYPE))) |
+/* Nonzero if TYPE is a record or union type. */ |
+#define RECORD_OR_UNION_TYPE_P(TYPE) \ |
+ (TREE_CODE (TYPE) == RECORD_TYPE \ |
+ || TREE_CODE (TYPE) == UNION_TYPE \ |
+ || TREE_CODE (TYPE) == QUAL_UNION_TYPE) |
+ |
/* Nonzero if TYPE represents an aggregate (multi-component) type. |
Keep these checks in ascending code order. */ |
#define AGGREGATE_TYPE_P(TYPE) \ |
- (TREE_CODE (TYPE) == ARRAY_TYPE || TREE_CODE (TYPE) == RECORD_TYPE \ |
- || TREE_CODE (TYPE) == UNION_TYPE || TREE_CODE (TYPE) == QUAL_UNION_TYPE) |
+ (TREE_CODE (TYPE) == ARRAY_TYPE || RECORD_OR_UNION_TYPE_P (TYPE)) |
/* Nonzero if TYPE represents a pointer or reference type. |
(It should be renamed to INDIRECT_TYPE_P.) Keep these checks in |
@@ -1130,7 +1129,9 @@ extern void omp_clause_range_check_failed (const_tree, const char *, int, |
(CASE_LABEL_EXPR_CHECK (NODE)->base.addressable_flag) |
#define PREDICT_EXPR_OUTCOME(NODE) \ |
- (PREDICT_EXPR_CHECK(NODE)->base.addressable_flag) |
+ ((enum prediction) (PREDICT_EXPR_CHECK(NODE)->base.addressable_flag)) |
+#define SET_PREDICT_EXPR_OUTCOME(NODE, OUTCOME) \ |
+ (PREDICT_EXPR_CHECK(NODE)->base.addressable_flag = (int) OUTCOME) |
#define PREDICT_EXPR_PREDICTOR(NODE) \ |
((enum br_predictor)tree_low_cst (TREE_OPERAND (PREDICT_EXPR_CHECK (NODE), 0), 0)) |
@@ -1186,9 +1187,6 @@ extern void omp_clause_range_check_failed (const_tree, const char *, int, |
#define TREE_OVERFLOW(NODE) (CST_CHECK (NODE)->base.public_flag) |
-/* ??? This is an obsolete synonym for TREE_OVERFLOW. */ |
-#define TREE_CONSTANT_OVERFLOW(NODE) TREE_OVERFLOW(NODE) |
- |
/* TREE_OVERFLOW can only be true for EXPR of CONSTANT_CLASS_P. */ |
#define TREE_OVERFLOW_P(EXPR) \ |
@@ -1256,7 +1254,7 @@ extern void omp_clause_range_check_failed (const_tree, const char *, int, |
#define TREE_THIS_NOTRAP(NODE) ((NODE)->base.nothrow_flag) |
/* In a VAR_DECL, PARM_DECL or FIELD_DECL, or any kind of ..._REF node, |
- nonzero means it may not be the lhs of an assignment. |
+ nonzero means it may not be the lhs of an assignment. |
Nonzero in a FUNCTION_DECL means this function should be treated |
as "const" function (can only read its arguments). */ |
#define TREE_READONLY(NODE) (NON_TYPE_CHECK (NODE)->base.readonly_flag) |
@@ -1281,7 +1279,7 @@ extern void omp_clause_range_check_failed (const_tree, const char *, int, |
This is interesting in an inline function, since it might not need |
to be compiled separately. |
Nonzero in a RECORD_TYPE, UNION_TYPE, QUAL_UNION_TYPE or ENUMERAL_TYPE |
- if the sdb debugging info for the type has been written. |
+ if the debugging info for the type has been written. |
In a BLOCK node, nonzero if reorder_blocks has already seen this block. |
In an SSA_NAME node, nonzero if the SSA_NAME occurs in an abnormal |
PHI node. */ |
@@ -1303,9 +1301,21 @@ extern void omp_clause_range_check_failed (const_tree, const char *, int, |
#define CALL_EXPR_RETURN_SLOT_OPT(NODE) \ |
(CALL_EXPR_CHECK (NODE)->base.private_flag) |
-/* In a RESULT_DECL or PARM_DECL, means that it is passed by invisible |
- reference (and the TREE_TYPE is a pointer to the true type). */ |
-#define DECL_BY_REFERENCE(NODE) (DECL_COMMON_CHECK (NODE)->base.private_flag) |
+/* In a RESULT_DECL, PARM_DECL and VAR_DECL, means that it is |
+ passed by invisible reference (and the TREE_TYPE is a pointer to the true |
+ type). */ |
+#define DECL_BY_REFERENCE(NODE) \ |
+ (TREE_CHECK3 (NODE, VAR_DECL, PARM_DECL, \ |
+ RESULT_DECL)->decl_common.decl_by_reference_flag) |
+ |
+/* In a RESULT_DECL, PARM_DECL and VAR_DECL, means that this decl |
+ can be used as restricted tag to disambiguate against other restrict |
+ pointers. Used by fortran to capture something like non-addressability |
+ (which it isn't really because the middle-end does take addresses of |
+ such variables). */ |
+#define DECL_RESTRICTED_P(NODE) \ |
+ (TREE_CHECK3 (NODE, VAR_DECL, PARM_DECL, \ |
+ RESULT_DECL)->decl_common.decl_restricted_flag) |
/* In a CALL_EXPR, means that the call is the jump from a thunk to the |
thunked-to function. */ |
@@ -1371,8 +1381,7 @@ extern void omp_clause_range_check_failed (const_tree, const char *, int, |
== (unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (B)) \ |
&& TREE_INT_CST_LOW (A) < TREE_INT_CST_LOW (B))) |
-struct tree_int_cst GTY(()) |
-{ |
+struct GTY(()) tree_int_cst { |
struct tree_common common; |
double_int int_cst; |
}; |
@@ -1385,8 +1394,7 @@ struct real_value; |
#define TREE_REAL_CST_PTR(NODE) (REAL_CST_CHECK (NODE)->real_cst.real_cst_ptr) |
#define TREE_REAL_CST(NODE) (*TREE_REAL_CST_PTR (NODE)) |
-struct tree_real_cst GTY(()) |
-{ |
+struct GTY(()) tree_real_cst { |
struct tree_common common; |
struct real_value * real_cst_ptr; |
}; |
@@ -1397,8 +1405,7 @@ struct fixed_value; |
#define TREE_FIXED_CST_PTR(NODE) (FIXED_CST_CHECK (NODE)->fixed_cst.fixed_cst_ptr) |
#define TREE_FIXED_CST(NODE) (*TREE_FIXED_CST_PTR (NODE)) |
-struct tree_fixed_cst GTY(()) |
-{ |
+struct GTY(()) tree_fixed_cst { |
struct tree_common common; |
struct fixed_value * fixed_cst_ptr; |
}; |
@@ -1408,8 +1415,7 @@ struct tree_fixed_cst GTY(()) |
#define TREE_STRING_POINTER(NODE) \ |
((const char *)(STRING_CST_CHECK (NODE)->string.str)) |
-struct tree_string GTY(()) |
-{ |
+struct GTY(()) tree_string { |
struct tree_common common; |
int length; |
char str[1]; |
@@ -1419,8 +1425,7 @@ struct tree_string GTY(()) |
#define TREE_REALPART(NODE) (COMPLEX_CST_CHECK (NODE)->complex.real) |
#define TREE_IMAGPART(NODE) (COMPLEX_CST_CHECK (NODE)->complex.imag) |
-struct tree_complex GTY(()) |
-{ |
+struct GTY(()) tree_complex { |
struct tree_common common; |
tree real; |
tree imag; |
@@ -1429,8 +1434,7 @@ struct tree_complex GTY(()) |
/* In a VECTOR_CST node. */ |
#define TREE_VECTOR_CST_ELTS(NODE) (VECTOR_CST_CHECK (NODE)->vector.elements) |
-struct tree_vector GTY(()) |
-{ |
+struct GTY(()) tree_vector { |
struct tree_common common; |
tree elements; |
}; |
@@ -1453,8 +1457,7 @@ struct tree_vector GTY(()) |
((tree) ((char *) (NODE) - sizeof (struct tree_common))) |
#define GCC_IDENT_TO_HT_IDENT(NODE) (&((struct tree_identifier *) (NODE))->id) |
-struct tree_identifier GTY(()) |
-{ |
+struct GTY(()) tree_identifier { |
struct tree_common common; |
struct ht_identifier id; |
}; |
@@ -1463,8 +1466,7 @@ struct tree_identifier GTY(()) |
#define TREE_PURPOSE(NODE) (TREE_LIST_CHECK (NODE)->list.purpose) |
#define TREE_VALUE(NODE) (TREE_LIST_CHECK (NODE)->list.value) |
-struct tree_list GTY(()) |
-{ |
+struct GTY(()) tree_list { |
struct tree_common common; |
tree purpose; |
tree value; |
@@ -1477,8 +1479,7 @@ struct tree_list GTY(()) |
#define TREE_VEC_ELT(NODE,I) TREE_VEC_ELT_CHECK (NODE, I) |
-struct tree_vec GTY(()) |
-{ |
+struct GTY(()) tree_vec { |
struct tree_common common; |
int length; |
tree GTY ((length ("TREE_VEC_LENGTH ((tree)&%h)"))) a[1]; |
@@ -1519,12 +1520,16 @@ struct tree_vec GTY(()) |
_ce___->value = VALUE; \ |
} while (0) |
+/* True if NODE, a FIELD_DECL, is to be processed as a bitfield for |
+ constructor output purposes. */ |
+#define CONSTRUCTOR_BITFIELD_P(NODE) \ |
+ (DECL_BIT_FIELD (FIELD_DECL_CHECK (NODE)) && DECL_MODE (NODE) != BLKmode) |
+ |
/* A single element of a CONSTRUCTOR. VALUE holds the actual value of the |
element. INDEX can optionally design the position of VALUE: in arrays, |
it is the index where VALUE has to be placed; in structures, it is the |
FIELD_DECL of the member. */ |
-typedef struct constructor_elt_d GTY(()) |
-{ |
+typedef struct GTY(()) constructor_elt_d { |
tree index; |
tree value; |
} constructor_elt; |
@@ -1532,8 +1537,7 @@ typedef struct constructor_elt_d GTY(()) |
DEF_VEC_O(constructor_elt); |
DEF_VEC_ALLOC_O(constructor_elt,gc); |
-struct tree_constructor GTY(()) |
-{ |
+struct GTY(()) tree_constructor { |
struct tree_common common; |
VEC(constructor_elt,gc) *elts; |
}; |
@@ -1557,6 +1561,9 @@ struct tree_constructor GTY(()) |
#define VL_EXP_OPERAND_LENGTH(NODE) \ |
((int)TREE_INT_CST_LOW (VL_EXP_CHECK (NODE)->exp.operands[0])) |
+/* Nonzero if is_gimple_debug() may possibly hold. */ |
+#define MAY_HAVE_DEBUG_STMTS (flag_var_tracking_assignments) |
+ |
/* In a LOOP_EXPR node. */ |
#define LOOP_EXPR_BODY(NODE) TREE_OPERAND_CHECK_CODE (NODE, LOOP_EXPR, 0) |
@@ -1566,16 +1573,12 @@ struct tree_constructor GTY(()) |
#define EXPR_LOCATION(NODE) (EXPR_P ((NODE)) ? (NODE)->exp.locus : UNKNOWN_LOCATION) |
#define SET_EXPR_LOCATION(NODE, LOCUS) EXPR_CHECK ((NODE))->exp.locus = (LOCUS) |
#define EXPR_HAS_LOCATION(NODE) (EXPR_LOCATION (NODE) != UNKNOWN_LOCATION) |
-#define EXPR_LOCUS(NODE) (EXPR_P (NODE) \ |
- ? CONST_CAST (source_location *, &(NODE)->exp.locus) \ |
- : (source_location *) NULL) |
-#define SET_EXPR_LOCUS(NODE, FROM) set_expr_locus ((NODE), (FROM)) |
#define EXPR_FILENAME(NODE) LOCATION_FILE (EXPR_CHECK ((NODE))->exp.locus) |
#define EXPR_LINENO(NODE) LOCATION_LINE (EXPR_CHECK (NODE)->exp.locus) |
/* True if a tree is an expression or statement that can have a |
location. */ |
-#define CAN_HAVE_LOCATION_P(NODE) (EXPR_P (NODE)) |
+#define CAN_HAVE_LOCATION_P(NODE) ((NODE) && EXPR_P (NODE)) |
extern void protected_set_expr_location (tree, location_t); |
@@ -1590,6 +1593,12 @@ extern void protected_set_expr_location (tree, location_t); |
#define EXIT_EXPR_COND(NODE) TREE_OPERAND (EXIT_EXPR_CHECK (NODE), 0) |
+/* COMPOUND_LITERAL_EXPR accessors. */ |
+#define COMPOUND_LITERAL_EXPR_DECL_EXPR(NODE) \ |
+ TREE_OPERAND (COMPOUND_LITERAL_EXPR_CHECK (NODE), 0) |
+#define COMPOUND_LITERAL_EXPR_DECL(NODE) \ |
+ DECL_EXPR_DECL (COMPOUND_LITERAL_EXPR_DECL_EXPR (NODE)) |
+ |
/* SWITCH_EXPR accessors. These give access to the condition, body and |
original condition type (before any compiler conversions) |
of the switch statement, respectively. */ |
@@ -1610,7 +1619,6 @@ extern void protected_set_expr_location (tree, location_t); |
#define TMR_STEP(NODE) (TREE_OPERAND (TARGET_MEM_REF_CHECK (NODE), 3)) |
#define TMR_OFFSET(NODE) (TREE_OPERAND (TARGET_MEM_REF_CHECK (NODE), 4)) |
#define TMR_ORIGINAL(NODE) (TREE_OPERAND (TARGET_MEM_REF_CHECK (NODE), 5)) |
-#define TMR_TAG(NODE) (TREE_OPERAND (TARGET_MEM_REF_CHECK (NODE), 6)) |
/* The operands of a BIND_EXPR. */ |
#define BIND_EXPR_VARS(NODE) (TREE_OPERAND (BIND_EXPR_CHECK (NODE), 0)) |
@@ -1629,6 +1637,7 @@ extern void protected_set_expr_location (tree, location_t); |
#define ASM_OUTPUTS(NODE) TREE_OPERAND (ASM_EXPR_CHECK (NODE), 1) |
#define ASM_INPUTS(NODE) TREE_OPERAND (ASM_EXPR_CHECK (NODE), 2) |
#define ASM_CLOBBERS(NODE) TREE_OPERAND (ASM_EXPR_CHECK (NODE), 3) |
+#define ASM_LABELS(NODE) TREE_OPERAND (ASM_EXPR_CHECK (NODE), 4) |
/* Nonzero if we want to create an ASM_INPUT instead of an |
ASM_OPERAND with no operands. */ |
#define ASM_INPUT_P(NODE) (ASM_EXPR_CHECK (NODE)->base.static_flag) |
@@ -1659,14 +1668,6 @@ extern void protected_set_expr_location (tree, location_t); |
/* EH_FILTER_EXPR accessors. */ |
#define EH_FILTER_TYPES(NODE) TREE_OPERAND (EH_FILTER_EXPR_CHECK (NODE), 0) |
#define EH_FILTER_FAILURE(NODE) TREE_OPERAND (EH_FILTER_EXPR_CHECK (NODE), 1) |
-#define EH_FILTER_MUST_NOT_THROW(NODE) \ |
- (EH_FILTER_EXPR_CHECK (NODE)->base.static_flag) |
- |
-/* CHANGE_DYNAMIC_TYPE_EXPR accessors. */ |
-#define CHANGE_DYNAMIC_TYPE_NEW_TYPE(NODE) \ |
- TREE_OPERAND (CHANGE_DYNAMIC_TYPE_EXPR_CHECK (NODE), 0) |
-#define CHANGE_DYNAMIC_TYPE_LOCATION(NODE) \ |
- TREE_OPERAND (CHANGE_DYNAMIC_TYPE_EXPR_CHECK (NODE), 1) |
/* OBJ_TYPE_REF accessors. */ |
#define OBJ_TYPE_REF_EXPR(NODE) TREE_OPERAND (OBJ_TYPE_REF_CHECK (NODE), 0) |
@@ -1738,6 +1739,9 @@ extern void protected_set_expr_location (tree, location_t); |
OMP_CLAUSE_OPERAND (OMP_CLAUSE_RANGE_CHECK (OMP_CLAUSE_CHECK (NODE), \ |
OMP_CLAUSE_PRIVATE, \ |
OMP_CLAUSE_COPYPRIVATE), 0) |
+#define OMP_CLAUSE_HAS_LOCATION(NODE) \ |
+ ((OMP_CLAUSE_CHECK (NODE))->omp_clause.locus != UNKNOWN_LOCATION) |
+#define OMP_CLAUSE_LOCATION(NODE) (OMP_CLAUSE_CHECK (NODE))->omp_clause.locus |
/* True on an OMP_SECTION statement that was the last lexical member. |
This status is meaningful in the implementation of lastprivate. */ |
@@ -1822,8 +1826,7 @@ enum omp_clause_default_kind |
#define OMP_CLAUSE_DEFAULT_KIND(NODE) \ |
(OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_DEFAULT)->omp_clause.subcode.default_kind) |
-struct tree_exp GTY(()) |
-{ |
+struct GTY(()) tree_exp { |
struct tree_common common; |
location_t locus; |
tree block; |
@@ -1869,10 +1872,6 @@ struct tree_exp GTY(()) |
#define SSA_NAME_PTR_INFO(N) \ |
SSA_NAME_CHECK (N)->ssa_name.ptr_info |
-/* Get the value of this SSA_NAME, if available. */ |
-#define SSA_NAME_VALUE(N) \ |
- SSA_NAME_CHECK (N)->ssa_name.value_handle |
- |
#ifndef _TREE_FLOW_H |
struct ptr_info_def; |
#endif |
@@ -1881,8 +1880,7 @@ struct ptr_info_def; |
/* Immediate use linking structure. This structure is used for maintaining |
a doubly linked list of uses of an SSA_NAME. */ |
-typedef struct ssa_use_operand_d GTY(()) |
-{ |
+typedef struct GTY(()) ssa_use_operand_d { |
struct ssa_use_operand_d* GTY((skip(""))) prev; |
struct ssa_use_operand_d* GTY((skip(""))) next; |
/* Immediate uses for a given SSA name are maintained as a cyclic |
@@ -1897,8 +1895,7 @@ typedef struct ssa_use_operand_d GTY(()) |
/* Return the immediate_use information for an SSA_NAME. */ |
#define SSA_NAME_IMM_USE_NODE(NODE) SSA_NAME_CHECK (NODE)->ssa_name.imm_uses |
-struct tree_ssa_name GTY(()) |
-{ |
+struct GTY(()) tree_ssa_name { |
struct tree_common common; |
/* _DECL wrapped by this SSA name. */ |
@@ -1913,23 +1910,16 @@ struct tree_ssa_name GTY(()) |
/* Pointer attributes used for alias analysis. */ |
struct ptr_info_def *ptr_info; |
- /* Value for SSA name used by various passes. |
- |
- Right now only invariants are allowed to persist beyond a pass in |
- this field; in the future we will allow VALUE_HANDLEs to persist |
- as well. */ |
- tree value_handle; |
- |
/* Immediate uses list for this SSA_NAME. */ |
struct ssa_use_operand_d imm_uses; |
}; |
-struct phi_arg_d GTY(()) |
-{ |
+struct GTY(()) phi_arg_d { |
/* imm_use MUST be the first element in struct because we do some |
pointer arithmetic with it. See phi_arg_index_from_use. */ |
struct ssa_use_operand_d imm_use; |
tree def; |
+ location_t locus; |
}; |
@@ -1945,9 +1935,9 @@ struct phi_arg_d GTY(()) |
#define OMP_CLAUSE_OPERAND(NODE, I) \ |
OMP_CLAUSE_ELT_CHECK (NODE, I) |
-struct tree_omp_clause GTY(()) |
-{ |
+struct GTY(()) tree_omp_clause { |
struct tree_common common; |
+ location_t locus; |
enum omp_clause_code code; |
union omp_clause_subcode { |
enum omp_clause_default_kind default_kind; |
@@ -2015,8 +2005,7 @@ struct varray_head_tag; |
#define BLOCK_SOURCE_LOCATION(NODE) (BLOCK_CHECK (NODE)->block.locus) |
-struct tree_block GTY(()) |
-{ |
+struct GTY(()) tree_block { |
struct tree_common common; |
unsigned abstract_flag : 1; |
@@ -2074,6 +2063,8 @@ struct tree_block GTY(()) |
#define TYPE_NEXT_VARIANT(NODE) (TYPE_CHECK (NODE)->type.next_variant) |
#define TYPE_MAIN_VARIANT(NODE) (TYPE_CHECK (NODE)->type.main_variant) |
#define TYPE_CONTEXT(NODE) (TYPE_CHECK (NODE)->type.context) |
+#define TYPE_MAXVAL(NODE) (TYPE_CHECK (NODE)->type.maxval) |
+#define TYPE_MINVAL(NODE) (TYPE_CHECK (NODE)->type.minval) |
/* Vector types need to check target flags to determine type. */ |
extern enum machine_mode vector_type_mode (const_tree); |
@@ -2086,7 +2077,7 @@ extern enum machine_mode vector_type_mode (const_tree); |
/* The "canonical" type for this type node, which can be used to |
compare the type for equality with another type. If two types are |
equal (based on the semantics of the language), then they will have |
- equivalent TYPE_CANONICAL entries. |
+ equivalent TYPE_CANONICAL entries. |
As a special case, if TYPE_CANONICAL is NULL_TREE, then it cannot |
be used for comparison against other types. Instead, the type is |
@@ -2140,7 +2131,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)->type.user_align) |
+#define TYPE_USER_ALIGN(NODE) (TYPE_CHECK (NODE)->common.base.user_align) |
/* The alignment for NODE, in bytes. */ |
#define TYPE_ALIGN_UNIT(NODE) (TYPE_ALIGN (NODE) / BITS_PER_UNIT) |
@@ -2180,6 +2171,9 @@ extern enum machine_mode vector_type_mode (const_tree); |
the term. */ |
#define TYPE_RESTRICT(NODE) (TYPE_CHECK (NODE)->type.restrict_flag) |
+/* The address space the type is in. */ |
+#define TYPE_ADDR_SPACE(NODE) (TYPE_CHECK (NODE)->base.address_space) |
+ |
/* 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 |
type. */ |
@@ -2189,10 +2183,29 @@ extern enum machine_mode vector_type_mode (const_tree); |
#define TYPE_QUAL_VOLATILE 0x2 |
#define TYPE_QUAL_RESTRICT 0x4 |
+/* Encode/decode the named memory support as part of the qualifier. If more |
+ than 8 qualifiers are added, these macros need to be adjusted. */ |
+#define ENCODE_QUAL_ADDR_SPACE(NUM) ((NUM & 0xFF) << 8) |
+#define DECODE_QUAL_ADDR_SPACE(X) (((X) >> 8) & 0xFF) |
+ |
+/* Return all qualifiers except for the address space qualifiers. */ |
+#define CLEAR_QUAL_ADDR_SPACE(X) ((X) & ~0xFF00) |
+ |
+/* Only keep the address space out of the qualifiers and discard the other |
+ qualifiers. */ |
+#define KEEP_QUAL_ADDR_SPACE(X) ((X) & 0xFF00) |
+ |
/* The set of type qualifiers for this type. */ |
#define TYPE_QUALS(NODE) \ |
((TYPE_READONLY (NODE) * TYPE_QUAL_CONST) \ |
| (TYPE_VOLATILE (NODE) * TYPE_QUAL_VOLATILE) \ |
+ | (TYPE_RESTRICT (NODE) * TYPE_QUAL_RESTRICT) \ |
+ | (ENCODE_QUAL_ADDR_SPACE (TYPE_ADDR_SPACE (NODE)))) |
+ |
+/* The same as TYPE_QUALS without the address space qualifications. */ |
+#define TYPE_QUALS_NO_ADDR_SPACE(NODE) \ |
+ ((TYPE_READONLY (NODE) * TYPE_QUAL_CONST) \ |
+ | (TYPE_VOLATILE (NODE) * TYPE_QUAL_VOLATILE) \ |
| (TYPE_RESTRICT (NODE) * TYPE_QUAL_RESTRICT)) |
/* These flags are available for each language front end to use internally. */ |
@@ -2228,25 +2241,32 @@ extern enum machine_mode vector_type_mode (const_tree); |
#define SET_TYPE_VECTOR_SUBPARTS(VECTOR_TYPE, X) \ |
(VECTOR_TYPE_CHECK (VECTOR_TYPE)->type.precision = exact_log2 (X)) |
+/* Nonzero in a VECTOR_TYPE if the frontends should not emit warnings |
+ about missing conversions to other vector types of the same size. */ |
+#define TYPE_VECTOR_OPAQUE(NODE) \ |
+ (VECTOR_TYPE_CHECK (NODE)->base.default_def_flag) |
+ |
/* Indicates that objects of this type must be initialized by calling a |
function when they are created. */ |
#define TYPE_NEEDS_CONSTRUCTING(NODE) \ |
(TYPE_CHECK (NODE)->type.needs_constructing_flag) |
-/* Indicates that objects of this type (a UNION_TYPE), should be passed |
- the same way that the first union alternative would be passed. */ |
-#define TYPE_TRANSPARENT_UNION(NODE) \ |
- (UNION_TYPE_CHECK (NODE)->type.transparent_union_flag) |
+/* Indicates that a UNION_TYPE object should be passed the same way that |
+ the first union alternative would be passed, or that a RECORD_TYPE |
+ object should be passed the same way that the first (and only) member |
+ would be passed. */ |
+#define TYPE_TRANSPARENT_AGGR(NODE) \ |
+ (RECORD_OR_UNION_CHECK (NODE)->type.transparent_aggr_flag) |
/* For an ARRAY_TYPE, indicates that it is not permitted to take the |
address of a component of the type. This is the counterpart of |
DECL_NONADDRESSABLE_P for arrays, see the definition of this flag. */ |
#define TYPE_NONALIASED_COMPONENT(NODE) \ |
- (ARRAY_TYPE_CHECK (NODE)->type.transparent_union_flag) |
+ (ARRAY_TYPE_CHECK (NODE)->type.transparent_aggr_flag) |
/* Indicated that objects of this type should be laid out in as |
compact a way as possible. */ |
-#define TYPE_PACKED(NODE) (TYPE_CHECK (NODE)->type.packed_flag) |
+#define TYPE_PACKED(NODE) (TYPE_CHECK (NODE)->common.base.packed_flag) |
/* Used by type_contains_placeholder_p to avoid recomputation. |
Values are: 0 (unknown), 1 (false), 2 (true). Never access |
@@ -2256,8 +2276,7 @@ extern enum machine_mode vector_type_mode (const_tree); |
struct die_struct; |
-struct tree_type GTY(()) |
-{ |
+struct GTY(()) tree_type { |
struct tree_common common; |
tree values; |
tree size; |
@@ -2265,17 +2284,16 @@ struct tree_type GTY(()) |
tree attributes; |
unsigned int uid; |
- unsigned int precision : 9; |
- ENUM_BITFIELD(machine_mode) mode : 7; |
- |
- unsigned string_flag : 1; |
+ unsigned int precision : 10; |
unsigned no_force_blk_flag : 1; |
unsigned needs_constructing_flag : 1; |
- unsigned transparent_union_flag : 1; |
- unsigned packed_flag : 1; |
+ unsigned transparent_aggr_flag : 1; |
unsigned restrict_flag : 1; |
unsigned contains_placeholder_bits : 2; |
+ ENUM_BITFIELD(machine_mode) mode : 8; |
+ |
+ unsigned string_flag : 1; |
unsigned lang_flag_0 : 1; |
unsigned lang_flag_1 : 1; |
unsigned lang_flag_2 : 1; |
@@ -2283,7 +2301,6 @@ struct tree_type GTY(()) |
unsigned lang_flag_4 : 1; |
unsigned lang_flag_5 : 1; |
unsigned lang_flag_6 : 1; |
- unsigned user_align : 1; |
unsigned int align; |
alias_set_type alias_set; |
@@ -2410,8 +2427,7 @@ struct tree_type GTY(()) |
#define BINFO_INHERITANCE_CHAIN(NODE) \ |
(TREE_BINFO_CHECK(NODE)->binfo.inheritance) |
-struct tree_binfo GTY (()) |
-{ |
+struct GTY (()) tree_binfo { |
struct tree_common common; |
tree offset; |
@@ -2435,12 +2451,10 @@ struct tree_binfo GTY (()) |
(TREE_CODE (DECL) == VAR_DECL \ |
|| TREE_CODE (DECL) == PARM_DECL \ |
|| TREE_CODE (DECL) == RESULT_DECL \ |
- || MTAG_P (DECL) \ |
|| (TREE_CODE (DECL) == SSA_NAME \ |
&& (TREE_CODE (SSA_NAME_VAR (DECL)) == VAR_DECL \ |
|| TREE_CODE (SSA_NAME_VAR (DECL)) == PARM_DECL \ |
- || TREE_CODE (SSA_NAME_VAR (DECL)) == RESULT_DECL \ |
- || MTAG_P (SSA_NAME_VAR (DECL))))) |
+ || TREE_CODE (SSA_NAME_VAR (DECL)) == RESULT_DECL))) |
@@ -2467,6 +2481,10 @@ struct function; |
/* Every ..._DECL node gets a unique number. */ |
#define DECL_UID(NODE) (DECL_MINIMAL_CHECK (NODE)->decl_minimal.uid) |
+/* DEBUG_EXPR_DECLs get negative UID numbers, to catch erroneous |
+ uses. */ |
+#define DEBUG_TEMP_UID(NODE) (-DECL_UID (TREE_CHECK ((NODE), DEBUG_EXPR_DECL))) |
+ |
/* These two fields describe where in the source code the declaration |
was. If the declaration appears in several places (as for a C |
function that is declared first and then defined later), this |
@@ -2479,15 +2497,14 @@ struct function; |
/* For FIELD_DECLs, this is the RECORD_TYPE, UNION_TYPE, or |
QUAL_UNION_TYPE node that the field is a member of. For VAR_DECL, |
- PARM_DECL, FUNCTION_DECL, LABEL_DECL, and CONST_DECL nodes, this |
- points to either the FUNCTION_DECL for the containing function, |
- the RECORD_TYPE or UNION_TYPE for the containing type, or |
+ PARM_DECL, FUNCTION_DECL, LABEL_DECL, RESULT_DECL, and CONST_DECL |
+ nodes, this points to either the FUNCTION_DECL for the containing |
+ function, the RECORD_TYPE or UNION_TYPE for the containing type, or |
NULL_TREE or a TRANSLATION_UNIT_DECL if the given decl has "file |
scope". */ |
#define DECL_CONTEXT(NODE) (DECL_MINIMAL_CHECK (NODE)->decl_minimal.context) |
#define DECL_FIELD_CONTEXT(NODE) (FIELD_DECL_CHECK (NODE)->decl_minimal.context) |
-struct tree_decl_minimal GTY(()) |
-{ |
+struct GTY(()) tree_decl_minimal { |
struct tree_common common; |
location_t locus; |
unsigned int uid; |
@@ -2495,55 +2512,13 @@ struct tree_decl_minimal GTY(()) |
tree context; |
}; |
-/* When computing aliasing information, we represent the memory pointed-to |
- by pointers with artificial variables called "memory tags" (MT). There |
- are two kinds of tags, namely symbol and name: |
- |
- Symbol tags (SMT) are used in flow-insensitive alias analysis, they |
- represent all the pointed-to locations and variables pointed-to by |
- the same pointer symbol. Usually, this set is computed using |
- type-based analysis (i.e., alias set classes), but this may not |
- always be the case. |
- |
- Name tags (NMT) are used in flow-sensitive points-to alias |
- analysis, they represent the variables and memory locations |
- pointed-to by a specific SSA_NAME pointer. |
- |
- In general, given a pointer P with a symbol tag SMT, the alias set |
- of SMT should be the union of all the alias sets of the NMTs of |
- every SSA_NAME for P. */ |
-struct tree_memory_tag GTY(()) |
-{ |
- struct tree_decl_minimal common; |
- |
- bitmap GTY ((skip)) aliases; |
- |
- /* True if this tag has global scope. */ |
- unsigned int is_global : 1; |
-}; |
- |
-#define MTAG_GLOBAL(NODE) (TREE_MEMORY_TAG_CHECK (NODE)->mtag.is_global) |
-#define MTAG_ALIASES(NODE) (TREE_MEMORY_TAG_CHECK (NODE)->mtag.aliases) |
- |
-/* Memory Partition Tags (MPTs) group memory symbols under one |
- common name for the purposes of placing memory PHI nodes. */ |
- |
-struct tree_memory_partition_tag GTY(()) |
-{ |
- struct tree_memory_tag common; |
- |
- /* Set of symbols grouped under this MPT. */ |
- bitmap symbols; |
-}; |
- |
-#define MPT_SYMBOLS(NODE) (MEMORY_PARTITION_TAG_CHECK (NODE)->mpt.symbols) |
- |
/* For any sort of a ..._DECL node, this points to the original (abstract) |
- decl node which this decl is an instance of, or else it is NULL indicating |
- that this decl is not an instance of some other decl. For example, |
- in a nested declaration of an inline function, this points back to the |
- definition. */ |
+ decl node which this decl is an inlined/cloned instance of, or else it |
+ is NULL indicating that this decl is not an instance of some other decl. |
+ |
+ The C front-end also uses this in a nested declaration of an inline |
+ function, to point back to the definition. */ |
#define DECL_ABSTRACT_ORIGIN(NODE) (DECL_COMMON_CHECK (NODE)->decl_common.abstract_origin) |
/* Like DECL_ABSTRACT_ORIGIN, but returns NODE if there's no abstract |
@@ -2584,7 +2559,7 @@ struct tree_memory_partition_tag GTY(()) |
#define DECL_ALIGN_UNIT(NODE) (DECL_ALIGN (NODE) / BITS_PER_UNIT) |
/* 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)->decl_common.user_align) |
+#define DECL_USER_ALIGN(NODE) (DECL_COMMON_CHECK (NODE)->common.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. */ |
@@ -2599,8 +2574,12 @@ struct tree_memory_partition_tag GTY(()) |
#define DECL_DEBUG_EXPR_IS_FROM(NODE) \ |
(DECL_COMMON_CHECK (NODE)->decl_common.debug_expr_is_from) |
+#define DECL_FUNCTION_PERSONALITY(NODE) \ |
+ (FUNCTION_DECL_CHECK (NODE)->function_decl.personality) |
+ |
/* Nonzero for a given ..._DECL node means that the name of this node should |
- be ignored for symbolic debug purposes. */ |
+ be ignored for symbolic debug purposes. Moreover, for a FUNCTION_DECL, |
+ the body of the function should also be ignored. */ |
#define DECL_IGNORED_P(NODE) (DECL_COMMON_CHECK (NODE)->decl_common.ignored_flag) |
/* Nonzero for a given ..._DECL node means that this node represents an |
@@ -2621,7 +2600,7 @@ struct tree_memory_partition_tag GTY(()) |
example, for a FUNCTION_DECL, DECL_SAVED_TREE may be non-NULL and |
DECL_EXTERNAL may be true simultaneously; that can be the case for |
a C99 "extern inline" function. */ |
-#define DECL_EXTERNAL(NODE) (DECL_COMMON_CHECK (NODE)->decl_common.decl_flag_2) |
+#define DECL_EXTERNAL(NODE) (DECL_COMMON_CHECK (NODE)->decl_common.decl_flag_1) |
/* Nonzero in a ..._DECL means this variable is ref'd from a nested function. |
For VAR_DECL nodes, PARM_DECL nodes, and FUNCTION_DECL nodes. |
@@ -2649,16 +2628,7 @@ struct tree_memory_partition_tag GTY(()) |
#define DECL_LANG_FLAG_5(NODE) (DECL_COMMON_CHECK (NODE)->decl_common.lang_flag_5) |
#define DECL_LANG_FLAG_6(NODE) (DECL_COMMON_CHECK (NODE)->decl_common.lang_flag_6) |
#define DECL_LANG_FLAG_7(NODE) (DECL_COMMON_CHECK (NODE)->decl_common.lang_flag_7) |
- |
-/* Used to indicate an alias set for the memory pointed to by this |
- particular FIELD_DECL, PARM_DECL, or VAR_DECL, which must have |
- pointer (or reference) type. */ |
-#define DECL_POINTER_ALIAS_SET(NODE) \ |
- (DECL_COMMON_CHECK (NODE)->decl_common.pointer_alias_set) |
- |
-/* Nonzero if an alias set has been assigned to this declaration. */ |
-#define DECL_POINTER_ALIAS_SET_KNOWN_P(NODE) \ |
- (DECL_POINTER_ALIAS_SET (NODE) != - 1) |
+#define DECL_LANG_FLAG_8(NODE) (DECL_COMMON_CHECK (NODE)->decl_common.lang_flag_8) |
/* Nonzero for a decl which is at file scope. */ |
#define DECL_FILE_SCOPE_P(EXP) \ |
@@ -2666,7 +2636,7 @@ struct tree_memory_partition_tag GTY(()) |
|| TREE_CODE (DECL_CONTEXT (EXP)) == TRANSLATION_UNIT_DECL) |
/* Nonzero for a decl that is decorated using attribute used. |
- This indicates compiler tools that this decl needs to be preserved. */ |
+ This indicates to compiler tools that this decl needs to be preserved. */ |
#define DECL_PRESERVE_P(DECL) \ |
DECL_COMMON_CHECK (DECL)->decl_common.preserve_flag |
@@ -2679,13 +2649,7 @@ struct tree_memory_partition_tag GTY(()) |
#define DECL_GIMPLE_REG_P(DECL) \ |
DECL_COMMON_CHECK (DECL)->decl_common.gimple_reg_flag |
-/* For a DECL with pointer type, this is set if Type Based Alias |
- Analysis should not be applied to this DECL. */ |
-#define DECL_NO_TBAA_P(DECL) \ |
- DECL_COMMON_CHECK (DECL)->decl_common.no_tbaa_flag |
- |
-struct tree_decl_common GTY(()) |
-{ |
+struct GTY(()) tree_decl_common { |
struct tree_decl_minimal common; |
tree size; |
@@ -2696,7 +2660,6 @@ struct tree_decl_common GTY(()) |
unsigned ignored_flag : 1; |
unsigned abstract_flag : 1; |
unsigned artificial_flag : 1; |
- unsigned user_align : 1; |
unsigned preserve_flag: 1; |
unsigned debug_expr_is_from : 1; |
@@ -2708,37 +2671,42 @@ struct tree_decl_common GTY(()) |
unsigned lang_flag_5 : 1; |
unsigned lang_flag_6 : 1; |
unsigned lang_flag_7 : 1; |
+ unsigned lang_flag_8 : 1; |
/* In LABEL_DECL, this is DECL_ERROR_ISSUED. |
In VAR_DECL and PARM_DECL, this is DECL_REGISTER. */ |
unsigned decl_flag_0 : 1; |
- /* In FIELD_DECL, this is DECL_PACKED. */ |
- unsigned decl_flag_1 : 1; |
/* In FIELD_DECL, this is DECL_BIT_FIELD |
In VAR_DECL and FUNCTION_DECL, this is DECL_EXTERNAL. |
- In TYPE_DECL, this is TYPE_DECL_SUPRESS_DEBUG. */ |
- unsigned decl_flag_2 : 1; |
+ In TYPE_DECL, this is TYPE_DECL_SUPPRESS_DEBUG. */ |
+ unsigned decl_flag_1 : 1; |
/* In FIELD_DECL, this is DECL_NONADDRESSABLE_P |
- In VAR_DECL and PARM_DECL, this is DECL_HAS_VALUE_EXPR. */ |
- unsigned decl_flag_3 : 1; |
+ In VAR_DECL and PARM_DECL, this is DECL_HAS_VALUE_EXPR_P. */ |
+ unsigned decl_flag_2 : 1; |
/* Logically, these two would go in a theoretical base shared by var and |
parm decl. */ |
unsigned gimple_reg_flag : 1; |
- /* In a DECL with pointer type, set if no TBAA should be done. */ |
- unsigned no_tbaa_flag : 1; |
- /* Padding so that 'align' can be on a 32-bit boundary. */ |
+ /* In VAR_DECL, PARM_DECL and RESULT_DECL, this is DECL_BY_REFERENCE. */ |
+ unsigned decl_by_reference_flag : 1; |
+ /* In VAR_DECL, PARM_DECL and RESULT_DECL, this is DECL_RESTRICTED_P. */ |
+ unsigned decl_restricted_flag : 1; |
+ |
+ /* Padding so that 'off_align' can be on a 32-bit boundary. */ |
unsigned decl_common_unused : 2; |
- unsigned int align : 24; |
/* DECL_OFFSET_ALIGN, used only for FIELD_DECLs. */ |
unsigned int off_align : 8; |
+ /* 24-bits unused. */ |
+ |
+ /* DECL_ALIGN. It should have the same size as TYPE_ALIGN. */ |
+ unsigned int align; |
+ |
tree size_unit; |
tree initial; |
tree attributes; |
tree abstract_origin; |
- alias_set_type pointer_alias_set; |
/* Points to a structure whose details depend on the language in use. */ |
struct lang_decl *lang_specific; |
}; |
@@ -2751,7 +2719,7 @@ extern void decl_value_expr_insert (tree, tree); |
decl itself. This should only be used for debugging; once this field has |
been set, the decl itself may not legitimately appear in the function. */ |
#define DECL_HAS_VALUE_EXPR_P(NODE) \ |
- (TREE_CHECK2 (NODE, VAR_DECL, PARM_DECL)->decl_common.decl_flag_3) |
+ (TREE_CHECK2 (NODE, VAR_DECL, PARM_DECL)->decl_common.decl_flag_2) |
#define DECL_VALUE_EXPR(NODE) \ |
(decl_value_expr_lookup (DECL_WRTL_CHECK (NODE))) |
#define SET_DECL_VALUE_EXPR(NODE, VAL) \ |
@@ -2785,8 +2753,7 @@ extern void decl_value_expr_insert (tree, tree); |
/* In VAR_DECL and PARM_DECL nodes, nonzero means declared `register'. */ |
#define DECL_REGISTER(NODE) (DECL_WRTL_CHECK (NODE)->decl_common.decl_flag_0) |
-struct tree_decl_with_rtl GTY(()) |
-{ |
+struct GTY(()) tree_decl_with_rtl { |
struct tree_decl_common common; |
rtx rtl; |
}; |
@@ -2830,11 +2797,11 @@ struct tree_decl_with_rtl GTY(()) |
#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)->decl_common.decl_flag_1) |
+#define DECL_PACKED(NODE) (FIELD_DECL_CHECK (NODE)->common.base.packed_flag) |
/* Nonzero in a FIELD_DECL means it is a bit field, and must be accessed |
specially. */ |
-#define DECL_BIT_FIELD(NODE) (FIELD_DECL_CHECK (NODE)->decl_common.decl_flag_2) |
+#define DECL_BIT_FIELD(NODE) (FIELD_DECL_CHECK (NODE)->decl_common.decl_flag_1) |
/* Used in a FIELD_DECL to indicate that we cannot form the address of |
this component. This makes it possible for Type-Based Alias Analysis |
@@ -2852,10 +2819,9 @@ struct tree_decl_with_rtl GTY(()) |
accesses to s.i must not be given the alias set of the type of 'i' |
(int) but instead directly that of the type of 's' (struct S). */ |
#define DECL_NONADDRESSABLE_P(NODE) \ |
- (FIELD_DECL_CHECK (NODE)->decl_common.decl_flag_3) |
+ (FIELD_DECL_CHECK (NODE)->decl_common.decl_flag_2) |
-struct tree_field_decl GTY(()) |
-{ |
+struct GTY(()) tree_field_decl { |
struct tree_decl_common common; |
tree offset; |
@@ -2863,31 +2829,37 @@ struct tree_field_decl GTY(()) |
tree qualifier; |
tree bit_offset; |
tree fcontext; |
- |
}; |
/* A numeric unique identifier for a LABEL_DECL. The UID allocation is |
dense, unique within any one function, and may be used to index arrays. |
If the value is -1, then no UID has been assigned. */ |
#define LABEL_DECL_UID(NODE) \ |
- (LABEL_DECL_CHECK (NODE)->decl_common.pointer_alias_set) |
+ (LABEL_DECL_CHECK (NODE)->label_decl.label_decl_uid) |
+ |
+/* In a LABEL_DECL, the EH region number for which the label is the |
+ post_landing_pad. */ |
+#define EH_LANDING_PAD_NR(NODE) \ |
+ (LABEL_DECL_CHECK (NODE)->label_decl.eh_landing_pad_nr) |
/* In LABEL_DECL nodes, nonzero means that an error message about |
jumping into such a binding contour has been printed for this label. */ |
-#define DECL_ERROR_ISSUED(NODE) (LABEL_DECL_CHECK (NODE)->decl_common.decl_flag_0) |
+#define DECL_ERROR_ISSUED(NODE) \ |
+ (LABEL_DECL_CHECK (NODE)->decl_common.decl_flag_0) |
-struct tree_label_decl GTY(()) |
-{ |
+struct GTY(()) tree_label_decl { |
struct tree_decl_with_rtl common; |
+ int label_decl_uid; |
+ int eh_landing_pad_nr; |
}; |
-struct tree_result_decl GTY(()) |
-{ |
+struct var_ann_d; |
+struct GTY(()) tree_result_decl { |
struct tree_decl_with_rtl common; |
+ struct var_ann_d *ann; |
}; |
-struct tree_const_decl GTY(()) |
-{ |
+struct GTY(()) tree_const_decl { |
struct tree_decl_with_rtl common; |
}; |
@@ -2899,10 +2871,10 @@ struct tree_const_decl GTY(()) |
where the data was actually passed. */ |
#define DECL_INCOMING_RTL(NODE) (PARM_DECL_CHECK (NODE)->parm_decl.incoming_rtl) |
-struct tree_parm_decl GTY(()) |
-{ |
+struct GTY(()) tree_parm_decl { |
struct tree_decl_with_rtl common; |
rtx incoming_rtl; |
+ struct var_ann_d *ann; |
}; |
@@ -2923,29 +2895,9 @@ struct tree_parm_decl GTY(()) |
/* Used to indicate that this DECL has weak linkage. */ |
#define DECL_WEAK(NODE) (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.weak_flag) |
-/* Internal to the gimplifier. Indicates that the value is a formal |
- temporary controlled by the gimplifier. */ |
-#define DECL_GIMPLE_FORMAL_TEMP_P(DECL) \ |
- DECL_WITH_VIS_CHECK (DECL)->decl_with_vis.gimple_formal_temp |
- |
/* Used to indicate that the DECL is a dllimport. */ |
#define DECL_DLLIMPORT_P(NODE) (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.dllimport_flag) |
-/* DECL_BASED_ON_RESTRICT_P records whether a VAR_DECL is a temporary |
- based on a variable with a restrict qualified type. If it is, |
- DECL_RESTRICT_BASE returns the restrict qualified variable on which |
- it is based. */ |
- |
-#define DECL_BASED_ON_RESTRICT_P(NODE) \ |
- (VAR_DECL_CHECK (NODE)->decl_with_vis.based_on_restrict_p) |
-#define DECL_GET_RESTRICT_BASE(NODE) \ |
- (decl_restrict_base_lookup (VAR_DECL_CHECK (NODE))) |
-#define SET_DECL_RESTRICT_BASE(NODE, VAL) \ |
- (decl_restrict_base_insert (VAR_DECL_CHECK (NODE), (VAL))) |
- |
-extern tree decl_restrict_base_lookup (tree); |
-extern void decl_restrict_base_insert (tree, tree); |
- |
/* Used in a DECL to indicate that, even if it TREE_PUBLIC, it need |
not be put out unless it is needed in this translation unit. |
Entities like this are shared across translation units (like weak |
@@ -2957,15 +2909,17 @@ extern void decl_restrict_base_insert (tree, tree); |
something which is DECL_COMDAT. */ |
#define DECL_COMDAT(NODE) (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.comdat_flag) |
+#define DECL_COMDAT_GROUP(NODE) (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.comdat_group) |
+ |
/* A replaceable function is one which may be replaced at link-time |
with an entirely different definition, provided that the |
replacement has the same type. For example, functions declared |
- with __attribute__((weak)) on most systems are replaceable. |
+ with __attribute__((weak)) on most systems are replaceable. |
COMDAT functions are not replaceable, since all definitions of the |
function must be equivalent. It is important that COMDAT functions |
not be treated as replaceable so that use of C++ template |
- instantiations is not penalized. |
+ instantiations is not penalized. |
For example, DECL_REPLACEABLE is used to determine whether or not a |
function (including a template instantiation) which is not |
@@ -3025,39 +2979,36 @@ extern void decl_restrict_base_insert (tree, tree); |
/* Used in TREE_PUBLIC decls to indicate that copies of this DECL in |
multiple translation units should be merged. */ |
-#define DECL_ONE_ONLY(NODE) (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.one_only) |
+#define DECL_ONE_ONLY(NODE) (DECL_COMDAT_GROUP (NODE) != NULL_TREE) |
-struct tree_decl_with_vis GTY(()) |
-{ |
+struct GTY(()) tree_decl_with_vis { |
struct tree_decl_with_rtl common; |
tree assembler_name; |
tree section_name; |
+ tree comdat_group; |
/* Belong to VAR_DECL exclusively. */ |
- unsigned defer_output:1; |
- unsigned hard_register:1; |
- unsigned thread_local:1; |
- unsigned common_flag:1; |
+ unsigned defer_output : 1; |
+ unsigned hard_register : 1; |
+ unsigned thread_local : 1; |
+ unsigned common_flag : 1; |
unsigned in_text_section : 1; |
- unsigned gimple_formal_temp : 1; |
unsigned dllimport_flag : 1; |
- unsigned based_on_restrict_p : 1; |
/* Used by C++. Might become a generic decl flag. */ |
unsigned shadowed_for_var_p : 1; |
- |
/* Don't belong to VAR_DECL exclusively. */ |
- unsigned weak_flag:1; |
+ unsigned weak_flag : 1; |
+ |
unsigned seen_in_bind_expr : 1; |
unsigned comdat_flag : 1; |
ENUM_BITFIELD(symbol_visibility) visibility : 2; |
unsigned visibility_specified : 1; |
- /* Belong to FUNCTION_DECL exclusively. */ |
- unsigned one_only : 1; |
- unsigned init_priority_p:1; |
- |
/* Belongs to VAR_DECL exclusively. */ |
ENUM_BITFIELD(tls_model) tls_model : 3; |
- /* 12 unused bits. */ |
+ |
+ /* Belong to FUNCTION_DECL exclusively. */ |
+ unsigned init_priority_p : 1; |
+ /* 15 unused bits. */ |
}; |
/* In a VAR_DECL that's static, |
@@ -3099,7 +3050,7 @@ extern void decl_fini_priority_insert (tree, priority_type); |
(VAR_DECL_CHECK (NODE)->decl_with_vis.init_priority_p) |
/* For a VAR_DECL or FUNCTION_DECL the initialization priority of |
- NODE. */ |
+ NODE. */ |
#define DECL_INIT_PRIORITY(NODE) \ |
(decl_init_priority_lookup (NODE)) |
/* Set the initialization priority for NODE to VAL. */ |
@@ -3133,9 +3084,15 @@ extern void decl_fini_priority_insert (tree, priority_type); |
#define DECL_THREAD_LOCAL_P(NODE) \ |
(VAR_DECL_CHECK (NODE)->decl_with_vis.tls_model >= TLS_MODEL_REAL) |
-struct tree_var_decl GTY(()) |
-{ |
+#define DECL_VAR_ANN_PTR(NODE) \ |
+ (TREE_CODE (NODE) == VAR_DECL ? &(NODE)->var_decl.ann \ |
+ : TREE_CODE (NODE) == PARM_DECL ? &(NODE)->parm_decl.ann \ |
+ : TREE_CODE (NODE) == RESULT_DECL ? &(NODE)->result_decl.ann \ |
+ : NULL) |
+ |
+struct GTY(()) tree_var_decl { |
struct tree_decl_with_vis common; |
+ struct var_ann_d *ann; |
}; |
@@ -3153,9 +3110,8 @@ struct tree_var_decl GTY(()) |
C++ also uses this field in namespaces, hence the DECL_NON_COMMON_CHECK. */ |
#define DECL_VINDEX(NODE) (DECL_NON_COMMON_CHECK (NODE)->decl_non_common.vindex) |
-struct tree_decl_non_common GTY(()) |
- |
-{ |
+struct GTY(()) |
+ tree_decl_non_common { |
struct tree_decl_with_vis common; |
/* C++ uses this in namespaces. */ |
tree saved_tree; |
@@ -3229,9 +3185,8 @@ struct tree_decl_non_common GTY(()) |
#define DECL_NO_LIMIT_STACK(NODE) \ |
(FUNCTION_DECL_CHECK (NODE)->function_decl.no_limit_stack) |
-/* In a FUNCTION_DECL with a nonzero DECL_CONTEXT, indicates that a |
- static chain is not needed. */ |
-#define DECL_NO_STATIC_CHAIN(NODE) \ |
+/* In a FUNCTION_DECL indicates that a static chain is needed. */ |
+#define DECL_STATIC_CHAIN(NODE) \ |
(FUNCTION_DECL_CHECK (NODE)->function_decl.regdecl_flag) |
/* Nonzero for a decl that cgraph has decided should be inlined into |
@@ -3290,12 +3245,14 @@ struct tree_decl_non_common GTY(()) |
FUNCTION_DECL from non_common, or inherit non_common from FUNCTION_DECL, |
which seemed a bit strange. */ |
-struct tree_function_decl GTY(()) |
-{ |
+struct GTY(()) tree_function_decl { |
struct tree_decl_non_common common; |
struct function *f; |
+ /* The personality function. Used for stack unwinding. */ |
+ tree personality; |
+ |
/* Function specific options that are used by this function. */ |
tree function_specific_target; /* target options */ |
tree function_specific_optimization; /* optimization options */ |
@@ -3337,15 +3294,14 @@ struct tree_function_decl GTY(()) |
into stabs. Instead it will generate cross reference ('x') of names. |
This uses the same flag as DECL_EXTERNAL. */ |
#define TYPE_DECL_SUPPRESS_DEBUG(NODE) \ |
- (TYPE_DECL_CHECK (NODE)->decl_common.decl_flag_2) |
+ (TYPE_DECL_CHECK (NODE)->decl_common.decl_flag_1) |
/* Getter of the imported declaration associated to the |
IMPORTED_DECL node. */ |
#define IMPORTED_DECL_ASSOCIATED_DECL(NODE) \ |
(DECL_INITIAL (IMPORTED_DECL_CHECK (NODE))) |
-struct tree_type_decl GTY(()) |
-{ |
+struct GTY(()) tree_type_decl { |
struct tree_decl_non_common common; |
}; |
@@ -3361,17 +3317,15 @@ struct tree_type_decl GTY(()) |
#define STATEMENT_LIST_TAIL(NODE) \ |
(STATEMENT_LIST_CHECK (NODE)->stmt_list.tail) |
-struct tree_statement_list_node |
- GTY ((chain_next ("%h.next"), chain_prev ("%h.prev"))) |
-{ |
+struct GTY ((chain_next ("%h.next"), chain_prev ("%h.prev"))) tree_statement_list_node |
+ { |
struct tree_statement_list_node *prev; |
struct tree_statement_list_node *next; |
tree stmt; |
}; |
-struct tree_statement_list |
- GTY(()) |
-{ |
+struct GTY(()) tree_statement_list |
+ { |
struct tree_common common; |
struct tree_statement_list_node *head; |
struct tree_statement_list_node *tail; |
@@ -3380,8 +3334,7 @@ struct tree_statement_list |
/* Optimization options used by a function. */ |
-struct tree_optimization_option GTY(()) |
-{ |
+struct GTY(()) tree_optimization_option { |
struct tree_common common; |
/* The optimization options used by the user. */ |
@@ -3396,8 +3349,7 @@ extern tree build_optimization_node (void); |
/* Target options used by a function. */ |
-struct tree_target_option GTY(()) |
-{ |
+struct GTY(()) tree_target_option { |
struct tree_common common; |
/* The optimization options used by the user. */ |
@@ -3415,9 +3367,8 @@ extern tree build_target_option_node (void); |
It may be any of the structures declared above |
for various types of node. */ |
-union tree_node GTY ((ptr_alias (union lang_tree_node), |
- desc ("tree_node_structure (&%h)"))) |
-{ |
+union GTY ((ptr_alias (union lang_tree_node), |
+ desc ("tree_node_structure (&%h)"))) tree_node { |
struct tree_base GTY ((tag ("TS_BASE"))) base; |
struct tree_common GTY ((tag ("TS_COMMON"))) common; |
struct tree_int_cst GTY ((tag ("TS_INT_CST"))) int_cst; |
@@ -3449,9 +3400,7 @@ union tree_node GTY ((ptr_alias (union lang_tree_node), |
struct tree_binfo GTY ((tag ("TS_BINFO"))) binfo; |
struct tree_statement_list GTY ((tag ("TS_STATEMENT_LIST"))) stmt_list; |
struct tree_constructor GTY ((tag ("TS_CONSTRUCTOR"))) constructor; |
- struct tree_memory_tag GTY ((tag ("TS_MEMORY_TAG"))) mtag; |
struct tree_omp_clause GTY ((tag ("TS_OMP_CLAUSE"))) omp_clause; |
- struct tree_memory_partition_tag GTY ((tag ("TS_MEMORY_PARTITION_TAG"))) mpt; |
struct tree_optimization_option GTY ((tag ("TS_OPTIMIZATION"))) optimization; |
struct tree_target_option GTY ((tag ("TS_TARGET_OPTION"))) target_option; |
}; |
@@ -3928,6 +3877,7 @@ extern tree maybe_get_identifier (const char *); |
extern tree build_nt (enum tree_code, ...); |
extern tree build_nt_call_list (tree, tree); |
+extern tree build_nt_call_vec (tree, VEC(tree,gc) *); |
extern tree build0_stat (enum tree_code, tree MEM_STAT_DECL); |
#define build0(c,t) build0_stat (c,t MEM_STAT_INFO) |
@@ -3943,10 +3893,14 @@ extern tree build4_stat (enum tree_code, tree, tree, tree, tree, |
extern tree build5_stat (enum tree_code, tree, tree, tree, tree, tree, |
tree MEM_STAT_DECL); |
#define build5(c,t1,t2,t3,t4,t5,t6) build5_stat (c,t1,t2,t3,t4,t5,t6 MEM_STAT_INFO) |
-extern tree build7_stat (enum tree_code, tree, tree, tree, tree, tree, |
- tree, tree, tree MEM_STAT_DECL); |
-#define build7(c,t1,t2,t3,t4,t5,t6,t7,t8) \ |
- build7_stat (c,t1,t2,t3,t4,t5,t6,t7,t8 MEM_STAT_INFO) |
+extern tree build6_stat (enum tree_code, tree, tree, tree, tree, tree, |
+ tree, tree MEM_STAT_DECL); |
+#define build6(c,t1,t2,t3,t4,t5,t6,t7) \ |
+ build6_stat (c,t1,t2,t3,t4,t5,t6,t7 MEM_STAT_INFO) |
+ |
+extern tree build_var_debug_value_stat (tree, tree MEM_STAT_DECL); |
+#define build_var_debug_value(t1,t2) \ |
+ build_var_debug_value_stat (t1,t2 MEM_STAT_INFO) |
extern tree build_int_cst (tree, HOST_WIDE_INT); |
extern tree build_int_cst_type (tree, HOST_WIDE_INT); |
@@ -3965,12 +3919,15 @@ extern tree build_one_cst (tree); |
extern tree build_string (int, const char *); |
extern tree build_tree_list_stat (tree, tree MEM_STAT_DECL); |
#define build_tree_list(t,q) build_tree_list_stat(t,q MEM_STAT_INFO) |
-extern tree build_decl_stat (enum tree_code, tree, tree MEM_STAT_DECL); |
+extern tree build_tree_list_vec_stat (const VEC(tree,gc) * MEM_STAT_DECL); |
+#define build_tree_list_vec(v) build_tree_list_vec_stat (v MEM_STAT_INFO) |
+extern tree build_decl_stat (location_t, enum tree_code, |
+ tree, tree MEM_STAT_DECL); |
extern tree build_fn_decl (const char *, tree); |
-#define build_decl(c,t,q) build_decl_stat (c,t,q MEM_STAT_INFO) |
+#define build_decl(l,c,t,q) build_decl_stat (l,c,t,q MEM_STAT_INFO) |
extern tree build_block (tree, tree, tree, tree); |
-extern tree build_empty_stmt (void); |
-extern tree build_omp_clause (enum omp_clause_code); |
+extern tree build_empty_stmt (location_t); |
+extern tree build_omp_clause (location_t, enum omp_clause_code); |
extern tree build_vl_exp_stat (enum tree_code, int MEM_STAT_DECL); |
#define build_vl_exp(c,n) build_vl_exp_stat (c,n MEM_STAT_INFO) |
@@ -3978,7 +3935,10 @@ extern tree build_vl_exp_stat (enum tree_code, int MEM_STAT_DECL); |
extern tree build_call_list (tree, tree, tree); |
extern tree build_call_nary (tree, tree, int, ...); |
extern tree build_call_valist (tree, tree, int, va_list); |
-extern tree build_call_array (tree, tree, int, tree*); |
+#define build_call_array(T1,T2,N,T3)\ |
+ build_call_array_loc (UNKNOWN_LOCATION, T1, T2, N, T3) |
+extern tree build_call_array_loc (location_t, tree, tree, int, const tree *); |
+extern tree build_call_vec (tree, tree, VEC(tree,gc) *); |
/* Construct various nodes representing data types. */ |
@@ -3996,6 +3956,7 @@ extern tree build_reference_type_for_mode (tree, enum machine_mode, bool); |
extern tree build_reference_type (tree); |
extern tree build_vector_type_for_mode (tree, enum machine_mode); |
extern tree build_vector_type (tree innertype, int nunits); |
+extern tree build_opaque_vector_type (tree innertype, int nunits); |
extern tree build_type_no_quals (tree); |
extern tree build_index_type (tree); |
extern tree build_index_2_type (tree, tree); |
@@ -4009,13 +3970,13 @@ extern tree build_method_type_directly (tree, tree, tree); |
extern tree build_method_type (tree, tree); |
extern tree build_offset_type (tree, tree); |
extern tree build_complex_type (tree); |
-extern tree build_resx (int); |
extern tree array_type_nelts (const_tree); |
extern bool in_array_bounds_p (tree); |
extern bool range_in_array_bounds_p (tree); |
extern tree value_member (tree, tree); |
extern tree purpose_member (const_tree, tree); |
+extern tree chain_index (int, tree); |
extern int attribute_list_equal (const_tree, const_tree); |
extern int attribute_list_contained (const_tree, const_tree); |
@@ -4032,6 +3993,7 @@ extern bool tree_expr_nonnegative_p (tree); |
extern bool tree_expr_nonnegative_warnv_p (tree, bool *); |
extern bool may_negate_without_overflow_p (const_tree); |
extern tree strip_array_types (tree); |
+extern tree excess_precision_type (tree); |
/* Construct various nodes representing fract or accum data types. */ |
@@ -4078,6 +4040,7 @@ extern tree make_tree (tree, rtx); |
extern tree build_type_attribute_variant (tree, tree); |
extern tree build_decl_attribute_variant (tree, tree); |
+extern tree build_type_attribute_qual_variant (tree, tree, int); |
/* Structure describing an attribute and a function to handle it. */ |
struct attribute_spec |
@@ -4303,16 +4266,17 @@ extern enum machine_mode mode_for_size_tree (const_tree, enum mode_class, int); |
/* Return an expr equal to X but certainly not valid as an lvalue. */ |
-extern tree non_lvalue (tree); |
+#define non_lvalue(T) non_lvalue_loc (UNKNOWN_LOCATION, T) |
+extern tree non_lvalue_loc (location_t, tree); |
extern tree convert (tree, tree); |
extern unsigned int expr_align (const_tree); |
extern tree expr_first (tree); |
extern tree expr_last (tree); |
-extern tree expr_only (tree); |
extern tree size_in_bytes (const_tree); |
extern HOST_WIDE_INT int_size_in_bytes (const_tree); |
extern HOST_WIDE_INT max_int_size_in_bytes (const_tree); |
+extern tree tree_expr_size (const_tree); |
extern tree bit_position (const_tree); |
extern HOST_WIDE_INT int_bit_position (const_tree); |
extern tree byte_position (const_tree); |
@@ -4337,19 +4301,26 @@ extern GTY(()) tree sizetype_tab[(int) TYPE_KIND_LAST]; |
#define sbitsizetype sizetype_tab[(int) SBITSIZETYPE] |
extern tree size_int_kind (HOST_WIDE_INT, enum size_type_kind); |
-extern tree size_binop (enum tree_code, tree, tree); |
-extern tree size_diffop (tree, tree); |
+#define size_binop(CODE,T1,T2)\ |
+ size_binop_loc (UNKNOWN_LOCATION, CODE, T1, T2) |
+extern tree size_binop_loc (location_t, enum tree_code, tree, tree); |
+#define size_diffop(T1,T2)\ |
+ size_diffop_loc (UNKNOWN_LOCATION, T1, T2) |
+extern tree size_diffop_loc (location_t, tree, tree); |
#define size_int(L) size_int_kind (L, SIZETYPE) |
#define ssize_int(L) size_int_kind (L, SSIZETYPE) |
#define bitsize_int(L) size_int_kind (L, BITSIZETYPE) |
#define sbitsize_int(L) size_int_kind (L, SBITSIZETYPE) |
-extern tree round_up (tree, int); |
-extern tree round_down (tree, int); |
+#define round_up(T,N) round_up_loc (UNKNOWN_LOCATION, T, N) |
+extern tree round_up_loc (location_t, tree, int); |
+#define round_down(T,N) round_down_loc (UNKNOWN_LOCATION, T, N) |
+extern tree round_down_loc (location_t, tree, int); |
extern tree get_pending_sizes (void); |
extern void put_pending_size (tree); |
extern void put_pending_sizes (tree); |
+extern void finalize_size_functions (void); |
/* Type for sizes of data-type. */ |
@@ -4391,6 +4362,10 @@ extern int list_length (const_tree); |
extern int fields_length (const_tree); |
+/* Returns the first FIELD_DECL in a type. */ |
+ |
+extern tree first_field (const_tree); |
+ |
/* Given an initializer INIT, return TRUE if INIT is zero or some |
aggregate of zeros. Otherwise return FALSE. */ |
@@ -4400,6 +4375,10 @@ extern bool initializer_zerop (const_tree); |
extern tree ctor_to_list (tree); |
+/* Given a CONSTRUCTOR CTOR, return the element values as a vector. */ |
+ |
+extern VEC(tree,gc) *ctor_to_vec (tree); |
+ |
/* Examine CTOR to discover: |
* how many scalar fields are set to nonzero values, |
and place it in *P_NZ_ELTS; |
@@ -4487,10 +4466,30 @@ extern bool contains_placeholder_p (const_tree); |
extern bool type_contains_placeholder_p (tree); |
+/* Given a tree EXP, find all occurences of references to fields |
+ in a PLACEHOLDER_EXPR and place them in vector REFS without |
+ duplicates. Also record VAR_DECLs and CONST_DECLs. Note that |
+ we assume here that EXP contains only arithmetic expressions |
+ or CALL_EXPRs with PLACEHOLDER_EXPRs occurring only in their |
+ argument list. */ |
+ |
+extern void find_placeholder_in_expr (tree, VEC (tree, heap) **); |
+ |
+/* This macro calls the above function but short-circuits the common |
+ case of a constant to save time and also checks for NULL. */ |
+ |
+#define FIND_PLACEHOLDER_IN_EXPR(EXP, V) \ |
+do { \ |
+ if((EXP) && !TREE_CONSTANT (EXP)) \ |
+ find_placeholder_in_expr (EXP, V); \ |
+} while (0) |
+ |
/* Given a tree EXP, a FIELD_DECL F, and a replacement value R, |
return a tree with all occurrences of references to F in a |
- PLACEHOLDER_EXPR replaced by R. Note that we assume here that EXP |
- contains only arithmetic expressions. */ |
+ PLACEHOLDER_EXPR replaced by R. Also handle VAR_DECLs and |
+ CONST_DECLs. Note that we assume here that EXP contains only |
+ arithmetic expressions or CALL_EXPRs with PLACEHOLDER_EXPRs |
+ occurring only in their argument list. */ |
extern tree substitute_in_expr (tree, tree, tree); |
@@ -4548,7 +4547,24 @@ extern tree get_narrower (tree, int *); |
/* Return true if T is an expression that get_inner_reference handles. */ |
-extern int handled_component_p (const_tree); |
+static inline bool |
+handled_component_p (const_tree t) |
+{ |
+ switch (TREE_CODE (t)) |
+ { |
+ case BIT_FIELD_REF: |
+ case COMPONENT_REF: |
+ case ARRAY_REF: |
+ case ARRAY_RANGE_REF: |
+ case VIEW_CONVERT_EXPR: |
+ case REALPART_EXPR: |
+ case IMAGPART_EXPR: |
+ return true; |
+ |
+ default: |
+ return false; |
+ } |
+} |
/* Given an expression EXP that is a handled_component_p, |
look for the ultimate containing object, which is returned and specify |
@@ -4686,7 +4702,6 @@ extern unsigned crc32_string (unsigned, const char *); |
extern void clean_symbol_name (char *); |
extern tree get_file_function_name (const char *); |
extern tree get_callee_fndecl (const_tree); |
-extern void change_decl_assembler_name (tree, tree); |
extern int type_num_arguments (const_tree); |
extern bool associative_tree_code (enum tree_code); |
extern bool commutative_tree_code (enum tree_code); |
@@ -4696,12 +4711,20 @@ extern int operand_equal_for_phi_arg_p (const_tree, const_tree); |
extern tree call_expr_arg (tree, int); |
extern tree *call_expr_argp (tree, int); |
extern tree call_expr_arglist (tree); |
-extern tree create_artificial_label (void); |
+extern tree create_artificial_label (location_t); |
extern const char *get_name (tree); |
extern bool stdarg_p (tree); |
extern bool prototype_p (tree); |
-extern int function_args_count (tree); |
extern bool auto_var_in_fn_p (const_tree, const_tree); |
+extern tree build_low_bits_mask (tree, unsigned); |
+extern tree tree_strip_nop_conversions (tree); |
+extern tree tree_strip_sign_nop_conversions (tree); |
+extern tree lhd_gcc_personality (void); |
+extern void assign_assembler_name_if_neeeded (tree); |
+ |
+ |
+/* In cgraph.c */ |
+extern void change_decl_assembler_name (tree, tree); |
/* In gimplify.c */ |
extern tree unshare_expr (tree); |
@@ -4737,34 +4760,57 @@ extern tree native_interpret_expr (tree, const unsigned char *, int); |
subexpressions are not changed. */ |
extern tree fold (tree); |
-extern tree fold_unary (enum tree_code, tree, tree); |
-extern tree fold_unary_ignore_overflow (enum tree_code, tree, tree); |
-extern tree fold_binary (enum tree_code, tree, tree, tree); |
-extern tree fold_ternary (enum tree_code, tree, tree, tree, tree); |
-extern tree fold_build1_stat (enum tree_code, tree, tree MEM_STAT_DECL); |
-#define fold_build1(c,t1,t2) fold_build1_stat (c, t1, t2 MEM_STAT_INFO) |
-extern tree fold_build2_stat (enum tree_code, tree, tree, tree MEM_STAT_DECL); |
-#define fold_build2(c,t1,t2,t3) fold_build2_stat (c, t1, t2, t3 MEM_STAT_INFO) |
-extern tree fold_build3_stat (enum tree_code, tree, tree, tree, tree MEM_STAT_DECL); |
-#define fold_build3(c,t1,t2,t3,t4) fold_build3_stat (c, t1, t2, t3, t4 MEM_STAT_INFO) |
-extern tree fold_build1_initializer (enum tree_code, tree, tree); |
-extern tree fold_build2_initializer (enum tree_code, tree, tree, tree); |
-extern tree fold_build3_initializer (enum tree_code, tree, tree, tree, tree); |
-extern tree fold_build_call_array (tree, tree, int, tree *); |
-extern tree fold_build_call_array_initializer (tree, tree, int, tree *); |
+#define fold_unary(CODE,T1,T2)\ |
+ fold_unary_loc (UNKNOWN_LOCATION, CODE, T1, T2) |
+extern tree fold_unary_loc (location_t, enum tree_code, tree, tree); |
+#define fold_unary_ignore_overflow(CODE,T1,T2)\ |
+ fold_unary_ignore_overflow_loc (UNKNOWN_LOCATION, CODE, T1, T2) |
+extern tree fold_unary_ignore_overflow_loc (location_t, enum tree_code, tree, tree); |
+#define fold_binary(CODE,T1,T2,T3)\ |
+ fold_binary_loc (UNKNOWN_LOCATION, CODE, T1, T2, T3) |
+extern tree fold_binary_loc (location_t, enum tree_code, tree, tree, tree); |
+#define fold_ternary(CODE,T1,T2,T3,T4)\ |
+ fold_ternary_loc (UNKNOWN_LOCATION, CODE, T1, T2, T3, T4) |
+extern tree fold_ternary_loc (location_t, enum tree_code, tree, tree, tree, tree); |
+#define fold_build1(c,t1,t2)\ |
+ fold_build1_stat_loc (UNKNOWN_LOCATION, c, t1, t2 MEM_STAT_INFO) |
+#define fold_build1_loc(l,c,t1,t2)\ |
+ fold_build1_stat_loc (l, c, t1, t2 MEM_STAT_INFO) |
+extern tree fold_build1_stat_loc (location_t, enum tree_code, tree, |
+ tree MEM_STAT_DECL); |
+#define fold_build2(c,t1,t2,t3)\ |
+ fold_build2_stat_loc (UNKNOWN_LOCATION, c, t1, t2, t3 MEM_STAT_INFO) |
+#define fold_build2_loc(l,c,t1,t2,t3)\ |
+ fold_build2_stat_loc (l, c, t1, t2, t3 MEM_STAT_INFO) |
+extern tree fold_build2_stat_loc (location_t, enum tree_code, tree, tree, |
+ tree MEM_STAT_DECL); |
+#define fold_build3(c,t1,t2,t3,t4)\ |
+ fold_build3_stat_loc (UNKNOWN_LOCATION, c, t1, t2, t3, t4 MEM_STAT_INFO) |
+#define fold_build3_loc(l,c,t1,t2,t3,t4)\ |
+ fold_build3_stat_loc (l, c, t1, t2, t3, t4 MEM_STAT_INFO) |
+extern tree fold_build3_stat_loc (location_t, enum tree_code, tree, tree, tree, |
+ tree MEM_STAT_DECL); |
+extern tree fold_build1_initializer_loc (location_t, enum tree_code, tree, tree); |
+extern tree fold_build2_initializer_loc (location_t, enum tree_code, tree, tree, tree); |
+extern tree fold_build3_initializer_loc (location_t, enum tree_code, tree, tree, tree, tree); |
+#define fold_build_call_array(T1,T2,N,T4)\ |
+ fold_build_call_array_loc (UNKNOWN_LOCATION, T1, T2, N, T4) |
+extern tree fold_build_call_array_loc (location_t, tree, tree, int, tree *); |
+#define fold_build_call_array_initializer(T1,T2,N,T4)\ |
+ fold_build_call_array_initializer_loc (UNKNOWN_LOCATION, T1, T2, N, T4) |
+extern tree fold_build_call_array_initializer_loc (location_t, tree, tree, int, tree *); |
extern bool fold_convertible_p (const_tree, const_tree); |
-extern tree fold_convert (tree, tree); |
-extern tree fold_single_bit_test (enum tree_code, tree, tree, tree); |
+#define fold_convert(T1,T2)\ |
+ fold_convert_loc(UNKNOWN_LOCATION, T1, T2) |
+extern tree fold_convert_loc (location_t, tree, tree); |
+extern tree fold_single_bit_test (location_t, enum tree_code, tree, tree, tree); |
extern tree fold_ignored_result (tree); |
extern tree fold_abs_const (tree, tree); |
-extern tree fold_indirect_ref_1 (tree, tree); |
+extern tree fold_indirect_ref_1 (location_t, tree, tree); |
extern void fold_defer_overflow_warnings (void); |
extern void fold_undefer_overflow_warnings (bool, const_gimple, int); |
extern void fold_undefer_and_ignore_overflow_warnings (void); |
extern bool fold_deferring_overflow_warnings_p (void); |
-extern tree maybe_fold_offset_to_reference (tree, tree, tree); |
-extern tree maybe_fold_offset_to_address (tree, tree, tree); |
-extern tree maybe_fold_stmt_addition (tree, tree, tree); |
extern tree force_fit_type_double (tree, unsigned HOST_WIDE_INT, HOST_WIDE_INT, |
int, bool); |
@@ -4812,22 +4858,36 @@ enum operand_equal_flag |
extern int operand_equal_p (const_tree, const_tree, unsigned int); |
extern int multiple_of_p (tree, const_tree, const_tree); |
-extern tree omit_one_operand (tree, tree, tree); |
-extern tree omit_two_operands (tree, tree, tree, tree); |
-extern tree invert_truthvalue (tree); |
-extern tree fold_truth_not_expr (tree); |
+#define omit_one_operand(T1,T2,T3)\ |
+ omit_one_operand_loc (UNKNOWN_LOCATION, T1, T2, T3) |
+extern tree omit_one_operand_loc (location_t, tree, tree, tree); |
+#define omit_two_operands(T1,T2,T3,T4)\ |
+ omit_two_operands_loc (UNKNOWN_LOCATION, T1, T2, T3, T4) |
+extern tree omit_two_operands_loc (location_t, tree, tree, tree, tree); |
+#define invert_truthvalue(T)\ |
+ invert_truthvalue_loc(UNKNOWN_LOCATION, T) |
+extern tree invert_truthvalue_loc (location_t, tree); |
+extern tree fold_truth_not_expr (location_t, tree); |
extern tree fold_unary_to_constant (enum tree_code, tree, tree); |
extern tree fold_binary_to_constant (enum tree_code, tree, tree, tree); |
extern tree fold_read_from_constant_string (tree); |
extern tree int_const_binop (enum tree_code, const_tree, const_tree, int); |
-extern tree build_fold_addr_expr (tree); |
+#define build_fold_addr_expr(T)\ |
+ build_fold_addr_expr_loc (UNKNOWN_LOCATION, (T)) |
+extern tree build_fold_addr_expr_loc (location_t, tree); |
+#define build_fold_addr_expr_with_type(T,TYPE)\ |
+ build_fold_addr_expr_with_type_loc (UNKNOWN_LOCATION, (T), TYPE) |
+extern tree build_fold_addr_expr_with_type_loc (location_t, tree, tree); |
extern tree fold_build_cleanup_point_expr (tree type, tree expr); |
extern tree fold_strip_sign_ops (tree); |
-extern tree build_fold_addr_expr_with_type (tree, tree); |
-extern tree build_fold_indirect_ref (tree); |
-extern tree fold_indirect_ref (tree); |
+#define build_fold_indirect_ref(T)\ |
+ build_fold_indirect_ref_loc (UNKNOWN_LOCATION, T) |
+extern tree build_fold_indirect_ref_loc (location_t, tree); |
+#define fold_indirect_ref(T)\ |
+ fold_indirect_ref_loc (UNKNOWN_LOCATION, T) |
+extern tree fold_indirect_ref_loc (location_t, tree); |
extern tree constant_boolean_node (int, tree); |
-extern tree build_low_bits_mask (tree, unsigned); |
+extern tree div_if_zero_remainder (enum tree_code, const_tree, const_tree); |
extern bool tree_swap_operands_p (const_tree, const_tree, bool); |
extern enum tree_code swap_tree_comparison (enum tree_code); |
@@ -4840,7 +4900,6 @@ extern bool tree_unary_nonzero_warnv_p (enum tree_code, tree, tree, bool *); |
extern bool tree_binary_nonzero_warnv_p (enum tree_code, tree, tree, tree op1, |
bool *); |
extern bool tree_single_nonzero_warnv_p (tree, bool *); |
-extern bool tree_expr_nonzero_warnv_p (tree, bool *); |
extern bool tree_unary_nonnegative_warnv_p (enum tree_code, tree, tree, bool *); |
extern bool tree_binary_nonnegative_warnv_p (enum tree_code, tree, tree, tree, |
bool *); |
@@ -4851,6 +4910,9 @@ extern bool tree_call_nonnegative_warnv_p (tree, tree, tree, tree, bool *); |
extern bool tree_expr_nonzero_warnv_p (tree, bool *); |
extern bool fold_real_zero_addition_p (const_tree, const_tree, int); |
+extern tree combine_comparisons (location_t, enum tree_code, enum tree_code, |
+ enum tree_code, tree, tree, tree); |
+extern void debug_fold_checksum (const_tree); |
/* Return nonzero if CODE is a tree code that represents a truth value. */ |
static inline bool |
@@ -4864,34 +4926,41 @@ truth_value_p (enum tree_code code) |
/* In builtins.c */ |
-extern tree fold_call_expr (tree, bool); |
-extern tree fold_builtin_fputs (tree, tree, bool, bool, tree); |
-extern tree fold_builtin_strcpy (tree, tree, tree, tree); |
-extern tree fold_builtin_strncpy (tree, tree, tree, tree, tree); |
-extern tree fold_builtin_memory_chk (tree, tree, tree, tree, tree, tree, bool, |
+extern tree fold_call_expr (location_t, tree, bool); |
+extern tree fold_builtin_fputs (location_t, tree, tree, bool, bool, tree); |
+extern tree fold_builtin_strcpy (location_t, tree, tree, tree, tree); |
+extern tree fold_builtin_strncpy (location_t, tree, tree, tree, tree, tree); |
+extern tree fold_builtin_memory_chk (location_t, tree, tree, tree, tree, tree, tree, bool, |
enum built_in_function); |
-extern tree fold_builtin_stxcpy_chk (tree, tree, tree, tree, tree, bool, |
+extern tree fold_builtin_stxcpy_chk (location_t, tree, tree, tree, tree, tree, bool, |
enum built_in_function); |
-extern tree fold_builtin_strncpy_chk (tree, tree, tree, tree, tree); |
-extern tree fold_builtin_snprintf_chk (tree, tree, enum built_in_function); |
+extern tree fold_builtin_strncpy_chk (location_t, tree, tree, tree, tree, tree); |
+extern tree fold_builtin_snprintf_chk (location_t, tree, tree, enum built_in_function); |
extern bool fold_builtin_next_arg (tree, bool); |
extern enum built_in_function builtin_mathfn_code (const_tree); |
-extern tree build_function_call_expr (tree, tree); |
-extern tree fold_builtin_call_array (tree, tree, int, tree *); |
-extern void debug_fold_checksum (const_tree); |
+extern tree build_function_call_expr (location_t, tree, tree); |
+extern tree fold_builtin_call_array (location_t, tree, tree, int, tree *); |
+extern tree build_call_expr_loc (location_t, tree, int, ...); |
extern tree build_call_expr (tree, int, ...); |
extern tree mathfn_built_in (tree, enum built_in_function fn); |
-extern tree strip_float_extensions (tree); |
extern tree c_strlen (tree, int); |
extern tree std_gimplify_va_arg_expr (tree, tree, gimple_seq *, gimple_seq *); |
extern tree build_va_arg_indirect_ref (tree); |
extern tree build_string_literal (int, const char *); |
extern bool validate_arglist (const_tree, ...); |
extern rtx builtin_memset_read_str (void *, HOST_WIDE_INT, enum machine_mode); |
+extern bool can_trust_pointer_alignment (void); |
extern int get_pointer_alignment (tree, unsigned int); |
+extern bool is_builtin_name (const char *); |
+extern bool is_builtin_fn (tree); |
extern int get_object_alignment (tree, unsigned int, unsigned int); |
extern tree fold_call_stmt (gimple, bool); |
extern tree gimple_fold_builtin_snprintf_chk (gimple, tree, enum built_in_function); |
+extern tree make_range (tree, int *, tree *, tree *, bool *); |
+extern tree build_range_check (location_t, tree, tree, int, tree, tree); |
+extern bool merge_ranges (int *, tree *, tree *, int, tree, tree, int, |
+ tree, tree); |
+extern void set_builtin_user_assembler_name (tree decl, const char *asmspec); |
/* In convert.c */ |
extern tree strip_float_extensions (tree); |
@@ -4911,7 +4980,9 @@ extern int simple_cst_equal (const_tree, const_tree); |
extern hashval_t iterative_hash_expr (const_tree, hashval_t); |
extern hashval_t iterative_hash_exprs_commutative (const_tree, |
const_tree, hashval_t); |
+extern hashval_t iterative_hash_host_wide_int (HOST_WIDE_INT, hashval_t); |
extern hashval_t iterative_hash_hashval_t (hashval_t, hashval_t); |
+extern hashval_t iterative_hash_host_wide_int (HOST_WIDE_INT, hashval_t); |
extern int compare_tree_int (const_tree, unsigned HOST_WIDE_INT); |
extern int type_list_equal (const_tree, const_tree); |
extern int chain_member (const_tree, const_tree); |
@@ -4919,10 +4990,6 @@ extern tree type_hash_lookup (unsigned int, tree); |
extern void type_hash_add (unsigned int, tree); |
extern int simple_cst_list_equal (const_tree, const_tree); |
extern void dump_tree_statistics (void); |
-extern void expand_function_end (void); |
-extern void expand_function_start (tree); |
-extern void stack_protect_prologue (void); |
-extern void stack_protect_epilogue (void); |
extern void recompute_tree_invariant_for_addr_expr (tree); |
extern bool needs_to_live_in_memory (const_tree); |
extern tree reconstruct_complex_type (tree, tree); |
@@ -4936,20 +5003,28 @@ extern void build_common_tree_nodes_2 (int); |
extern void build_common_builtin_nodes (void); |
extern tree build_nonstandard_integer_type (unsigned HOST_WIDE_INT, int); |
extern tree build_range_type (tree, tree, tree); |
+extern bool subrange_type_for_debug_p (const_tree, tree *, tree *); |
extern HOST_WIDE_INT int_cst_value (const_tree); |
-extern tree build_addr (tree, tree); |
+extern HOST_WIDEST_INT widest_int_cst_value (const_tree); |
extern bool fields_compatible_p (const_tree, const_tree); |
extern tree find_compatible_field (tree, tree); |
-extern void set_expr_locus (tree, source_location *); |
- |
extern tree *tree_block (tree); |
extern location_t *block_nonartificial_location (tree); |
extern location_t tree_nonartificial_location (tree); |
+extern tree block_ultimate_origin (const_tree); |
+ |
+/* In tree-nested.c */ |
+extern tree build_addr (tree, tree); |
+ |
/* In function.c */ |
extern void expand_main_function (void); |
+extern void expand_function_end (void); |
+extern void expand_function_start (tree); |
+extern void stack_protect_prologue (void); |
+extern void stack_protect_epilogue (void); |
extern void init_dummy_function_start (void); |
extern void expand_dummy_function_end (void); |
extern unsigned int init_function_for_compilation (void); |
@@ -5028,7 +5103,6 @@ extern bool gimple_alloca_call_p (const_gimple); |
extern bool alloca_call_p (const_tree); |
extern bool must_pass_in_stack_var_size (enum machine_mode, const_tree); |
extern bool must_pass_in_stack_var_size_or_pad (enum machine_mode, const_tree); |
-extern tree block_ultimate_origin (const_tree); |
/* In attribs.c. */ |
@@ -5056,7 +5130,8 @@ extern unsigned int update_alignment_for_field (record_layout_info, tree, |
unsigned int); |
/* varasm.c */ |
extern void make_decl_rtl (tree); |
-extern void make_decl_one_only (tree); |
+extern rtx make_decl_rtl_for_debug (tree); |
+extern void make_decl_one_only (tree, tree); |
extern int supports_one_only (void); |
extern void resolve_unique_section (tree, int, int); |
extern void mark_referenced (tree); |
@@ -5067,6 +5142,7 @@ extern void process_pending_assemble_externals (void); |
extern void finish_aliases_1 (void); |
extern void finish_aliases_2 (void); |
extern tree emutls_decl (tree); |
+extern void remove_unreachable_alias_pairs (void); |
/* In stmt.c */ |
extern void expand_computed_goto (tree); |
@@ -5074,9 +5150,9 @@ extern bool parse_output_constraint (const char **, int, int, int, |
bool *, bool *, bool *); |
extern bool parse_input_constraint (const char **, int, int, int, int, |
const char * const *, bool *, bool *); |
-extern void expand_asm_expr (tree); |
-extern tree resolve_asm_operand_names (tree, tree, tree); |
-extern void expand_case (tree); |
+extern void expand_asm_stmt (gimple); |
+extern tree resolve_asm_operand_names (tree, tree, tree, tree); |
+extern void expand_case (gimple); |
extern void expand_decl (tree); |
#ifdef HARD_CONST |
/* Silly ifdef to avoid having all includers depend on hard-reg-set.h. */ |
@@ -5084,6 +5160,7 @@ extern tree tree_overlaps_hard_reg_set (tree, HARD_REG_SET *); |
#endif |
+/* In dwarf2out.c */ |
/* Interface of the DWARF2 unwind info support. */ |
/* Generate a new label for the CFI info to refer to. */ |
@@ -5098,11 +5175,6 @@ extern void dwarf2out_def_cfa (const char *, unsigned, HOST_WIDE_INT); |
extern void dwarf2out_window_save (const char *); |
-/* Add a CFI to update the running total of the size of arguments pushed |
- onto the stack. */ |
- |
-extern void dwarf2out_args_size (const char *, HOST_WIDE_INT); |
- |
/* Entry point for saving a register to the stack. */ |
extern void dwarf2out_reg_save (const char *, unsigned, HOST_WIDE_INT); |
@@ -5143,6 +5215,7 @@ extern tree walk_tree_without_duplicates_1 (tree*, walk_tree_fn, void*, |
#define walk_tree_without_duplicates(a,b,c) \ |
walk_tree_without_duplicates_1 (a, b, c, NULL) |
+/* In emit-rtl.c */ |
/* Assign the RTX to declaration. */ |
extern void set_decl_rtl (tree, rtx); |
@@ -5181,27 +5254,27 @@ extern int tree_node_sizes[]; |
restricted to creating gimple expressions. */ |
extern bool in_gimple_form; |
-/* In tree-gimple.c. */ |
+/* In gimple.c. */ |
extern tree get_base_address (tree t); |
+extern void mark_addressable (tree); |
/* In tree-vectorizer.c. */ |
extern void vect_set_verbosity_level (const char *); |
/* In tree.c. */ |
-struct tree_map_base GTY(()) |
-{ |
+struct GTY(()) tree_map_base { |
tree from; |
}; |
extern int tree_map_base_eq (const void *, const void *); |
extern unsigned int tree_map_base_hash (const void *); |
extern int tree_map_base_marked_p (const void *); |
+extern bool list_equal_p (const_tree, const_tree); |
/* Map from a tree to another tree. */ |
-struct tree_map GTY(()) |
-{ |
+struct GTY(()) tree_map { |
struct tree_map_base base; |
unsigned int hash; |
tree to; |
@@ -5213,8 +5286,7 @@ extern unsigned int tree_map_hash (const void *); |
/* Map from a tree to an int. */ |
-struct tree_int_map GTY(()) |
-{ |
+struct GTY(()) tree_int_map { |
struct tree_map_base base; |
unsigned int to; |
}; |
@@ -5225,8 +5297,7 @@ struct tree_int_map GTY(()) |
/* Map from a tree to initialization/finalization priorities. */ |
-struct tree_priority_map GTY(()) |
-{ |
+struct GTY(()) tree_priority_map { |
struct tree_map_base base; |
priority_type init; |
priority_type fini; |
@@ -5236,12 +5307,20 @@ struct tree_priority_map GTY(()) |
#define tree_priority_map_hash tree_map_base_hash |
#define tree_priority_map_marked_p tree_map_base_marked_p |
+/* In tree-ssa.c */ |
+ |
+tree target_for_debug_bind (tree); |
+ |
+/* In tree-ssa-ccp.c */ |
+extern tree maybe_fold_offset_to_reference (location_t, tree, tree, tree); |
+extern tree maybe_fold_offset_to_address (location_t, tree, tree, tree); |
+extern tree maybe_fold_stmt_addition (location_t, tree, tree, tree); |
+ |
/* In tree-ssa-address.c. */ |
extern tree tree_mem_ref_addr (tree, tree); |
extern void copy_mem_ref_info (tree, tree); |
/* In tree-vrp.c */ |
-extern bool ssa_name_nonzero_p (const_tree); |
extern bool ssa_name_nonnegative_p (const_tree); |
/* In tree-object-size.c. */ |
@@ -5251,6 +5330,7 @@ extern unsigned HOST_WIDE_INT compute_builtin_object_size (tree, int); |
/* In expr.c. */ |
extern unsigned HOST_WIDE_INT highest_pow2_factor (const_tree); |
+extern tree build_personality_function (const char *); |
/* In tree-inline.c. */ |
@@ -5259,7 +5339,7 @@ void init_inline_once (void); |
/* In ipa-reference.c. Used for parsing attributes of asm code. */ |
extern GTY(()) tree memory_identifier_string; |
-/* Compute the number of operands in an expression node NODE. For |
+/* Compute the number of operands in an expression node NODE. For |
tcc_vl_exp nodes like CALL_EXPRs, this is stored in the node itself, |
otherwise it is looked up from the node's code. */ |
static inline int |
@@ -5276,15 +5356,13 @@ tree_operand_length (const_tree node) |
defined by this point. */ |
/* Structure containing iterator state. */ |
-typedef struct call_expr_arg_iterator_d GTY (()) |
-{ |
+typedef struct GTY (()) call_expr_arg_iterator_d { |
tree t; /* the call_expr */ |
int n; /* argument count */ |
int i; /* next argument index */ |
} call_expr_arg_iterator; |
-typedef struct const_call_expr_arg_iterator_d GTY (()) |
-{ |
+typedef struct GTY (()) const_call_expr_arg_iterator_d { |
const_tree t; /* the call_expr */ |
int n; /* argument count */ |
int i; /* next argument index */ |
@@ -5374,4 +5452,11 @@ more_const_call_expr_args_p (const const_call_expr_arg_iterator *iter) |
for ((arg) = first_const_call_expr_arg ((call), &(iter)); (arg); \ |
(arg) = next_const_call_expr_arg (&(iter))) |
+/* Return true if tree node T is a language-specific node. */ |
+static inline bool |
+is_lang_specific (tree t) |
+{ |
+ return TREE_CODE (t) == LANG_TYPE || TREE_CODE (t) >= NUM_TREE_CODES; |
+} |
+ |
#endif /* GCC_TREE_H */ |