OSDN Git Service

* target-def.h: Remove usage of OBJECT_FORMAT_ROSE.
[pf3gnuchains/gcc-fork.git] / gcc / tree.h
index 5a2d3b9..e43466b 100644 (file)
@@ -24,7 +24,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
 
 #include "machmode.h"
 #include "version.h"
-#include "location.h"
+#include "input.h"
 
 /* Codes of tree nodes */
 
@@ -145,8 +145,8 @@ struct tree_common GTY(())
   unsigned public_flag : 1;
   unsigned private_flag : 1;
   unsigned protected_flag : 1;
-  unsigned bounded_flag : 1;
   unsigned deprecated_flag : 1;
+  unsigned unused_1 : 1;
 
   unsigned lang_flag_0 : 1;
   unsigned lang_flag_1 : 1;
@@ -155,7 +155,7 @@ struct tree_common GTY(())
   unsigned lang_flag_4 : 1;
   unsigned lang_flag_5 : 1;
   unsigned lang_flag_6 : 1;
-  unsigned unused_1 : 1;
+  unsigned unused_2 : 1;
 };
 
 /* The following table lists the uses of each of the above flags and
@@ -255,14 +255,6 @@ struct tree_common GTY(())
        TREE_NOTHROW in
            CALL_EXPR, FUNCTION_DECL
 
-   bounded_flag:
-
-       TREE_BOUNDED in
-          expressions, VAR_DECL, PARM_DECL, FIELD_DECL, FUNCTION_DECL,
-          IDENTIFIER_NODE
-       TYPE_BOUNDED in
-          ..._TYPE
-
    deprecated_flag:
 
        TREE_DEPRECATED in
@@ -282,31 +274,31 @@ struct tree_common GTY(())
    is accessed incorrectly. The macros abort with a fatal error.  */
 #if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
 
-#define TREE_CHECK(t, code) __extension__                              \
-({  const tree __t = (t);                                              \
-    if (TREE_CODE(__t) != (code))                                      \
-      tree_check_failed (__t, code, __FILE__, __LINE__, __FUNCTION__); \
+#define TREE_CHECK(T, CODE) __extension__                              \
+({  const tree __t = (T);                                              \
+    if (TREE_CODE (__t) != (CODE))                                     \
+      tree_check_failed (__t, (CODE), __FILE__, __LINE__, __FUNCTION__); \
     __t; })
-#define TREE_CLASS_CHECK(t, class) __extension__                       \
-({  const tree __t = (t);                                              \
-    if (TREE_CODE_CLASS(TREE_CODE(__t)) != (class))                    \
-      tree_class_check_failed (__t, class, __FILE__, __LINE__,         \
+
+#define TREE_CLASS_CHECK(T, CLASS) __extension__                       \
+({  const tree __t = (T);                                              \
+    if (TREE_CODE_CLASS (TREE_CODE(__t)) != (CLASS))                   \
+      tree_class_check_failed (__t, (CLASS), __FILE__, __LINE__,       \
                               __FUNCTION__);                           \
     __t; })
 
 /* These checks have to be special cased.  */
-#define EXPR_CHECK(t) __extension__                                    \
-({  const tree __t = (t);                                              \
-    char const __c = TREE_CODE_CLASS(TREE_CODE(__t));                  \
-    if (__c != 'r' && __c != 's' && __c != '<'                         \
-       && __c != '1' && __c != '2' && __c != 'e')                      \
+#define EXPR_CHECK(T) __extension__                                    \
+({  const tree __t = (T);                                              \
+    char const __c = TREE_CODE_CLASS (TREE_CODE (__t));                        \
+    if (!IS_EXPR_CODE_CLASS (__c) && __c != 'r' && __c != 's')         \
       tree_class_check_failed (__t, 'e', __FILE__, __LINE__,           \
                               __FUNCTION__);                           \
     __t; })
 
-#define TREE_VEC_ELT_CHECK(t, i) __extension__                         \
-(*({const tree __t = t;                                                        \
-    const int __i = (i);                                               \
+#define TREE_VEC_ELT_CHECK(T, I) __extension__                         \
+(*({const tree __t = (T);                                              \
+    const int __i = (I);                                               \
     if (TREE_CODE (__t) != TREE_VEC)                                   \
       tree_check_failed (__t, TREE_VEC,                                        \
                         __FILE__, __LINE__, __FUNCTION__);             \
@@ -316,36 +308,32 @@ struct tree_common GTY(())
     &__t->vec.a[__i]; }))
 
 /* Special checks for TREE_OPERANDs.  */
-#define TREE_OPERAND_CHECK(t, i) __extension__                         \
-(*({const tree __t = EXPR_CHECK(t);                                    \
-    const int __i = (i);                                               \
+#define TREE_OPERAND_CHECK(T, I) __extension__                         \
+(*({const tree __t = EXPR_CHECK (T);                                   \
+    const int __i = (I);                                               \
     if (__i < 0 || __i >= TREE_CODE_LENGTH (TREE_CODE (__t)))          \
       tree_operand_check_failed (__i, TREE_CODE (__t),                 \
                                 __FILE__, __LINE__, __FUNCTION__);     \
     &__t->exp.operands[__i]; }))
 
-#define TREE_OPERAND_CHECK_CODE(t, code, i) __extension__              \
-(*({const tree __t = t;                                                        \
-    const int __i = (i);                                               \
-    const enum tree_code __code = code;                                        \
-    if (TREE_CODE (__t) != __code)                                     \
-      tree_check_failed (__t, __code,                                  \
-                        __FILE__, __LINE__, __FUNCTION__);             \
-    if (__i < 0 || __i >= TREE_CODE_LENGTH (__code))                   \
-      tree_operand_check_failed (__i, __code,                          \
+#define TREE_OPERAND_CHECK_CODE(T, CODE, I) __extension__              \
+(*({const tree __t = (T);                                              \
+    const int __i = (I);                                               \
+    if (TREE_CODE (__t) != CODE)                                       \
+      tree_check_failed (__t, CODE, __FILE__, __LINE__, __FUNCTION__); \
+    if (__i < 0 || __i >= TREE_CODE_LENGTH (CODE))                     \
+      tree_operand_check_failed (__i, (CODE),                          \
                                 __FILE__, __LINE__, __FUNCTION__);     \
     &__t->exp.operands[__i]; }))
 
-#define TREE_RTL_OPERAND_CHECK(t, code, i) __extension__               \
+#define TREE_RTL_OPERAND_CHECK(T, CODE, I) __extension__               \
 (*(rtx *)                                                              \
- ({const tree __t = t;                                                 \
-    const int __i = (i);                                               \
-    const enum tree_code __code = code;                                        \
-    if (TREE_CODE (__t) != __code)                                     \
-      tree_check_failed (__t, __code,                                  \
-                        __FILE__, __LINE__, __FUNCTION__);             \
-    if (__i < 0 || __i >= TREE_CODE_LENGTH (__code))                   \
-      tree_operand_check_failed (__i, __code,                          \
+ ({const tree __t = (T);                                               \
+    const int __i = (I);                                               \
+    if (TREE_CODE (__t) != (CODE))                                     \
+      tree_check_failed (__t, (CODE), __FILE__, __LINE__, __FUNCTION__); \
+    if (__i < 0 || __i >= TREE_CODE_LENGTH ((CODE)))                   \
+      tree_operand_check_failed (__i, (CODE),                          \
                                 __FILE__, __LINE__, __FUNCTION__);     \
     &__t->exp.operands[__i]; }))
 
@@ -365,21 +353,22 @@ extern void tree_operand_check_failed PARAMS ((int, enum tree_code,
     
 #else /* not ENABLE_TREE_CHECKING, or not gcc */
 
-#define TREE_CHECK(t, code)            (t)
-#define TREE_CLASS_CHECK(t, code)      (t)
-#define EXPR_CHECK(t)                  (t)
-#define TREE_VEC_ELT_CHECK(t, i)       ((t)->vec.a[i])
-#define TREE_OPERAND_CHECK(t, i)       ((t)->exp.operands[i])
-#define TREE_OPERAND_CHECK_CODE(t, code, i) ((t)->exp.operands[i])
-#define TREE_RTL_OPERAND_CHECK(t, code, i)  (*(rtx *) &((t)->exp.operands[i]))
+#define TREE_CHECK(T, CODE)            (T)
+#define TREE_CLASS_CHECK(T, CODE)      (T)
+#define EXPR_CHECK(T)                  (T)
+#define TREE_VEC_ELT_CHECK(T, I)       ((T)->vec.a[I])
+#define TREE_OPERAND_CHECK(T, I)       ((T)->exp.operands[I])
+#define TREE_OPERAND_CHECK_CODE(T, CODE, I) ((T)->exp.operands[I])
+#define TREE_RTL_OPERAND_CHECK(T, CODE, I)  (*(rtx *) &((T)->exp.operands[I]))
 
 #endif
 
 #include "tree-check.h"
 
-#define TYPE_CHECK(tree)       TREE_CLASS_CHECK  (tree, 't')
-#define DECL_CHECK(tree)       TREE_CLASS_CHECK  (tree, 'd')
-#define CST_CHECK(tree)                TREE_CLASS_CHECK  (tree, 'c')
+#define TYPE_CHECK(T)          TREE_CLASS_CHECK (T, 't')
+#define DECL_CHECK(T)          TREE_CLASS_CHECK (T, 'd')
+#define CST_CHECK(T)           TREE_CLASS_CHECK (T, 'c')
+#define STMT_CHECK(T)          TREE_CLASS_CHECK (T, 's')
 
 /* In all nodes that are expressions, this is the data type of the expression.
    In POINTER_TYPE nodes, this is the type that the pointer points to.
@@ -427,6 +416,17 @@ extern void tree_operand_check_failed PARAMS ((int, enum tree_code,
             == TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (EXP, 0))))) \
     (EXP) = TREE_OPERAND (EXP, 0)
 
+/* Like STRIP_NOPS, but don't alter the TREE_TYPE main variant either.  */
+
+#define STRIP_MAIN_TYPE_NOPS(EXP)                                      \
+  while ((TREE_CODE (EXP) == NOP_EXPR                                  \
+         || TREE_CODE (EXP) == CONVERT_EXPR                            \
+         || TREE_CODE (EXP) == NON_LVALUE_EXPR)                        \
+        && TREE_OPERAND (EXP, 0) != error_mark_node                    \
+        && (TYPE_MAIN_VARIANT (TREE_TYPE (EXP))                        \
+            == TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (EXP, 0))))) \
+    (EXP) = TREE_OPERAND (EXP, 0)
+
 /* Like STRIP_NOPS, but don't alter the TREE_TYPE either.  */
 
 #define STRIP_TYPE_NOPS(EXP) \
@@ -460,56 +460,12 @@ extern void tree_operand_check_failed PARAMS ((int, enum tree_code,
    || TREE_CODE (TYPE) == UNION_TYPE || TREE_CODE (TYPE) == QUAL_UNION_TYPE \
    || TREE_CODE (TYPE) == SET_TYPE)
 
-/* Nonzero if TYPE represents an unbounded pointer or unbounded
-   reference type.  (It should be renamed to INDIRECT_TYPE_P.)  */
+/* Nonzero if TYPE represents a pointer or reference type.
+   (It should be renamed to INDIRECT_TYPE_P.)  */
 
 #define POINTER_TYPE_P(TYPE) \
   (TREE_CODE (TYPE) == POINTER_TYPE || TREE_CODE (TYPE) == REFERENCE_TYPE)
 
-/* Nonzero if TYPE represents a bounded pointer or bounded reference type.  */
-
-#define BOUNDED_INDIRECT_TYPE_P(TYPE) \
-  (TREE_CODE (TYPE) == RECORD_TYPE && TREE_TYPE (TYPE))
-
-/* Nonzero if TYPE represents a bounded pointer type.  */
-
-#define BOUNDED_POINTER_TYPE_P(TYPE) \
-  (BOUNDED_INDIRECT_TYPE_P (TYPE) \
-   && TREE_CODE (TYPE_BOUNDED_SUBTYPE (TYPE)) == POINTER_TYPE)
-
-/* Nonzero if TYPE represents a bounded reference type.  Bounded
-   reference types have two specific uses: (1) When a reference is
-   seated to a variable-length RECORD_TYPE that has an array of
-   indeterminate length as its final field.  For all other objects, it
-   is sufficient to check bounds at the time the reference is seated,
-   and assume that all future uses of the reference are safe, since
-   the address of references cannot change.  (2) When a reference
-   supertype is seated to a subtype object.  The bounds "remember"
-   the true size of the complete object, so that subsequent upcasts of
-   the address of the reference will be checked properly (is such a
-   thing valid C++?).  */
-
-#define BOUNDED_REFERENCE_TYPE_P(TYPE) \
-  (BOUNDED_INDIRECT_TYPE_P (TYPE) \
-   && TREE_CODE (TYPE_BOUNDED_SUBTYPE (TYPE)) == REFERENCE_TYPE)
-
-/* Nonzero if TYPE represents a pointer or reference type, either
-   bounded or unbounded.  */
-
-#define MAYBE_BOUNDED_INDIRECT_TYPE_P(TYPE) \
-  (POINTER_TYPE_P (TYPE) || BOUNDED_INDIRECT_TYPE_P (TYPE))
-
-/* Nonzero if TYPE represents a pointer type, either bounded or unbounded.  */
-
-#define MAYBE_BOUNDED_POINTER_TYPE_P(TYPE) \
-  (TREE_CODE (TYPE) == POINTER_TYPE || BOUNDED_POINTER_TYPE_P (TYPE))
-
-/* Nonzero if TYPE represents a reference type, either bounded or
-   unbounded.  */
-
-#define MAYBE_BOUNDED_REFERENCE_TYPE_P(TYPE) \
-  (TREE_CODE (TYPE) == REFERENCE_TYPE || BOUNDED_REFERENCE_TYPE_P (TYPE))
-
 /* Nonzero if this type is a complete type.  */
 #define COMPLETE_TYPE_P(NODE) (TYPE_SIZE (NODE) != NULL_TREE)
 
@@ -668,40 +624,6 @@ extern void tree_operand_check_failed PARAMS ((int, enum tree_code,
    In a BLOCK node, this is BLOCK_HANDLER_BLOCK.  */
 #define TREE_PROTECTED(NODE) ((NODE)->common.protected_flag)
 
-/* In a ..._TYPE node, nonzero means that the type's size and layout,
-   (or the size and layout of its arguments and/or return value in the
-   case of a FUNCTION_TYPE or METHOD_TYPE) was changed by the presence
-   of pointer bounds.  Use TYPE_BOUNDED instead of this macro when the
-   node is a type, because eventually we may make that a different
-   bit.  TYPE_BOUNDED doesn't mean that this type is a bounded indirect
-   type--use BOUNDED_POINTER_TYPE_P, BOUNDED_REFERENCE_TYPE_P,
-   BOUNDED_INDIRECT_TYPE_P to test for that.
-
-   In a FUNCTION_DECL, nonzero means that the size and layout of one
-   of its arguments and/or return value was changed by the presence of
-   pointer bounds.  This value can differ from the value of
-   TYPE_BOUNDED (TREE_TYPE (fundecl)) if the function was implicitly
-   declared, then later called with pointer args, or was declared with
-   a variable argument list and is later called with pointer values in
-   the variable argument list.
-
-   In a VAR_DECL, PARM_DECL or FIELD_DECL, TREE_BOUNDED matches the value
-   of the decl's type's BOUNDED_POINTER_TYPE_P.
-
-   In a CONSTRUCTOR or other expression, nonzero means the value is a
-   bounded pointer.  It is insufficient to determine the boundedness
-   of an expression EXP with BOUNDED_POINTER_TYPE_P (TREE_TYPE (EXP)),
-   since we allow pointer to be temporarily cast to integer for
-   rounding up to an alignment boundary in a way that preserves the
-   pointer's bounds.
-
-   In an IDENTIFIER_NODE, nonzero means that the name is prefixed with
-   BP_PREFIX (see varasm.c).  This occurs for the DECL_ASSEMBLER_NAME
-   of a function that has bounded pointer(s) for its return type and/or
-   argument type(s).  */
-
-#define TREE_BOUNDED(NODE) ((NODE)->common.bounded_flag)
-
 /* Nonzero in an IDENTIFIER_NODE if the use of the name is defined as a
    deprecated feature by __attribute__((deprecated)).  */
 #define TREE_DEPRECATED(NODE) ((NODE)->common.deprecated_flag)
@@ -802,6 +724,8 @@ struct tree_vector GTY(())
   (IDENTIFIER_NODE_CHECK (NODE)->identifier.id.len)
 #define IDENTIFIER_POINTER(NODE) \
   ((const char *) IDENTIFIER_NODE_CHECK (NODE)->identifier.id.str)
+#define IDENTIFIER_HASH_VALUE(NODE) \
+  (IDENTIFIER_NODE_CHECK (NODE)->identifier.id.hash_value)
 
 /* Translate a hash table identifier pointer to a tree_identifier
    pointer, and vice versa.  */
@@ -1010,26 +934,6 @@ struct tree_block GTY(())
    structure containing an array.  */
 #define TYPE_DEBUG_REPRESENTATION_TYPE(NODE) (TYPE_CHECK (NODE)->type.values)
 
-/* Indirect types present difficulties because they may be represented
-   as either POINTER_TYPE/REFERENCE_TYPE nodes (unbounded) or as
-   RECORD_TYPE nodes (bounded).  Bounded and unbounded pointers might
-   be logically equivalent, but physically different.  Simple
-   comparison of the main variant only tells if the types are
-   logically equivalent.  Use this predicate to compare for physical
-   equivalency.  */
-
-/* Types have the same main variant, and have the same boundedness.  */
-#define TYPE_MAIN_VARIANTS_PHYSICALLY_EQUAL_P(TYPE1, TYPE2)    \
-  (TYPE_MAIN_VARIANT (TYPE1) == TYPE_MAIN_VARIANT (TYPE2)      \
-   && TREE_CODE (TYPE1) == TREE_CODE (TYPE2))
-
-/* Return the type variant that has no qualifiers (i.e., the main variant),
-   except that the boundedness qualifier is preserved.  */
-#define TYPE_MAIN_PHYSICAL_VARIANT(TYPE)               \
-  (BOUNDED_POINTER_TYPE_P (TYPE)                       \
-   ? build_qualified_type (TYPE, TYPE_QUAL_BOUNDED)    \
-   : TYPE_MAIN_VARIANT (TYPE))
-
 /* For aggregate types, information about this type, as a base type
    for itself.  Used in a language-dependent way for types that are
    neither a RECORD_TYPE, QUAL_UNION_TYPE, nor a UNION_TYPE.  */
@@ -1101,11 +1005,6 @@ struct tree_block GTY(())
    the term.  */
 #define TYPE_RESTRICT(NODE) (TYPE_CHECK (NODE)->type.restrict_flag)
 
-/* If nonzero, this type's size and layout, (or the size and layout of
-   its arguments and/or return value in the case of a FUNCTION_TYPE or
-   METHOD_TYPE) was changed by the presence of pointer bounds.  */
-#define TYPE_BOUNDED(NODE) (TYPE_CHECK (NODE)->common.bounded_flag)
-
 /* 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.  */
@@ -1114,25 +1013,12 @@ struct tree_block GTY(())
 #define TYPE_QUAL_CONST    0x1
 #define TYPE_QUAL_VOLATILE 0x2
 #define TYPE_QUAL_RESTRICT 0x4
-#define TYPE_QUAL_BOUNDED  0x8
 
 /* 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)               \
-   | (BOUNDED_INDIRECT_TYPE_P (NODE) * TYPE_QUAL_BOUNDED))
-
-/* The set of qualifiers pertinent to an expression node.  */
-#define TREE_EXPR_QUALS(NODE)                          \
-  ((TREE_READONLY (NODE) * TYPE_QUAL_CONST)            \
-   | (TREE_THIS_VOLATILE (NODE) * TYPE_QUAL_VOLATILE)  \
-   | (TREE_BOUNDED (NODE) * TYPE_QUAL_BOUNDED))
-
-/* The set of qualifiers pertinent to a FUNCTION_DECL node.  */
-#define TREE_FUNC_QUALS(NODE)                          \
-  ((TREE_READONLY (NODE) * TYPE_QUAL_CONST)            \
-   | (TREE_THIS_VOLATILE (NODE) * TYPE_QUAL_VOLATILE))
+   | (TYPE_RESTRICT (NODE) * TYPE_QUAL_RESTRICT))
 
 /* These flags are available for each language front end to use internally.  */
 #define TYPE_LANG_FLAG_0(NODE) (TYPE_CHECK (NODE)->type.lang_flag_0)
@@ -1177,65 +1063,6 @@ struct tree_block GTY(())
    compact a way as possible.  */
 #define TYPE_PACKED(NODE) (TYPE_CHECK (NODE)->type.packed_flag)
 
-/* A bounded pointer or bounded reference type (collectively called
-   indirect types) is represented as a RECORD_TYPE node containing
-   three pointer fields whose type is the corresponding unbounded
-   POINTER_TYPE or REFERENCE_TYPE.  A RECORD_TYPE node that represents
-   a bounded indirect type differs from a normal RECORD_TYPE node in
-   that its TREE_TYPE is non-NULL and has the pointed-to type just as
-   a POINTER_TYPE or REFERENCE_TYPE node has.  The bounded RECORD_TYPE
-   nodes are stored on the same type variant chain alongside the
-   variants of the underlaying indirect types nodes.  The main variant
-   of such chains is always the unbounded type.  */
-
-/* Access the field decls of a bounded-pointer type.  */
-#define TYPE_BOUNDED_VALUE(TYPE) TYPE_FIELDS (TYPE)
-#define TYPE_BOUNDED_BASE(TYPE) TREE_CHAIN (TYPE_BOUNDED_VALUE (TYPE))
-#define TYPE_BOUNDED_EXTENT(TYPE) TREE_CHAIN (TYPE_BOUNDED_BASE (TYPE))
-
-/* Access the simple-pointer subtype of a bounded-pointer type.  */
-#define TYPE_BOUNDED_SUBTYPE(TYPE) TREE_TYPE (TYPE_BOUNDED_VALUE (TYPE))
-
-/* Find the unbounded counterpart to a type, or return TYPE if it is
-   already unbounded.  */
-#define TYPE_UNBOUNDED_VARIANT(TYPE) \
-  (BOUNDED_POINTER_TYPE_P (TYPE) ? TYPE_BOUNDED_SUBTYPE (TYPE) : (TYPE))
-
-/* This field comprises two bits, for values in the range 0..3:
-
-   depth=0 means that type is a scalar, or an aggregate that contains
-   only depth=0 types, or a function that has only depth=0 types for
-   its return value and argument types.
-
-   depth=1 means that type is a pointer to a depth=0 type, or an
-   aggregate that contains only depth=0 and depth=1 types, or a
-   function that has only depth=0 and depth=1 types for its return
-   value and argument types.
-
-   The meanings of depth=2 and depth=3 are obvious by induction.
-   Varargs functions are depth=3.  The type `va_list' is depth=3.
-
-   The purpose of measuring pointer depth of a type is to determine
-   the eligibility of a function for an automatically-generated
-   bounded-pointer thunk.  A depth=0 functions needs no thunk.  A
-   depth=1 function is eligible for an automatic thunk.  Functions
-   with depth 2 or more are too complex to get automatic thunks.
-
-   Function decls also have a pointer_depth field, since we also
-   consider the actual argument types for functions.  */
-
-#define TYPE_POINTER_DEPTH(TYPE) (TYPE_CHECK (TYPE)->type.pointer_depth)
-
-/* In a FUNCTION_TYPE node, this bit stores the value of
-   default_pointer_boundedness at the time TYPE was created.  It is
-   useful for choosing default boundedness of function arguments for
-   non-prototype function decls and for varargs/stdarg lists.  */
-#define TYPE_AMBIENT_BOUNDEDNESS(TYPE) \
-  (FUNCTION_TYPE_CHECK (TYPE)->type.transparent_union_flag)
-
-#define MAX_POINTER_DEPTH 2
-#define VA_LIST_POINTER_DEPTH 3
-
 struct die_struct;
 
 struct tree_type GTY(())
@@ -1256,7 +1083,7 @@ struct tree_type GTY(())
   unsigned transparent_union_flag : 1;
   unsigned packed_flag : 1;
   unsigned restrict_flag : 1;
-  unsigned pointer_depth : 2;
+  unsigned spare : 2;
 
   unsigned lang_flag_0 : 1;
   unsigned lang_flag_1 : 1;
@@ -1777,16 +1604,6 @@ struct tree_type GTY(())
 #define DECL_POINTER_ALIAS_SET_KNOWN_P(NODE) \
   (DECL_POINTER_ALIAS_SET (NODE) != - 1)
 
-/* The pointer_depth field comprises two bits for values in the range
-   0..3.  The value is normally equal to TYPE_POINTER_DEPTH of decl's
-   type node, but for functions it migth be greater.  For example,
-   this can happen when the function is declared to accept a parameter
-   of type void* (depth=1), but is actually called with an argument of
-   type foo** (depth=2).  The function type will get the formal
-   parameter's depth, but the function decl will get the actual
-   argument's depth.  */
-#define DECL_POINTER_DEPTH(DECL) (DECL_CHECK (DECL)->decl.pointer_depth)
-
 struct function;
 
 struct tree_decl GTY(())
@@ -1823,13 +1640,13 @@ struct tree_decl GTY(())
   ENUM_BITFIELD(built_in_class) built_in_class : 2;
   unsigned pure_flag : 1;
 
-  unsigned pointer_depth : 2;
   unsigned non_addressable : 1;
   unsigned user_align : 1;
   unsigned uninlinable : 1;
   unsigned thread_local_flag : 1;
   unsigned inlined_function_flag : 1;
-  /* One unused bit.  */
+  unsigned unused : 3;
+  /* three unused bits.  */
 
   unsigned lang_flag_0 : 1;
   unsigned lang_flag_1 : 1;
@@ -2182,10 +1999,6 @@ enum ptrmemfunc_vbit_where_t
 \f
 #define NULL_TREE (tree) NULL
 
-/* Approximate positive square root of a host double.  This is for
-   statistical reports, not code generation.  */
-extern double approx_sqrt              PARAMS ((double));
-
 extern tree decl_assembler_name                PARAMS ((tree));
 
 /* Compute the number of bytes occupied by 'node'.  This routine only
@@ -2379,11 +2192,11 @@ extern void default_register_cpp_builtins PARAMS ((struct cpp_reader *));
 
 /* Split a list of declspecs and attributes into two.  */
 
-extern void split_specs_attrs          PARAMS ((tree, tree *, tree *));
+extern void split_specs_attrs (tree, tree *, tree *);
 
 /* Strip attributes from a list of combined specs and attrs.  */
 
-extern tree strip_attrs                        PARAMS ((tree));
+extern tree strip_attrs (tree);
 
 /* Return 1 if an attribute and its arguments are valid for a decl or type.  */
 
@@ -2529,6 +2342,9 @@ extern tree pedantic_non_lvalue           PARAMS ((tree));
 
 extern tree convert                    PARAMS ((tree, tree));
 extern unsigned int expr_align         PARAMS ((tree));
+extern tree expr_first                 PARAMS ((tree));
+extern tree expr_last                  PARAMS ((tree));
+extern int expr_length                 PARAMS ((tree));
 extern tree size_in_bytes              PARAMS ((tree));
 extern HOST_WIDE_INT int_size_in_bytes PARAMS ((tree));
 extern tree bit_position               PARAMS ((tree));
@@ -2702,7 +2518,19 @@ extern int unsafe_for_reeval             PARAMS ((tree));
    Note that we only allow such expressions within simple arithmetic
    or a COND_EXPR.  */
 
-extern int contains_placeholder_p      PARAMS ((tree));
+extern bool contains_placeholder_p     PARAMS ((tree));
+
+/* This macro calls the above function but short-circuits the common
+   case of a constant to save time.  Also check for null.  */
+
+#define CONTAINS_PLACEHOLDER_P(EXP) \
+  ((EXP) != 0 && ! TREE_CONSTANT (EXP) && contains_placeholder_p (EXP))
+
+/* Return 1 if any part of the computation of TYPE involves a PLACEHOLDER_EXPR.
+   This includes size, bounds, qualifiers (for QUAL_UNION_TYPE) and field
+   positions.  */
+
+extern bool type_contains_placeholder_p        PARAMS ((tree));
 
 /* Return 1 if EXP contains any expressions that produce cleanups for an
    outer scope to deal with.  Used by fold.  */
@@ -2788,13 +2616,6 @@ extern int real_zerop PARAMS ((tree));
 \f
 /* Declare commonly used variables for tree structure.  */
 
-/* Points to the name of the input file from which the current input
-   being parsed originally came (before it went into cpp).  */
-extern const char *input_filename;
-
-/* Current line number in input file.  */
-extern int lineno;
-
 /* Nonzero means lvalues are limited to those valid in pedantic ANSI C.
    Zero means allow extended lvalues.  */
 
@@ -2816,6 +2637,10 @@ extern GTY(()) tree current_function_func_begin_label;
 
 extern int all_types_permanent;
 
+/* Exit a binding level.  This function is provided by each language
+   frontend.  */
+extern tree poplevel (int, int, int);
+
 /* Declare a predefined function.  Return the declaration.  This function is
    provided by each language frontend.  */
 extern tree builtin_function           PARAMS ((const char *, tree, int,
@@ -2952,7 +2777,6 @@ extern tree fold_builtin                          PARAMS ((tree));
 extern enum built_in_function builtin_mathfn_code      PARAMS ((tree));
 extern tree build_function_call_expr                   PARAMS ((tree, tree));
 extern tree mathfn_built_in                            PARAMS ((tree, enum built_in_function fn));
-extern tree strip_float_extensions                     PARAMS ((tree));
 
 /* In convert.c */
 extern tree strip_float_extensions                     PARAMS ((tree));
@@ -2972,6 +2796,7 @@ extern bool variably_modified_type_p    PARAMS ((tree));
 extern int tree_log2                   PARAMS ((tree));
 extern int tree_floor_log2             PARAMS ((tree));
 extern int simple_cst_equal            PARAMS ((tree, tree));
+extern unsigned int iterative_hash_expr        PARAMS ((tree, unsigned int));
 extern int compare_tree_int            PARAMS ((tree,
                                                 unsigned HOST_WIDE_INT));
 extern int type_list_equal             PARAMS ((tree, tree));
@@ -2981,7 +2806,7 @@ extern void type_hash_add         PARAMS ((unsigned int, tree));
 extern unsigned int type_hash_list     PARAMS ((tree));
 extern int simple_cst_list_equal       PARAMS ((tree, tree));
 extern void dump_tree_statistics       PARAMS ((void));
-extern void expand_function_end                PARAMS ((const char *, int, int));
+extern void expand_function_end                PARAMS ((void));
 extern void expand_function_start      PARAMS ((tree, int));
 extern void expand_pending_sizes        PARAMS ((tree));
 
@@ -3000,7 +2825,7 @@ extern void expand_main_function  PARAMS ((void));
 extern void init_dummy_function_start  PARAMS ((void));
 extern void expand_dummy_function_end  PARAMS ((void));
 extern void init_function_for_compilation      PARAMS ((void));
-extern void init_function_start                PARAMS ((tree, const char *, int));
+extern void init_function_start                PARAMS ((tree));
 extern void assign_parms               PARAMS ((tree));
 extern void put_var_into_stack         PARAMS ((tree, int));
 extern void flush_addressof            PARAMS ((tree));
@@ -3063,7 +2888,7 @@ extern bool alloca_call_p         PARAMS ((tree));
    from tree.h.  Depending on these flags, some attributes may be
    returned to be applied at a later stage (for example, to apply
    a decl attribute to the declaration rather than to its type).  */
-extern tree decl_attributes            PARAMS ((tree *, tree, int));
+extern tree decl_attributes (tree *, tree, int);
 
 /* In integrate.c */
 extern void save_for_inline            PARAMS ((tree));
@@ -3082,6 +2907,8 @@ extern int supports_one_only              PARAMS ((void));
 extern void variable_section           PARAMS ((tree, int));
 enum tls_model decl_tls_model          PARAMS ((tree));
 enum symbol_visibility decl_visibility PARAMS ((tree));
+extern void resolve_unique_section     PARAMS ((tree, int, int));
+extern void mark_referenced    PARAMS ((tree));
 
 /* In stmt.c */
 extern void emit_nop                   PARAMS ((void));
@@ -3091,6 +2918,7 @@ extern bool parse_output_constraint     PARAMS ((const char **,
                                                 bool *, bool *, bool *));
 extern void expand_asm_operands                PARAMS ((tree, tree, tree, tree, int,
                                                 const char *, int));
+extern tree resolve_asm_operand_names (tree, tree, tree);
 extern int any_pending_cleanups                PARAMS ((int));
 extern void init_stmt_for_function     PARAMS ((void));
 extern void expand_start_target_temps  PARAMS ((void));