OSDN Git Service

* cfglayout.c (scope_def, scope_forest_info, forest,
[pf3gnuchains/gcc-fork.git] / gcc / tree.h
index def0e13..eee6663 100644 (file)
@@ -85,7 +85,7 @@ enum built_in_function
 {
 #include "builtins.def"
 
 {
 #include "builtins.def"
 
-  /* Upper bound on non-language-specific builtins. */
+  /* Upper bound on non-language-specific builtins.  */
   END_BUILTINS
 };
 #undef DEF_BUILTIN
   END_BUILTINS
 };
 #undef DEF_BUILTIN
@@ -116,7 +116,7 @@ extern tree built_in_decls[(int) END_BUILTINS];
    so all nodes have these fields.
 
    See the accessor macros, defined below, for documentation of the
    so all nodes have these fields.
 
    See the accessor macros, defined below, for documentation of the
-   fields.   */
+   fields.  */
 
 struct tree_common
 {
 
 struct tree_common
 {
@@ -198,6 +198,7 @@ struct tree_common
 
        TREE_VIA_PROTECTED in
            TREE_LIST
 
        TREE_VIA_PROTECTED in
            TREE_LIST
+          TREE_VEC
        TREE_PROTECTED in
            BLOCK
           ??? unspecified nodes
        TREE_PROTECTED in
            BLOCK
           ??? unspecified nodes
@@ -352,7 +353,7 @@ extern void tree_class_check_failed PARAMS ((const tree, int,
         && TREE_OPERAND (EXP, 0) != error_mark_node            \
         && (TYPE_MODE (TREE_TYPE (EXP))                        \
             == TYPE_MODE (TREE_TYPE (TREE_OPERAND (EXP, 0))))) \
         && 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);
+    (EXP) = TREE_OPERAND (EXP, 0)
 
 /* Like STRIP_NOPS, but don't let the signedness change either.  */
 
 
 /* Like STRIP_NOPS, but don't let the signedness change either.  */
 
@@ -365,7 +366,7 @@ extern void tree_class_check_failed PARAMS ((const tree, int,
             == TYPE_MODE (TREE_TYPE (TREE_OPERAND (EXP, 0))))  \
         && (TREE_UNSIGNED (TREE_TYPE (EXP))                    \
             == TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (EXP, 0))))) \
             == TYPE_MODE (TREE_TYPE (TREE_OPERAND (EXP, 0))))  \
         && (TREE_UNSIGNED (TREE_TYPE (EXP))                    \
             == TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (EXP, 0))))) \
-    (EXP) = TREE_OPERAND (EXP, 0);
+    (EXP) = TREE_OPERAND (EXP, 0)
 
 /* Like STRIP_NOPS, but don't alter the TREE_TYPE either.  */
 
 
 /* Like STRIP_NOPS, but don't alter the TREE_TYPE either.  */
 
@@ -376,7 +377,7 @@ extern void tree_class_check_failed PARAMS ((const tree, int,
         && TREE_OPERAND (EXP, 0) != error_mark_node            \
         && (TREE_TYPE (EXP)                                    \
             == TREE_TYPE (TREE_OPERAND (EXP, 0))))             \
         && TREE_OPERAND (EXP, 0) != error_mark_node            \
         && (TREE_TYPE (EXP)                                    \
             == TREE_TYPE (TREE_OPERAND (EXP, 0))))             \
-    (EXP) = TREE_OPERAND (EXP, 0);
+    (EXP) = TREE_OPERAND (EXP, 0)
 
 /* Nonzero if TYPE represents an integral type.  Note that we do not
    include COMPLEX types here.  */
 
 /* Nonzero if TYPE represents an integral type.  Note that we do not
    include COMPLEX types here.  */
@@ -393,7 +394,7 @@ extern void tree_class_check_failed PARAMS ((const tree, int,
    || (TREE_CODE (TYPE) == COMPLEX_TYPE \
        && TREE_CODE (TREE_TYPE (TYPE)) == REAL_TYPE))
 
    || (TREE_CODE (TYPE) == COMPLEX_TYPE \
        && TREE_CODE (TREE_TYPE (TYPE)) == REAL_TYPE))
 
-/* Nonzero if TYPE represents an aggregate (multi-component) type. */
+/* Nonzero if TYPE represents an aggregate (multi-component) type.  */
 
 #define AGGREGATE_TYPE_P(TYPE) \
   (TREE_CODE (TYPE) == ARRAY_TYPE || TREE_CODE (TYPE) == RECORD_TYPE \
 
 #define AGGREGATE_TYPE_P(TYPE) \
   (TREE_CODE (TYPE) == ARRAY_TYPE || TREE_CODE (TYPE) == RECORD_TYPE \
@@ -444,7 +445,8 @@ extern void tree_class_check_failed PARAMS ((const tree, int,
 #define MAYBE_BOUNDED_POINTER_TYPE_P(TYPE) \
   (TREE_CODE (TYPE) == POINTER_TYPE || BOUNDED_POINTER_TYPE_P (TYPE))
 
 #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.  */
+/* 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))
 
 #define MAYBE_BOUNDED_REFERENCE_TYPE_P(TYPE) \
   (TREE_CODE (TYPE) == REFERENCE_TYPE || BOUNDED_REFERENCE_TYPE_P (TYPE))
@@ -457,11 +459,11 @@ extern void tree_class_check_failed PARAMS ((const tree, int,
 
 /* Nonzero if this type is complete or is cv void.  */
 #define COMPLETE_OR_VOID_TYPE_P(NODE) \
 
 /* Nonzero if this type is complete or is cv void.  */
 #define COMPLETE_OR_VOID_TYPE_P(NODE) \
-    (COMPLETE_TYPE_P (NODE) || VOID_TYPE_P (NODE))
+  (COMPLETE_TYPE_P (NODE) || VOID_TYPE_P (NODE))
 
 /* Nonzero if this type is complete or is an array with unspecified bound.  */
 #define COMPLETE_OR_UNBOUND_ARRAY_TYPE_P(NODE) \
 
 /* Nonzero if this type is complete or is an array with unspecified bound.  */
 #define COMPLETE_OR_UNBOUND_ARRAY_TYPE_P(NODE) \
-    (COMPLETE_TYPE_P (TREE_CODE (NODE) == ARRAY_TYPE ? TREE_TYPE (NODE) : NODE))
+  (COMPLETE_TYPE_P (TREE_CODE (NODE) == ARRAY_TYPE ? TREE_TYPE (NODE) : (NODE)))
 
 /* Nonzero if TYPE represents a type.  */
 
 
 /* Nonzero if TYPE represents a type.  */
 
@@ -506,7 +508,8 @@ extern void tree_class_check_failed PARAMS ((const tree, int,
 
 /* In an IDENTIFIER_NODE, this means that assemble_name was called with
    this string as an argument.  */
 
 /* In an IDENTIFIER_NODE, this means that assemble_name was called with
    this string as an argument.  */
-#define TREE_SYMBOL_REFERENCED(NODE) ((NODE)->common.static_flag)
+#define TREE_SYMBOL_REFERENCED(NODE) \
+       (IDENTIFIER_NODE_CHECK (NODE)->common.static_flag)
 
 /* In an INTEGER_CST, REAL_CST, of COMPLEX_CST, this means there was an
    overflow in folding, and no warning has been issued for this subexpression.
 
 /* In an INTEGER_CST, REAL_CST, of COMPLEX_CST, this means there was an
    overflow in folding, and no warning has been issued for this subexpression.
@@ -528,7 +531,7 @@ extern void tree_class_check_failed PARAMS ((const tree, int,
 /* Ditto, for `private' declarations.  */
 #define TREE_VIA_PRIVATE(NODE) ((NODE)->common.private_flag)
 
 /* Ditto, for `private' declarations.  */
 #define TREE_VIA_PRIVATE(NODE) ((NODE)->common.private_flag)
 
-/* Nonzero for TREE_LIST node means that the path to the
+/* Nonzero for TREE_LIST or TREE_VEC node means that the path to the
    base class is via a `protected' declaration, which preserves
    protected fields from the base class as protected.
    OVERLOADED.  */
    base class is via a `protected' declaration, which preserves
    protected fields from the base class as protected.
    OVERLOADED.  */
@@ -561,8 +564,7 @@ extern void tree_class_check_failed PARAMS ((const tree, int,
 #define TREE_READONLY(NODE) ((NODE)->common.readonly_flag)
 
 /* Non-zero if NODE is a _DECL with TREE_READONLY set.  */
 #define TREE_READONLY(NODE) ((NODE)->common.readonly_flag)
 
 /* Non-zero if NODE is a _DECL with TREE_READONLY set.  */
-#define TREE_READONLY_DECL_P(NODE) \
-  (TREE_READONLY (NODE) && DECL_P (NODE))
+#define TREE_READONLY_DECL_P(NODE) (TREE_READONLY (NODE) && DECL_P (NODE))
 
 /* Value of expression is constant.
    Always appears in all ..._CST nodes.
 
 /* Value of expression is constant.
    Always appears in all ..._CST nodes.
@@ -575,7 +577,8 @@ extern void tree_class_check_failed PARAMS ((const tree, int,
    The same bit is used in functions as DECL_BUILT_IN_NONANSI.  */
 #define TREE_UNSIGNED(NODE) ((NODE)->common.unsigned_flag)
 
    The same bit is used in functions as DECL_BUILT_IN_NONANSI.  */
 #define TREE_UNSIGNED(NODE) ((NODE)->common.unsigned_flag)
 
-#define TYPE_TRAP_SIGNED(NODE) (flag_trapv && ! TREE_UNSIGNED (NODE))
+#define TYPE_TRAP_SIGNED(NODE) \
+  (flag_trapv && ! TREE_UNSIGNED (TYPE_CHECK (NODE)))
 
 /* Nonzero in a VAR_DECL means assembler code has been written.
    Nonzero in a FUNCTION_DECL means that the function has been compiled.
 
 /* Nonzero in a VAR_DECL means assembler code has been written.
    Nonzero in a FUNCTION_DECL means that the function has been compiled.
@@ -596,6 +599,14 @@ extern void tree_class_check_failed PARAMS ((const tree, int,
    an exception.  In a CALL_EXPR, nonzero means the call cannot throw.  */
 #define TREE_NOTHROW(NODE) ((NODE)->common.nothrow_flag)
 
    an exception.  In a CALL_EXPR, nonzero means the call cannot throw.  */
 #define TREE_NOTHROW(NODE) ((NODE)->common.nothrow_flag)
 
+/* In a type, nonzero means that all objects of the type are guaranteed by the
+   language or front-end to be properly aligned, so we can indicate that a MEM
+   of this type is aligned at least to the alignment of the type, even if it
+   doesn't appear that it is.  We see this, for example, in object-oriented
+   languages where a tag field may show this is an object of a more-aligned
+   variant of the more generic type.  */
+#define TYPE_ALIGN_OK(NODE) (TYPE_CHECK (NODE)->common.nothrow_flag)
+
 /* Used in classes in C++.  */
 #define TREE_PRIVATE(NODE) ((NODE)->common.private_flag)
 /* Used in classes in C++.
 /* Used in classes in C++.  */
 #define TREE_PRIVATE(NODE) ((NODE)->common.private_flag)
 /* Used in classes in C++.
@@ -656,17 +667,17 @@ extern void tree_class_check_failed PARAMS ((const tree, int,
 #define TREE_INT_CST_HIGH(NODE) (TREE_INT_CST (NODE).high)
 
 #define INT_CST_LT(A, B)  \
 #define TREE_INT_CST_HIGH(NODE) (TREE_INT_CST (NODE).high)
 
 #define INT_CST_LT(A, B)  \
-(TREE_INT_CST_HIGH (A) < TREE_INT_CST_HIGH (B)                 \
|| (TREE_INT_CST_HIGH (A) == TREE_INT_CST_HIGH (B)            \
-     && TREE_INT_CST_LOW (A) < TREE_INT_CST_LOW (B)))
+  (TREE_INT_CST_HIGH (A) < TREE_INT_CST_HIGH (B)                       \
  || (TREE_INT_CST_HIGH (A) == TREE_INT_CST_HIGH (B)          \
+       && TREE_INT_CST_LOW (A) < TREE_INT_CST_LOW (B)))
 
 #define INT_CST_LT_UNSIGNED(A, B)  \
 
 #define INT_CST_LT_UNSIGNED(A, B)  \
-(((unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (A)       \
-  < (unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (B))    \
|| (((unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (A)   \
-      == (unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (B)) \
-     && TREE_INT_CST_LOW (A) < TREE_INT_CST_LOW (B)))
-
+  (((unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (A)     \
+    < (unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (B))  \
  || (((unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (A) \
+        == (unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (B)) \
+       && TREE_INT_CST_LOW (A) < TREE_INT_CST_LOW (B)))
 struct tree_int_cst
 {
   struct tree_common common;
 struct tree_int_cst
 {
   struct tree_common common;
@@ -687,10 +698,10 @@ struct tree_int_cst
 
 #define TREE_CST_RTL(NODE) (CST_OR_CONSTRUCTOR_CHECK (NODE)->real_cst.rtl)
 
 
 #define TREE_CST_RTL(NODE) (CST_OR_CONSTRUCTOR_CHECK (NODE)->real_cst.rtl)
 
-/* In a REAL_CST node.  */
-/* We can represent a real value as either a `double' or a string.
-   Strings don't allow for any optimization, but they do allow
-   for cross-compilation.  */
+/* In a REAL_CST node.
+
+   We can represent a real value as either a `double' or an array of
+   longs.  */
 
 #define TREE_REAL_CST(NODE) (REAL_CST_CHECK (NODE)->real_cst.real_cst)
 
 
 #define TREE_REAL_CST(NODE) (REAL_CST_CHECK (NODE)->real_cst.real_cst)
 
@@ -735,17 +746,16 @@ struct tree_complex
 /* Define fields and accessors for some special-purpose tree nodes.  */
 
 #define IDENTIFIER_LENGTH(NODE) \
 /* Define fields and accessors for some special-purpose tree nodes.  */
 
 #define IDENTIFIER_LENGTH(NODE) \
-       (IDENTIFIER_NODE_CHECK (NODE)->identifier.id.len)
+  (IDENTIFIER_NODE_CHECK (NODE)->identifier.id.len)
 #define IDENTIFIER_POINTER(NODE) \
 #define IDENTIFIER_POINTER(NODE) \
-       ((char *) IDENTIFIER_NODE_CHECK (NODE)->identifier.id.str)
+  ((char *) IDENTIFIER_NODE_CHECK (NODE)->identifier.id.str)
 
 /* Translate a hash table identifier pointer to a tree_identifier
    pointer, and vice versa.  */
 
 #define HT_IDENT_TO_GCC_IDENT(NODE) \
 
 /* Translate a hash table identifier pointer to a tree_identifier
    pointer, and vice versa.  */
 
 #define HT_IDENT_TO_GCC_IDENT(NODE) \
-       ((tree) ((char *) (NODE) - sizeof (struct tree_common)))
-#define GCC_IDENT_TO_HT_IDENT(NODE) \
-       (&((struct tree_identifier *) (NODE))->id)
+  ((tree) ((char *) (NODE) - sizeof (struct tree_common)))
+#define GCC_IDENT_TO_HT_IDENT(NODE) (&((struct tree_identifier *) (NODE))->id)
 
 struct tree_identifier
 {
 
 struct tree_identifier
 {
@@ -767,7 +777,8 @@ struct tree_list
 /* In a TREE_VEC node.  */
 #define TREE_VEC_LENGTH(NODE) (TREE_VEC_CHECK (NODE)->vec.length)
 #define TREE_VEC_ELT(NODE,I) (TREE_VEC_CHECK (NODE)->vec.a[I])
 /* In a TREE_VEC node.  */
 #define TREE_VEC_LENGTH(NODE) (TREE_VEC_CHECK (NODE)->vec.length)
 #define TREE_VEC_ELT(NODE,I) (TREE_VEC_CHECK (NODE)->vec.a[I])
-#define TREE_VEC_END(NODE) ((void) TREE_VEC_CHECK (NODE),&((NODE)->vec.a[(NODE)->vec.length]))
+#define TREE_VEC_END(NODE) \
+  ((void) TREE_VEC_CHECK (NODE), &((NODE)->vec.a[(NODE)->vec.length]))
 
 struct tree_vec
 {
 
 struct tree_vec
 {
@@ -779,52 +790,60 @@ struct tree_vec
 /* Define fields and accessors for some nodes that represent expressions.  */
 
 /* In a SAVE_EXPR node.  */
 /* Define fields and accessors for some nodes that represent expressions.  */
 
 /* In a SAVE_EXPR node.  */
-#define SAVE_EXPR_CONTEXT(NODE) TREE_OPERAND(NODE, 1)
-#define SAVE_EXPR_RTL(NODE) (*(rtx *) &EXPR_CHECK (NODE)->exp.operands[2])
-#define SAVE_EXPR_NOPLACEHOLDER(NODE) TREE_UNSIGNED (NODE)
+#define SAVE_EXPR_CONTEXT(NODE) TREE_OPERAND(SAVE_EXPR_CHECK (NODE), 1)
+#define SAVE_EXPR_RTL(NODE) (*(rtx *) &SAVE_EXPR_CHECK (NODE)->exp.operands[2])
+#define SAVE_EXPR_NOPLACEHOLDER(NODE) TREE_UNSIGNED (SAVE_EXPR_CHECK (NODE))
 /* Nonzero if the SAVE_EXPRs value should be kept, even if it occurs
    both in normal code and in a handler.  (Normally, in a handler, all
    SAVE_EXPRs are unsaved, meaning that there values are
    recalculated.)  */
 /* Nonzero if the SAVE_EXPRs value should be kept, even if it occurs
    both in normal code and in a handler.  (Normally, in a handler, all
    SAVE_EXPRs are unsaved, meaning that there values are
    recalculated.)  */
-#define SAVE_EXPR_PERSISTENT_P(NODE) TREE_ASM_WRITTEN (NODE)
+#define SAVE_EXPR_PERSISTENT_P(NODE) TREE_ASM_WRITTEN (SAVE_EXPR_CHECK (NODE))
 
 /* In a RTL_EXPR node.  */
 
 /* In a RTL_EXPR node.  */
-#define RTL_EXPR_SEQUENCE(NODE) (*(rtx *) &EXPR_CHECK (NODE)->exp.operands[0])
-#define RTL_EXPR_RTL(NODE) (*(rtx *) &EXPR_CHECK (NODE)->exp.operands[1])
+#define RTL_EXPR_SEQUENCE(NODE) \
+  (*(rtx *) &RTL_EXPR_CHECK (NODE)->exp.operands[0])
+#define RTL_EXPR_RTL(NODE) (*(rtx *) &RTL_EXPR_CHECK (NODE)->exp.operands[1])
 
 /* In a WITH_CLEANUP_EXPR node.  */
 #define WITH_CLEANUP_EXPR_RTL(NODE) \
 
 /* In a WITH_CLEANUP_EXPR node.  */
 #define WITH_CLEANUP_EXPR_RTL(NODE) \
-  (*(rtx *) &EXPR_CHECK (NODE)->exp.operands[2])
+  (*(rtx *) &WITH_CLEANUP_EXPR_CHECK (NODE)->exp.operands[2])
 
 /* In a CONSTRUCTOR node.  */
 
 /* In a CONSTRUCTOR node.  */
-#define CONSTRUCTOR_ELTS(NODE) TREE_OPERAND (NODE, 1)
+#define CONSTRUCTOR_ELTS(NODE) TREE_OPERAND (CONSTRUCTOR_CHECK (NODE), 1)
 
 /* In ordinary expression nodes.  */
 #define TREE_OPERAND(NODE, I) (EXPR_CHECK (NODE)->exp.operands[I])
 #define TREE_COMPLEXITY(NODE) (EXPR_CHECK (NODE)->exp.complexity)
 
 /* In a LABELED_BLOCK_EXPR node.  */
 
 /* In ordinary expression nodes.  */
 #define TREE_OPERAND(NODE, I) (EXPR_CHECK (NODE)->exp.operands[I])
 #define TREE_COMPLEXITY(NODE) (EXPR_CHECK (NODE)->exp.complexity)
 
 /* In a LABELED_BLOCK_EXPR node.  */
-#define LABELED_BLOCK_LABEL(NODE) TREE_OPERAND (NODE, 0)
-#define LABELED_BLOCK_BODY(NODE) TREE_OPERAND (NODE, 1)
+#define LABELED_BLOCK_LABEL(NODE) \
+  TREE_OPERAND (LABELED_BLOCK_EXPR_CHECK (NODE), 0)
+#define LABELED_BLOCK_BODY(NODE) \
+  TREE_OPERAND (LABELED_BLOCK_EXPR_CHECK (NODE), 1)
 
 /* In a EXIT_BLOCK_EXPR node.  */
 
 /* In a EXIT_BLOCK_EXPR node.  */
-#define EXIT_BLOCK_LABELED_BLOCK(NODE) TREE_OPERAND (NODE, 0)
-#define EXIT_BLOCK_RETURN(NODE) TREE_OPERAND (NODE, 1)
+#define EXIT_BLOCK_LABELED_BLOCK(NODE) \
+  TREE_OPERAND (EXIT_BLOCK_EXPR_CHECK (NODE), 0)
+#define EXIT_BLOCK_RETURN(NODE) TREE_OPERAND (EXIT_BLOCK_EXPR_CHECK (NODE), 1)
 
 /* In a LOOP_EXPR node.  */
 
 /* In a LOOP_EXPR node.  */
-#define LOOP_EXPR_BODY(NODE) TREE_OPERAND (NODE, 0)
+#define LOOP_EXPR_BODY(NODE) TREE_OPERAND (LOOP_EXPR_CHECK (NODE), 0)
 
 /* In a EXPR_WITH_FILE_LOCATION node.  */
 
 /* In a EXPR_WITH_FILE_LOCATION node.  */
-#define EXPR_WFL_NODE(NODE) TREE_OPERAND((NODE), 0)
+#define EXPR_WFL_EMIT_LINE_NOTE(NODE) \
+  (EXPR_WITH_FILE_LOCATION_CHECK (NODE)->common.public_flag)
+#define EXPR_WFL_NODE(NODE) \
+  TREE_OPERAND (EXPR_WITH_FILE_LOCATION_CHECK (NODE), 0)
+#define EXPR_WFL_FILENAME_NODE(NODE) \
+  TREE_OPERAND(EXPR_WITH_FILE_LOCATION_CHECK (NODE), 1)
 #define EXPR_WFL_FILENAME(NODE) \
 #define EXPR_WFL_FILENAME(NODE) \
-  (IDENTIFIER_POINTER (EXPR_WFL_FILENAME_NODE ((NODE))))
-#define EXPR_WFL_FILENAME_NODE(NODE) TREE_OPERAND((NODE), 1)
-#define EXPR_WFL_LINENO(NODE) (EXPR_CHECK (NODE)->exp.complexity >> 12)
-#define EXPR_WFL_COLNO(NODE) (EXPR_CHECK (NODE)->exp.complexity & 0xfff)
+  IDENTIFIER_POINTER (EXPR_WFL_FILENAME_NODE ((NODE)))
+/* ??? Java uses this in all expressions.  */
 #define EXPR_WFL_LINECOL(NODE) (EXPR_CHECK (NODE)->exp.complexity)
 #define EXPR_WFL_LINECOL(NODE) (EXPR_CHECK (NODE)->exp.complexity)
+#define EXPR_WFL_LINENO(NODE) (EXPR_WFL_LINECOL (NODE) >> 12)
+#define EXPR_WFL_COLNO(NODE) (EXPR_WFL_LINECOL (NODE) & 0xfff)
 #define EXPR_WFL_SET_LINECOL(NODE, LINE, COL) \
   (EXPR_WFL_LINECOL(NODE) = ((LINE) << 12) | ((COL) & 0xfff))
 #define EXPR_WFL_SET_LINECOL(NODE, LINE, COL) \
   (EXPR_WFL_LINECOL(NODE) = ((LINE) << 12) | ((COL) & 0xfff))
-#define EXPR_WFL_EMIT_LINE_NOTE(NODE) ((NODE)->common.public_flag)
 
 struct tree_exp
 {
 
 struct tree_exp
 {
@@ -845,7 +864,8 @@ struct tree_exp
 
 /* Nonzero means that this block is prepared to handle exceptions
    listed in the BLOCK_VARS slot.  */
 
 /* Nonzero means that this block is prepared to handle exceptions
    listed in the BLOCK_VARS slot.  */
-#define BLOCK_HANDLER_BLOCK(NODE) (BLOCK_CHECK (NODE)->block.handler_block_flag)
+#define BLOCK_HANDLER_BLOCK(NODE) \
+  (BLOCK_CHECK (NODE)->block.handler_block_flag)
 
 /* An index number for this block.  These values are not guaranteed to
    be unique across functions -- whether or not they are depends on
 
 /* An index number for this block.  These values are not guaranteed to
    be unique across functions -- whether or not they are depends on
@@ -874,10 +894,8 @@ struct tree_exp
    be null.  The list of fragments will be chained through 
    BLOCK_FRAGMENT_CHAIN from the origin.  */
 
    be null.  The list of fragments will be chained through 
    BLOCK_FRAGMENT_CHAIN from the origin.  */
 
-#define BLOCK_FRAGMENT_ORIGIN(NODE) \
-  (BLOCK_CHECK (NODE)->block.fragment_origin)
-#define BLOCK_FRAGMENT_CHAIN(NODE) \
-  (BLOCK_CHECK (NODE)->block.fragment_chain)
+#define BLOCK_FRAGMENT_ORIGIN(NODE) (BLOCK_CHECK (NODE)->block.fragment_origin)
+#define BLOCK_FRAGMENT_CHAIN(NODE) (BLOCK_CHECK (NODE)->block.fragment_chain)
 
 struct tree_block
 {
 
 struct tree_block
 {
@@ -964,8 +982,7 @@ struct tree_block
 
 /* Nonzero iff the typed-based alias set for this type has been
    calculated.  */
 
 /* Nonzero iff the typed-based alias set for this type has been
    calculated.  */
-#define TYPE_ALIAS_SET_KNOWN_P(NODE) \
-  (TYPE_CHECK (NODE)->type.alias_set != -1)
+#define TYPE_ALIAS_SET_KNOWN_P(NODE) (TYPE_CHECK (NODE)->type.alias_set != -1)
 
 /* A TREE_LIST of IDENTIFIER nodes of the attributes that apply
    to this type.  */
 
 /* A TREE_LIST of IDENTIFIER nodes of the attributes that apply
    to this type.  */
@@ -980,8 +997,7 @@ struct tree_block
 #define TYPE_USER_ALIGN(NODE) (TYPE_CHECK (NODE)->type.user_align)
 
 /* The alignment for NODE, in bytes.  */
 #define TYPE_USER_ALIGN(NODE) (TYPE_CHECK (NODE)->type.user_align)
 
 /* The alignment for NODE, in bytes.  */
-#define TYPE_ALIGN_UNIT(NODE) \
-  (TYPE_ALIGN (NODE) / BITS_PER_UNIT)
+#define TYPE_ALIGN_UNIT(NODE) (TYPE_ALIGN (NODE) / BITS_PER_UNIT)
 
 /* If your language allows you to declare types, and you want debug info
    for them, then you need to generate corresponding TYPE_DECL nodes.
 
 /* If your language allows you to declare types, and you want debug info
    for them, then you need to generate corresponding TYPE_DECL nodes.
@@ -989,8 +1005,8 @@ struct tree_block
    type node.  You then set the TYPE_STUB_DECL field of the type node
    to point back at the TYPE_DECL node.  This allows the debug routines
    to know that the two nodes represent the same type, so that we only
    type node.  You then set the TYPE_STUB_DECL field of the type node
    to point back at the TYPE_DECL node.  This allows the debug routines
    to know that the two nodes represent the same type, so that we only
-   get one debug info record for them. */
-#define TYPE_STUB_DECL(NODE) (TREE_CHAIN (NODE))
+   get one debug info record for them.  */
+#define TYPE_STUB_DECL(NODE) TREE_CHAIN (NODE)
 
 /* In a RECORD_TYPE, UNION_TYPE or QUAL_UNION_TYPE, it means the type
    has BLKmode only because it lacks the alignment requirement for
 
 /* In a RECORD_TYPE, UNION_TYPE or QUAL_UNION_TYPE, it means the type
    has BLKmode only because it lacks the alignment requirement for
@@ -1014,10 +1030,10 @@ struct tree_block
   (FUNCTION_TYPE_CHECK (NODE)->type.no_force_blk_flag)
 
 /* Nonzero in a type considered volatile as a whole.  */
   (FUNCTION_TYPE_CHECK (NODE)->type.no_force_blk_flag)
 
 /* Nonzero in a type considered volatile as a whole.  */
-#define TYPE_VOLATILE(NODE) ((NODE)->common.volatile_flag)
+#define TYPE_VOLATILE(NODE) (TYPE_CHECK (NODE)->common.volatile_flag)
 
 /* Means this type is const-qualified.  */
 
 /* Means this type is const-qualified.  */
-#define TYPE_READONLY(NODE) ((NODE)->common.readonly_flag)
+#define TYPE_READONLY(NODE) (TYPE_CHECK (NODE)->common.readonly_flag)
 
 /* If nonzero, this type is `restrict'-qualified, in the C sense of
    the term.  */
 
 /* If nonzero, this type is `restrict'-qualified, in the C sense of
    the term.  */
@@ -1067,15 +1083,18 @@ struct tree_block
 
 /* If set in an ARRAY_TYPE, indicates a string type (for languages
    that distinguish string from array of char).
 
 /* If set in an ARRAY_TYPE, indicates a string type (for languages
    that distinguish string from array of char).
-   If set in a SET_TYPE, indicates a bitstring type. */
+   If set in a SET_TYPE, indicates a bitstring type.  */
 #define TYPE_STRING_FLAG(NODE) (TYPE_CHECK (NODE)->type.string_flag)
 
 #define TYPE_STRING_FLAG(NODE) (TYPE_CHECK (NODE)->type.string_flag)
 
-/* If non-NULL, this is a upper bound of the size (in bytes) of an
-   object of the given ARRAY_TYPE.  This allows temporaries to be allocated. */
-#define TYPE_ARRAY_MAX_SIZE(ARRAY_TYPE) TYPE_MAX_VALUE (ARRAY_TYPE)
+/* If non-NULL, this is an upper bound of the size (in bytes) of an
+   object of the given ARRAY_TYPE.  This allows temporaries to be
+   allocated.  */
+#define TYPE_ARRAY_MAX_SIZE(ARRAY_TYPE) \
+  TYPE_MAX_VALUE (ARRAY_TYPE_CHECK (ARRAY_TYPE))
 
 /* For a VECTOR_TYPE, this is the number of sub-parts of the vector.  */
 
 /* For a VECTOR_TYPE, this is the number of sub-parts of the vector.  */
-#define TYPE_VECTOR_SUBPARTS(VECTOR_TYPE) (GET_MODE_NUNITS (TYPE_CHECK (VECTOR_TYPE)->type.mode))
+#define TYPE_VECTOR_SUBPARTS(VECTOR_TYPE) \
+  GET_MODE_NUNITS (VECTOR_TYPE_CHECK (VECTOR_TYPE)->type.mode)
 
   /* Indicates that objects of this type must be initialized by calling a
    function when they are created.  */
 
   /* Indicates that objects of this type must be initialized by calling a
    function when they are created.  */
@@ -1261,7 +1280,8 @@ struct tree_type
 
 /* Accessor macro to get to the Nth basetype of this basetype.  */
 #define BINFO_BASETYPE(NODE,N) TREE_VEC_ELT (BINFO_BASETYPES (NODE), (N))
 
 /* Accessor macro to get to the Nth basetype of this basetype.  */
 #define BINFO_BASETYPE(NODE,N) TREE_VEC_ELT (BINFO_BASETYPES (NODE), (N))
-#define TYPE_BINFO_BASETYPE(NODE,N) BINFO_TYPE (TREE_VEC_ELT (BINFO_BASETYPES (TYPE_BINFO (NODE)), (N)))
+#define TYPE_BINFO_BASETYPE(NODE,N) \
+  BINFO_TYPE (TREE_VEC_ELT (BINFO_BASETYPES (TYPE_BINFO (NODE)), (N)))
 
 /* For a BINFO record describing a virtual base class, i.e., one where
    TREE_VIA_VIRTUAL is set, this field assists in locating the virtual
 
 /* For a BINFO record describing a virtual base class, i.e., one where
    TREE_VIA_VIRTUAL is set, this field assists in locating the virtual
@@ -1270,12 +1290,12 @@ struct tree_type
    pointer to the virtual base; under the new ABI this field is
    instead a INTEGER_CST giving an offset into the vtable where the
    offset to the virtual base can be found.  */
    pointer to the virtual base; under the new ABI this field is
    instead a INTEGER_CST giving an offset into the vtable where the
    offset to the virtual base can be found.  */
-#define BINFO_VPTR_FIELD(NODE) TREE_VEC_ELT ((NODE), 5)
+#define BINFO_VPTR_FIELD(NODE) TREE_VEC_ELT (NODE, 5)
 
 /* The size of a base class subobject of this type.  Not all frontends
    currently allocate the space for these fields.  */
 
 /* The size of a base class subobject of this type.  Not all frontends
    currently allocate the space for these fields.  */
-#define BINFO_SIZE(NODE) TREE_VEC_ELT ((NODE), 6)
-#define BINFO_SIZE_UNIT(NODE) TREE_VEC_ELT ((NODE), 7)
+#define BINFO_SIZE(NODE) TREE_VEC_ELT (NODE, 6)
+#define BINFO_SIZE_UNIT(NODE) TREE_VEC_ELT (NODE, 7)
 #define TYPE_BINFO_SIZE(NODE) BINFO_SIZE (TYPE_BINFO (NODE))
 #define TYPE_BINFO_SIZE_UNIT(NODE) BINFO_SIZE_UNIT (TYPE_BINFO (NODE))
 
 #define TYPE_BINFO_SIZE(NODE) BINFO_SIZE (TYPE_BINFO (NODE))
 #define TYPE_BINFO_SIZE_UNIT(NODE) BINFO_SIZE_UNIT (TYPE_BINFO (NODE))
 
@@ -1296,9 +1316,11 @@ struct tree_type
 
 /* Nonzero if DECL represents a decl.  */
 #define DECL_P(DECL)   (TREE_CODE_CLASS (TREE_CODE (DECL)) == 'd')
 
 /* Nonzero if DECL represents a decl.  */
 #define DECL_P(DECL)   (TREE_CODE_CLASS (TREE_CODE (DECL)) == 'd')
+
 /* This is the name of the object as written by the user.
    It is an IDENTIFIER_NODE.  */
 #define DECL_NAME(NODE) (DECL_CHECK (NODE)->decl.name)
 /* This is the name of the object as written by the user.
    It is an IDENTIFIER_NODE.  */
 #define DECL_NAME(NODE) (DECL_CHECK (NODE)->decl.name)
+
 /* The name of the object as the assembler will see it (but before any
    translations made by ASM_OUTPUT_LABELREF).  Often this is the same
    as DECL_NAME.  It is an IDENTIFIER_NODE.  */
 /* The name of the object as the assembler will see it (but before any
    translations made by ASM_OUTPUT_LABELREF).  Often this is the same
    as DECL_NAME.  It is an IDENTIFIER_NODE.  */
@@ -1307,23 +1329,26 @@ struct tree_type
     ? (void) 0                                 \
     : (*lang_set_decl_assembler_name) (NODE)), \
    DECL_CHECK (NODE)->decl.assembler_name)
     ? (void) 0                                 \
     : (*lang_set_decl_assembler_name) (NODE)), \
    DECL_CHECK (NODE)->decl.assembler_name)
-/* Returns non-zero if the DECL_ASSEMBLER_NAME for NODE has been 
-   set.  If zero, the NODE might still have a DECL_ASSEMBLER_NAME --
-   it just hasn't been set yet.  */
+
+/* Returns non-zero if the DECL_ASSEMBLER_NAME for NODE has been set.  If zero,
+   the NODE might still have a DECL_ASSEMBLER_NAME -- it just hasn't been set
+   yet.  */
 #define DECL_ASSEMBLER_NAME_SET_P(NODE) \
   (DECL_CHECK (NODE)->decl.assembler_name != NULL_TREE)
 #define DECL_ASSEMBLER_NAME_SET_P(NODE) \
   (DECL_CHECK (NODE)->decl.assembler_name != NULL_TREE)
+
 /* Set the DECL_ASSEMBLER_NAME for NODE to NAME.  */
 #define SET_DECL_ASSEMBLER_NAME(NODE, NAME) \
   (DECL_CHECK (NODE)->decl.assembler_name = (NAME))
 /* Set the DECL_ASSEMBLER_NAME for NODE to NAME.  */
 #define SET_DECL_ASSEMBLER_NAME(NODE, NAME) \
   (DECL_CHECK (NODE)->decl.assembler_name = (NAME))
-/* Copy the DECL_ASSEMBLER_NAME from DECL1 to DECL2.  Note that if
-   DECL1's DECL_ASSEMBLER_NAME has not yet been set, using this macro
-   will not cause the DECL_ASSEMBLER_NAME of either DECL to be set.
-   In other words, the semantics of using this macro, are different
-   than saying:
+
+/* Copy the DECL_ASSEMBLER_NAME from DECL1 to DECL2.  Note that if DECL1's
+   DECL_ASSEMBLER_NAME has not yet been set, using this macro will not cause
+   the DECL_ASSEMBLER_NAME of either DECL to be set.  In other words, the
+   semantics of using this macro, are different than saying:
      
      SET_DECL_ASSEMBLER_NAME(DECL2, DECL_ASSEMBLER_NAME (DECL1))
 
    which will try to set the DECL_ASSEMBLER_NAME for DECL1.  */
      
      SET_DECL_ASSEMBLER_NAME(DECL2, DECL_ASSEMBLER_NAME (DECL1))
 
    which will try to set the DECL_ASSEMBLER_NAME for DECL1.  */
+
 #define COPY_DECL_ASSEMBLER_NAME(DECL1, DECL2)                         \
   (DECL_ASSEMBLER_NAME_SET_P (DECL1)                                   \
    ? (void) SET_DECL_ASSEMBLER_NAME (DECL2,                            \
 #define COPY_DECL_ASSEMBLER_NAME(DECL1, DECL2)                         \
   (DECL_ASSEMBLER_NAME_SET_P (DECL1)                                   \
    ? (void) SET_DECL_ASSEMBLER_NAME (DECL2,                            \
@@ -1333,6 +1358,7 @@ struct tree_type
 /* Records the section name in a section attribute.  Used to pass
    the name from decl_attributes to make_function_rtl and make_decl_rtl.  */
 #define DECL_SECTION_NAME(NODE) (DECL_CHECK (NODE)->decl.section_name)
 /* Records the section name in a section attribute.  Used to pass
    the name from decl_attributes to make_function_rtl and make_decl_rtl.  */
 #define DECL_SECTION_NAME(NODE) (DECL_CHECK (NODE)->decl.section_name)
+
 /*  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,
 /*  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,
@@ -1353,9 +1379,9 @@ struct tree_type
    if so, the type that was originally specified for it.
    TREE_TYPE may have been modified (in finish_struct).  */
 #define DECL_BIT_FIELD_TYPE(NODE) (FIELD_DECL_CHECK (NODE)->decl.result)
    if so, the type that was originally specified for it.
    TREE_TYPE may have been modified (in finish_struct).  */
 #define DECL_BIT_FIELD_TYPE(NODE) (FIELD_DECL_CHECK (NODE)->decl.result)
-/* In FUNCTION_DECL, a chain of ..._DECL nodes.  */
-/* VAR_DECL and PARM_DECL reserve the arguments slot
-   for language-specific uses.  */
+/* In FUNCTION_DECL, a chain of ..._DECL nodes.
+   VAR_DECL and PARM_DECL reserve the arguments slot for language-specific
+   uses.  */
 #define DECL_ARGUMENTS(NODE) (DECL_CHECK (NODE)->decl.arguments)
 /* This field is used to reference anything in decl.result and is meant only
    for use by the garbage collector.  */
 #define DECL_ARGUMENTS(NODE) (DECL_CHECK (NODE)->decl.arguments)
 /* This field is used to reference anything in decl.result and is meant only
    for use by the garbage collector.  */
@@ -1422,26 +1448,27 @@ struct tree_type
    ? (NODE)->decl.rtl                                  \
    : (make_decl_rtl (NODE, NULL), (NODE)->decl.rtl))
 /* Set the DECL_RTL for NODE to RTL.  */
    ? (NODE)->decl.rtl                                  \
    : (make_decl_rtl (NODE, NULL), (NODE)->decl.rtl))
 /* Set the DECL_RTL for NODE to RTL.  */
-#define SET_DECL_RTL(NODE, RTL) \
-  (DECL_CHECK (NODE)->decl.rtl = (RTL))
+#define SET_DECL_RTL(NODE, RTL) (DECL_CHECK (NODE)->decl.rtl = (RTL))
 /* Returns non-zero if the DECL_RTL for NODE has already been set.  */
 /* Returns non-zero if the DECL_RTL for NODE has already been set.  */
-#define DECL_RTL_SET_P(NODE) \
-  (DECL_CHECK (NODE)->decl.rtl != NULL)
+#define DECL_RTL_SET_P(NODE)  (DECL_CHECK (NODE)->decl.rtl != NULL)
 /* Copy the RTL from NODE1 to NODE2.  If the RTL was not set for
    NODE1, it will not be set for NODE2; this is a lazy copy.  */
 #define COPY_DECL_RTL(NODE1, NODE2) \
   (DECL_CHECK (NODE2)->decl.rtl = DECL_CHECK (NODE1)->decl.rtl)
 /* The DECL_RTL for NODE, if it is set, or NULL, if it is not set.  */
 /* Copy the RTL from NODE1 to NODE2.  If the RTL was not set for
    NODE1, it will not be set for NODE2; this is a lazy copy.  */
 #define COPY_DECL_RTL(NODE1, NODE2) \
   (DECL_CHECK (NODE2)->decl.rtl = DECL_CHECK (NODE1)->decl.rtl)
 /* The DECL_RTL for NODE, if it is set, or NULL, if it is not set.  */
-#define DECL_RTL_IF_SET(NODE) \
-  (DECL_RTL_SET_P (NODE) ? DECL_RTL (NODE) : NULL)
+#define DECL_RTL_IF_SET(NODE) (DECL_RTL_SET_P (NODE) ? DECL_RTL (NODE) : NULL)
+
 /* Holds an INSN_LIST of all of the live ranges in which the variable
    has been moved to a possibly different register.  */
 #define DECL_LIVE_RANGE_RTL(NODE) (DECL_CHECK (NODE)->decl.live_range_rtl)
 /* Holds an INSN_LIST of all of the live ranges in which the variable
    has been moved to a possibly different register.  */
 #define DECL_LIVE_RANGE_RTL(NODE) (DECL_CHECK (NODE)->decl.live_range_rtl)
+
 /* For PARM_DECL, holds an RTL for the stack slot or register
    where the data was actually passed.  */
 #define DECL_INCOMING_RTL(NODE) (PARM_DECL_CHECK (NODE)->decl.u2.r)
 /* For PARM_DECL, holds an RTL for the stack slot or register
    where the data was actually passed.  */
 #define DECL_INCOMING_RTL(NODE) (PARM_DECL_CHECK (NODE)->decl.u2.r)
+
 /* For FUNCTION_DECL, if it is inline, holds the saved insn chain.  */
 #define DECL_SAVED_INSNS(NODE) (FUNCTION_DECL_CHECK (NODE)->decl.u2.f)
 /* For FUNCTION_DECL, if it is inline, holds the saved insn chain.  */
 #define DECL_SAVED_INSNS(NODE) (FUNCTION_DECL_CHECK (NODE)->decl.u2.f)
+
 /* For FUNCTION_DECL, if it is built-in,
    this identifies which built-in operation it is.  */
 #define DECL_FUNCTION_CODE(NODE) (FUNCTION_DECL_CHECK (NODE)->decl.u1.f)
 /* For FUNCTION_DECL, if it is built-in,
    this identifies which built-in operation it is.  */
 #define DECL_FUNCTION_CODE(NODE) (FUNCTION_DECL_CHECK (NODE)->decl.u1.f)
@@ -1454,6 +1481,7 @@ struct tree_type
    to an INTEGER_CST node which is suitable for use as an index
    into the virtual function table.  */
 #define DECL_VINDEX(NODE) (DECL_CHECK (NODE)->decl.vindex)
    to an INTEGER_CST node which is suitable for use as an index
    into the virtual function table.  */
 #define DECL_VINDEX(NODE) (DECL_CHECK (NODE)->decl.vindex)
+
 /* For FIELD_DECLS, DECL_FCONTEXT is the *first* baseclass in
    which this FIELD_DECL is defined.  This information is needed when
    writing debugging information about vfield and vbase decls for C++.  */
 /* For FIELD_DECLS, DECL_FCONTEXT is the *first* baseclass in
    which this FIELD_DECL is defined.  This information is needed when
    writing debugging information about vfield and vbase decls for C++.  */
@@ -1477,7 +1505,7 @@ struct tree_type
 /* Nonzero for any sort of ..._DECL node means this decl node represents an
    inline instance of some original (abstract) decl from an inline function;
    suppress any warnings about shadowing some other variable.  FUNCTION_DECL
 /* Nonzero for any sort of ..._DECL node means this decl node represents an
    inline instance of some original (abstract) decl from an inline function;
    suppress any warnings about shadowing some other variable.  FUNCTION_DECL
-   nodes can also have their abstract origin set to themselves. */
+   nodes can also have their abstract origin set to themselves.  */
 #define DECL_FROM_INLINE(NODE) (DECL_ABSTRACT_ORIGIN (NODE) != (tree) 0 \
                                && DECL_ABSTRACT_ORIGIN (NODE) != (NODE))
 
 #define DECL_FROM_INLINE(NODE) (DECL_ABSTRACT_ORIGIN (NODE) != (tree) 0 \
                                && DECL_ABSTRACT_ORIGIN (NODE) != (NODE))
 
@@ -1495,7 +1523,8 @@ struct tree_type
 
 /* Nonzero if a _DECL means that no warnings should be generated just
    because this decl is unused.  */
 
 /* Nonzero if a _DECL means that no warnings should be generated just
    because this decl is unused.  */
-#define DECL_IN_SYSTEM_HEADER(NODE) (DECL_CHECK (NODE)->decl.in_system_header_flag)
+#define DECL_IN_SYSTEM_HEADER(NODE) \
+  (DECL_CHECK (NODE)->decl.in_system_header_flag)
 
 /* Nonzero for a given ..._DECL node means that this node should be
    put in .common, if possible.  If a DECL_INITIAL is given, and it
 
 /* Nonzero for a given ..._DECL node means that this node should be
    put in .common, if possible.  If a DECL_INITIAL is given, and it
@@ -1511,7 +1540,7 @@ struct tree_type
 #define DECL_EXTERNAL(NODE) (DECL_CHECK (NODE)->decl.external_flag)
 
 /* In a VAR_DECL for a RECORD_TYPE, sets number for non-init_priority
 #define DECL_EXTERNAL(NODE) (DECL_CHECK (NODE)->decl.external_flag)
 
 /* In a VAR_DECL for a RECORD_TYPE, sets number for non-init_priority
-   initializatons. */
+   initializatons.  */
 #define DEFAULT_INIT_PRIORITY 65535
 #define MAX_INIT_PRIORITY 65535
 #define MAX_RESERVED_INIT_PRIORITY 100
 #define DEFAULT_INIT_PRIORITY 65535
 #define MAX_INIT_PRIORITY 65535
 #define MAX_RESERVED_INIT_PRIORITY 100
@@ -1519,21 +1548,24 @@ struct tree_type
 /* In a TYPE_DECL
    nonzero means the detail info about this type is not dumped into stabs.
    Instead it will generate cross reference ('x') of names. 
 /* In a TYPE_DECL
    nonzero means the detail info about this type is not dumped into stabs.
    Instead it will generate cross reference ('x') of names. 
-   This uses the same flag as DECL_EXTERNAL. */
+   This uses the same flag as DECL_EXTERNAL.  */
 #define TYPE_DECL_SUPPRESS_DEBUG(NODE) \
 #define TYPE_DECL_SUPPRESS_DEBUG(NODE) \
-(TYPE_DECL_CHECK (NODE)->decl.external_flag)
+  (TYPE_DECL_CHECK (NODE)->decl.external_flag)
 
 /* In VAR_DECL and PARM_DECL nodes, nonzero means declared `register'.  */
 #define DECL_REGISTER(NODE) (DECL_CHECK (NODE)->decl.regdecl_flag)
 
 /* In VAR_DECL and PARM_DECL nodes, nonzero means declared `register'.  */
 #define DECL_REGISTER(NODE) (DECL_CHECK (NODE)->decl.regdecl_flag)
+
 /* 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.regdecl_flag)
 /* 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.regdecl_flag)
+
 /* In a FIELD_DECL, indicates this field should be bit-packed.  */
 #define DECL_PACKED(NODE) (FIELD_DECL_CHECK (NODE)->decl.regdecl_flag)
 /* In a FIELD_DECL, indicates this field should be bit-packed.  */
 #define DECL_PACKED(NODE) (FIELD_DECL_CHECK (NODE)->decl.regdecl_flag)
+
 /* In a FUNCTION_DECL with a non-zero DECL_CONTEXT, indicates that a
    static chain is not needed.  */
 #define DECL_NO_STATIC_CHAIN(NODE) \
 /* In a FUNCTION_DECL with a non-zero DECL_CONTEXT, indicates that a
    static chain is not needed.  */
 #define DECL_NO_STATIC_CHAIN(NODE) \
-(FUNCTION_DECL_CHECK (NODE)->decl.regdecl_flag)
+  (FUNCTION_DECL_CHECK (NODE)->decl.regdecl_flag)
 
 /* 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.
 
 /* 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.
@@ -1556,14 +1588,14 @@ struct tree_type
    be a RETURN_INIT, CTOR_INITIALIZER, or TRY_BLOCK.  */
 #define DECL_SAVED_TREE(NODE) (FUNCTION_DECL_CHECK (NODE)->decl.saved_tree)
 
    be a RETURN_INIT, CTOR_INITIALIZER, or TRY_BLOCK.  */
 #define DECL_SAVED_TREE(NODE) (FUNCTION_DECL_CHECK (NODE)->decl.saved_tree)
 
-/* List of FUNCION_DECLs inlined into this function's body.  */
+/* List of FUNCTION_DECLs inlined into this function's body.  */
 #define DECL_INLINED_FNS(NODE) (FUNCTION_DECL_CHECK (NODE)->decl.inlined_fns)
 
 /* Nonzero in a FUNCTION_DECL means this is a built-in function
    that is not specified by ansi C and that users are supposed to be allowed
    to redefine for any purpose whatever.  */
 #define DECL_BUILT_IN_NONANSI(NODE) \
 #define DECL_INLINED_FNS(NODE) (FUNCTION_DECL_CHECK (NODE)->decl.inlined_fns)
 
 /* Nonzero in a FUNCTION_DECL means this is a built-in function
    that is not specified by ansi C and that users are supposed to be allowed
    to redefine for any purpose whatever.  */
 #define DECL_BUILT_IN_NONANSI(NODE) \
-(FUNCTION_DECL_CHECK (NODE)->common.unsigned_flag)
+  (FUNCTION_DECL_CHECK (NODE)->common.unsigned_flag)
 
 /* Nonzero in a FUNCTION_DECL means this function should be treated
    as if it were a malloc, meaning it returns a pointer that is
 
 /* Nonzero in a FUNCTION_DECL means this function should be treated
    as if it were a malloc, meaning it returns a pointer that is
@@ -1577,6 +1609,7 @@ struct tree_type
 /* 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.bit_field_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.bit_field_flag)
+
 /* In a LABEL_DECL, nonzero means label was defined inside a binding
    contour that restored a stack level and which is now exited.  */
 #define DECL_TOO_LATE(NODE) (LABEL_DECL_CHECK (NODE)->decl.bit_field_flag)
 /* In a LABEL_DECL, nonzero means label was defined inside a binding
    contour that restored a stack level and which is now exited.  */
 #define DECL_TOO_LATE(NODE) (LABEL_DECL_CHECK (NODE)->decl.bit_field_flag)
@@ -1589,9 +1622,10 @@ struct tree_type
 
 /* In a FUNCTION_DECL, nonzero means a built in function.  */
 #define DECL_BUILT_IN(NODE) (DECL_BUILT_IN_CLASS (NODE) != NOT_BUILT_IN)
 
 /* In a FUNCTION_DECL, nonzero means a built in function.  */
 #define DECL_BUILT_IN(NODE) (DECL_BUILT_IN_CLASS (NODE) != NOT_BUILT_IN)
+
 /* For a builtin function, identify which part of the compiler defined it.  */
 #define DECL_BUILT_IN_CLASS(NODE) \
 /* For a builtin function, identify which part of the compiler defined it.  */
 #define DECL_BUILT_IN_CLASS(NODE) \
-(FUNCTION_DECL_CHECK (NODE)->decl.built_in_class)
+   (FUNCTION_DECL_CHECK (NODE)->decl.built_in_class)
 
 /* Used in VAR_DECLs to indicate that the variable is a vtable.
    Used in FIELD_DECLs for vtable pointers.
 
 /* Used in VAR_DECLs to indicate that the variable is a vtable.
    Used in FIELD_DECLs for vtable pointers.
@@ -1606,12 +1640,12 @@ struct tree_type
    argument should be passed in the same way that the first union
    alternative would be passed.  */
 #define DECL_TRANSPARENT_UNION(NODE) \
    argument should be passed in the same way that the first union
    alternative would be passed.  */
 #define DECL_TRANSPARENT_UNION(NODE) \
-(PARM_DECL_CHECK (NODE)->decl.transparent_union)
+  (PARM_DECL_CHECK (NODE)->decl.transparent_union)
 
 /* Used in FUNCTION_DECLs to indicate that they should be run automatically
    at the beginning or end of execution.  */
 #define DECL_STATIC_CONSTRUCTOR(NODE) \
 
 /* Used in FUNCTION_DECLs to indicate that they should be run automatically
    at the beginning or end of execution.  */
 #define DECL_STATIC_CONSTRUCTOR(NODE) \
-(FUNCTION_DECL_CHECK (NODE)->decl.static_ctor_flag)
+  (FUNCTION_DECL_CHECK (NODE)->decl.static_ctor_flag)
 
 #define DECL_STATIC_DESTRUCTOR(NODE) \
 (FUNCTION_DECL_CHECK (NODE)->decl.static_dtor_flag)
 
 #define DECL_STATIC_DESTRUCTOR(NODE) \
 (FUNCTION_DECL_CHECK (NODE)->decl.static_dtor_flag)
@@ -1640,17 +1674,12 @@ struct tree_type
 /* Used in FUNCTION_DECLs to indicate that function entry and exit should
    be instrumented with calls to support routines.  */
 #define DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT(NODE) \
 /* Used in FUNCTION_DECLs to indicate that function entry and exit should
    be instrumented with calls to support routines.  */
 #define DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT(NODE) \
-(FUNCTION_DECL_CHECK (NODE)->decl.no_instrument_function_entry_exit)
-
-/* Used in FUNCTION_DECLs to indicate that check-memory-usage should be
-   disabled in this function.  */
-#define DECL_NO_CHECK_MEMORY_USAGE(NODE) \
-(FUNCTION_DECL_CHECK (NODE)->decl.no_check_memory_usage)
+  (FUNCTION_DECL_CHECK (NODE)->decl.no_instrument_function_entry_exit)
 
 /* Used in FUNCTION_DECLs to indicate that limit-stack-* should be
    disabled in this function.  */
 #define DECL_NO_LIMIT_STACK(NODE) \
 
 /* Used in FUNCTION_DECLs to indicate that limit-stack-* should be
    disabled in this function.  */
 #define DECL_NO_LIMIT_STACK(NODE) \
-(FUNCTION_DECL_CHECK (NODE)->decl.no_limit_stack)
+  (FUNCTION_DECL_CHECK (NODE)->decl.no_limit_stack)
 
 /* Additional flags for language-specific uses.  */
 #define DECL_LANG_FLAG_0(NODE) (DECL_CHECK (NODE)->decl.lang_flag_0)
 
 /* Additional flags for language-specific uses.  */
 #define DECL_LANG_FLAG_0(NODE) (DECL_CHECK (NODE)->decl.lang_flag_0)
@@ -1722,18 +1751,17 @@ struct tree_decl
 
   unsigned non_addr_const_p : 1;
   unsigned no_instrument_function_entry_exit : 1;
 
   unsigned non_addr_const_p : 1;
   unsigned no_instrument_function_entry_exit : 1;
-  unsigned no_check_memory_usage : 1;
   unsigned comdat_flag : 1;
   unsigned malloc_flag : 1;
   unsigned no_limit_stack : 1;
   ENUM_BITFIELD(built_in_class) built_in_class : 2;
   unsigned comdat_flag : 1;
   unsigned malloc_flag : 1;
   unsigned no_limit_stack : 1;
   ENUM_BITFIELD(built_in_class) built_in_class : 2;
-
   unsigned pure_flag : 1;
   unsigned pure_flag : 1;
+
   unsigned pointer_depth : 2;
   unsigned non_addressable : 1;
   unsigned user_align : 1;
   unsigned uninlinable : 1;
   unsigned pointer_depth : 2;
   unsigned non_addressable : 1;
   unsigned user_align : 1;
   unsigned uninlinable : 1;
-  /* Two unused bits.  */
+  /* Three unused bits.  */
 
   unsigned lang_flag_0 : 1;
   unsigned lang_flag_1 : 1;
 
   unsigned lang_flag_0 : 1;
   unsigned lang_flag_1 : 1;
@@ -1860,12 +1888,23 @@ enum tree_index
 
   TI_VOID_LIST_NODE,
 
 
   TI_VOID_LIST_NODE,
 
+  TI_UV4SF_TYPE,
+  TI_UV4SI_TYPE,
+  TI_UV8HI_TYPE,
+  TI_UV8QI_TYPE,
+  TI_UV4HI_TYPE,
+  TI_UV2SI_TYPE,
+  TI_UV2SF_TYPE,
+  TI_UV16QI_TYPE,
+
   TI_V4SF_TYPE,
   TI_V4SI_TYPE,
   TI_V4SF_TYPE,
   TI_V4SI_TYPE,
+  TI_V8HI_TYPE,
   TI_V8QI_TYPE,
   TI_V4HI_TYPE,
   TI_V2SI_TYPE,
   TI_V2SF_TYPE,
   TI_V8QI_TYPE,
   TI_V4HI_TYPE,
   TI_V2SI_TYPE,
   TI_V2SF_TYPE,
+  TI_V16QI_TYPE,
 
   TI_MAIN_IDENTIFIER,
 
 
   TI_MAIN_IDENTIFIER,
 
@@ -1926,9 +1965,18 @@ extern tree global_trees[TI_MAX];
 #define main_identifier_node           global_trees[TI_MAIN_IDENTIFIER]
 #define MAIN_NAME_P(NODE) (IDENTIFIER_NODE_CHECK (NODE) == main_identifier_node)
 
 #define main_identifier_node           global_trees[TI_MAIN_IDENTIFIER]
 #define MAIN_NAME_P(NODE) (IDENTIFIER_NODE_CHECK (NODE) == main_identifier_node)
 
+#define unsigned_V16QI_type_node       global_trees[TI_UV16QI_TYPE]
+#define unsigned_V4SI_type_node                global_trees[TI_UV4SI_TYPE]
+#define unsigned_V8QI_type_node                global_trees[TI_UV8QI_TYPE]
+#define unsigned_V8HI_type_node                global_trees[TI_UV8HI_TYPE]
+#define unsigned_V4HI_type_node                global_trees[TI_UV4HI_TYPE]
+#define unsigned_V2SI_type_node                global_trees[TI_UV2SI_TYPE]
+
+#define V16QI_type_node                        global_trees[TI_V16QI_TYPE]
 #define V4SF_type_node                 global_trees[TI_V4SF_TYPE]
 #define V4SI_type_node                 global_trees[TI_V4SI_TYPE]
 #define V8QI_type_node                 global_trees[TI_V8QI_TYPE]
 #define V4SF_type_node                 global_trees[TI_V4SF_TYPE]
 #define V4SI_type_node                 global_trees[TI_V4SI_TYPE]
 #define V8QI_type_node                 global_trees[TI_V8QI_TYPE]
+#define V8HI_type_node                 global_trees[TI_V8HI_TYPE]
 #define V4HI_type_node                 global_trees[TI_V4HI_TYPE]
 #define V2SI_type_node                 global_trees[TI_V2SI_TYPE]
 #define V2SF_type_node                 global_trees[TI_V2SF_TYPE]
 #define V4HI_type_node                 global_trees[TI_V4HI_TYPE]
 #define V2SI_type_node                 global_trees[TI_V2SI_TYPE]
 #define V2SF_type_node                 global_trees[TI_V2SF_TYPE]
@@ -2089,7 +2137,7 @@ extern tree make_tree                     PARAMS ((tree, rtx));
    is ATTRIBUTE.
 
    Such modified types already made are recorded so that duplicates
    is ATTRIBUTE.
 
    Such modified types already made are recorded so that duplicates
-   are not made. */
+   are not made.  */
 
 extern tree build_type_attribute_variant PARAMS ((tree, tree));
 extern tree build_decl_attribute_variant PARAMS ((tree, tree));
 
 extern tree build_type_attribute_variant PARAMS ((tree, tree));
 extern tree build_decl_attribute_variant PARAMS ((tree, tree));
@@ -2099,12 +2147,12 @@ struct attribute_spec
 {
   /* The name of the attribute (without any leading or trailing __),
      or NULL to mark the end of a table of attributes.  */
 {
   /* The name of the attribute (without any leading or trailing __),
      or NULL to mark the end of a table of attributes.  */
-  const char *name;
+  const char *const name;
   /* The minimum length of the list of arguments of the attribute.  */
   /* The minimum length of the list of arguments of the attribute.  */
-  int min_length;
+  const int min_length;
   /* The maximum length of the list of arguments of the attribute
      (-1 for no maximum).  */
   /* The maximum length of the list of arguments of the attribute
      (-1 for no maximum).  */
-  int max_length;
+  const int max_length;
   /* Whether this attribute requires a DECL.  If it does, it will be passed
      from types of DECLs, function return types and array element types to
      the DECLs, function types and array types respectively; but when
   /* Whether this attribute requires a DECL.  If it does, it will be passed
      from types of DECLs, function return types and array element types to
      the DECLs, function types and array types respectively; but when
@@ -2112,15 +2160,15 @@ struct attribute_spec
      a warning.  (If greater control is desired for a given attribute,
      this should be false, and the flags argument to the handler may be
      used to gain greater control in that case.)  */
      a warning.  (If greater control is desired for a given attribute,
      this should be false, and the flags argument to the handler may be
      used to gain greater control in that case.)  */
-  bool decl_required;
+  const bool decl_required;
   /* Whether this attribute requires a type.  If it does, it will be passed
      from a DECL to the type of that DECL.  */
   /* Whether this attribute requires a type.  If it does, it will be passed
      from a DECL to the type of that DECL.  */
-  bool type_required;
+  const bool type_required;
   /* Whether this attribute requires a function (or method) type.  If it does,
      it will be passed from a function pointer type to the target type,
      and from a function return type (which is not itself a function
      pointer type) to the function type.  */
   /* Whether this attribute requires a function (or method) type.  If it does,
      it will be passed from a function pointer type to the target type,
      and from a function return type (which is not itself a function
      pointer type) to the function type.  */
-  bool function_type_required;
+  const bool function_type_required;
   /* Function to handle this attribute.  NODE points to the node to which
      the attribute is to be applied.  If a DECL, it should be modified in
      place; if a TYPE, a copy should be created.  NAME is the name of the
   /* Function to handle this attribute.  NODE points to the node to which
      the attribute is to be applied.  If a DECL, it should be modified in
      place; if a TYPE, a copy should be created.  NAME is the name of the
@@ -2135,8 +2183,8 @@ struct attribute_spec
      otherwise the return value should be NULL_TREE.  This pointer may be
      NULL if no special handling is required beyond the checks implied
      by the rest of this structure.  */
      otherwise the return value should be NULL_TREE.  This pointer may be
      NULL if no special handling is required beyond the checks implied
      by the rest of this structure.  */
-  tree (*handler) PARAMS ((tree *node, tree name, tree args,
-                          int flags, bool *no_add_attrs));
+  tree (*const handler) PARAMS ((tree *node, tree name, tree args,
+                                int flags, bool *no_add_attrs));
 };
 
 extern const struct attribute_spec default_target_attribute_table[];
 };
 
 extern const struct attribute_spec default_target_attribute_table[];
@@ -2331,8 +2379,8 @@ extern HOST_WIDE_INT int_byte_position    PARAMS ((tree));
 
 enum size_type_kind
 {
 
 enum size_type_kind
 {
-  SIZETYPE,            /* Normal representation of sizes in bytes. */
-  SSIZETYPE,           /* Signed representation of sizes in bytes. */
+  SIZETYPE,            /* Normal representation of sizes in bytes.  */
+  SSIZETYPE,           /* Signed representation of sizes in bytes.  */
   USIZETYPE,           /* Unsigned representation of sizes in bytes.  */
   BITSIZETYPE,         /* Normal representation of sizes in bits.  */
   SBITSIZETYPE,                /* Signed representation of sizes in bits.  */
   USIZETYPE,           /* Unsigned representation of sizes in bytes.  */
   BITSIZETYPE,         /* Normal representation of sizes in bits.  */
   SBITSIZETYPE,                /* Signed representation of sizes in bits.  */
@@ -2374,10 +2422,10 @@ extern void put_pending_sizes           PARAMS ((tree));
    + (BITS_PER_UNIT > 8) + (BITS_PER_UNIT > 16) + (BITS_PER_UNIT > 32) \
    + (BITS_PER_UNIT > 64) + (BITS_PER_UNIT > 128) + (BITS_PER_UNIT > 256))
 
    + (BITS_PER_UNIT > 8) + (BITS_PER_UNIT > 16) + (BITS_PER_UNIT > 32) \
    + (BITS_PER_UNIT > 64) + (BITS_PER_UNIT > 128) + (BITS_PER_UNIT > 256))
 
-/* If nonzero, an upper limit on alignment of structure fields, in bits. */
+/* If nonzero, an upper limit on alignment of structure fields, in bits.  */
 extern unsigned int maximum_field_alignment;
 
 extern unsigned int maximum_field_alignment;
 
-/* If non-zero, the alignment of a bitstring or (power-)set value, in bits. */
+/* If non-zero, the alignment of a bitstring or (power-)set value, in bits.  */
 extern unsigned int set_alignment;
 
 /* Concatenate two lists (chains of TREE_LIST nodes) X and Y
 extern unsigned int set_alignment;
 
 /* Concatenate two lists (chains of TREE_LIST nodes) X and Y
@@ -2573,7 +2621,11 @@ extern tree maybe_build_cleanup          PARAMS ((tree));
 extern tree get_inner_reference                PARAMS ((tree, HOST_WIDE_INT *,
                                                 HOST_WIDE_INT *, tree *,
                                                 enum machine_mode *, int *,
 extern tree get_inner_reference                PARAMS ((tree, HOST_WIDE_INT *,
                                                 HOST_WIDE_INT *, tree *,
                                                 enum machine_mode *, int *,
-                                                int *, unsigned int *));
+                                                int *));
+
+/* Return 1 if T is an expression that get_inner_reference handles.  */
+
+extern int handled_component_p         PARAMS ((tree));
 
 /* Given a DECL or TYPE, return the scope in which it was declared, or
    NUL_TREE if there is no containing scope.  */
 
 /* Given a DECL or TYPE, return the scope in which it was declared, or
    NUL_TREE if there is no containing scope.  */
@@ -2617,7 +2669,7 @@ extern int pedantic_lvalues;
 
 extern int immediate_size_expand;
 
 
 extern int immediate_size_expand;
 
-/* Points to the FUNCTION_DECL of the function whose body we are reading. */
+/* Points to the FUNCTION_DECL of the function whose body we are reading.  */
 
 extern tree current_function_decl;
 
 
 extern tree current_function_decl;
 
@@ -2643,11 +2695,6 @@ extern const char *(*decl_printable_name)        PARAMS ((tree, int));
 
 extern void (*incomplete_decl_finalize_hook)   PARAMS ((tree));
 
 
 extern void (*incomplete_decl_finalize_hook)   PARAMS ((tree));
 
-extern const char *init_parse                  PARAMS ((const char *));
-extern void finish_parse                       PARAMS ((void));
-
-extern const char * const language_string;
-
 /* Declare a predefined function.  Return the declaration.  This function is
    provided by each language frontend.  */
 extern tree builtin_function                   PARAMS ((const char *, tree, 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,
@@ -2773,14 +2820,6 @@ extern tree fold_builtin         PARAMS ((tree));
 \f
 /* The language front-end must define these functions.  */
 
 \f
 /* The language front-end must define these functions.  */
 
-/* Function of no arguments for initializing lexical scanning.  */
-extern void init_lex                           PARAMS ((void));
-/* Function of no arguments for initializing the symbol table.  */
-extern void init_decl_processing               PARAMS ((void));
-
-/* Function to identify which front-end produced the output file. */
-extern const char *lang_identify                       PARAMS ((void));
-
 /* Function to replace the DECL_LANG_SPECIFIC field of a DECL with a copy.  */
 extern void copy_lang_decl                     PARAMS ((tree));
 
 /* Function to replace the DECL_LANG_SPECIFIC field of a DECL with a copy.  */
 extern void copy_lang_decl                     PARAMS ((tree));
 
@@ -2818,9 +2857,6 @@ extern int alias_sets_conflict_p          PARAMS ((HOST_WIDE_INT,
 extern int readonly_fields_p                   PARAMS ((tree));
 extern int objects_must_conflict_p             PARAMS ((tree, tree));
 
 extern int readonly_fields_p                   PARAMS ((tree));
 extern int objects_must_conflict_p             PARAMS ((tree, tree));
 
-/* In c-common.c */
-extern HOST_WIDE_INT lang_get_alias_set                PARAMS ((tree));
-
 /* Set the DECL_ASSEMBLER_NAME for a node.  If it is the sort of thing
    that the assembler should talk about, set DECL_ASSEMBLER_NAME to an
    appropriate IDENTIFIER_NODE.  Otherwise, set it to the
 /* Set the DECL_ASSEMBLER_NAME for a node.  If it is the sort of thing
    that the assembler should talk about, set DECL_ASSEMBLER_NAME to an
    appropriate IDENTIFIER_NODE.  Otherwise, set it to the
@@ -2832,7 +2868,6 @@ struct obstack;
 
 /* In tree.c */
 extern int really_constant_p           PARAMS ((tree));
 
 /* In tree.c */
 extern int really_constant_p           PARAMS ((tree));
-extern void set_identifier_size                PARAMS ((int));
 extern int int_fits_type_p             PARAMS ((tree, tree));
 extern int tree_log2                   PARAMS ((tree));
 extern int tree_floor_log2             PARAMS ((tree));
 extern int int_fits_type_p             PARAMS ((tree, tree));
 extern int tree_log2                   PARAMS ((tree));
 extern int tree_floor_log2             PARAMS ((tree));
@@ -2963,13 +2998,7 @@ extern int lang_attribute_common;
 
 extern int mark_addressable            PARAMS ((tree));
 extern void incomplete_type_error      PARAMS ((tree, tree));
 
 extern int mark_addressable            PARAMS ((tree));
 extern void incomplete_type_error      PARAMS ((tree, tree));
-extern void print_lang_statistics      PARAMS ((void));
 extern tree truthvalue_conversion      PARAMS ((tree));
 extern tree truthvalue_conversion      PARAMS ((tree));
-#ifdef BUFSIZ
-extern void print_lang_decl            PARAMS ((FILE *, tree, int));
-extern void print_lang_type            PARAMS ((FILE *, tree, int));
-extern void print_lang_identifier      PARAMS ((FILE *, tree, int));
-#endif
 extern int global_bindings_p           PARAMS ((void));
 extern void insert_block               PARAMS ((tree));
 
 extern int global_bindings_p           PARAMS ((void));
 extern void insert_block               PARAMS ((tree));
 
@@ -2979,9 +3008,6 @@ extern void set_decl_abstract_flags       PARAMS ((tree, int));
 extern void output_inline_function     PARAMS ((tree));
 extern void set_decl_origin_self       PARAMS ((tree));
 
 extern void output_inline_function     PARAMS ((tree));
 extern void set_decl_origin_self       PARAMS ((tree));
 
-/* In front end.  */
-extern void set_yydebug                        PARAMS ((int));
-
 /* In stor-layout.c */
 extern void fixup_signed_type          PARAMS ((tree));
 extern void internal_reference_types   PARAMS ((void));
 /* In stor-layout.c */
 extern void fixup_signed_type          PARAMS ((tree));
 extern void internal_reference_types   PARAMS ((void));
@@ -3029,10 +3055,6 @@ extern tree case_index_expr_type PARAMS ((void));
 extern HOST_WIDE_INT all_cases_count   PARAMS ((tree, int *));
 extern void check_for_full_enumeration_handling PARAMS ((tree));
 extern void declare_nonlocal_label     PARAMS ((tree));
 extern HOST_WIDE_INT all_cases_count   PARAMS ((tree, int *));
 extern void check_for_full_enumeration_handling PARAMS ((tree));
 extern void declare_nonlocal_label     PARAMS ((tree));
-#ifdef BUFSIZ
-extern void lang_print_xnode           PARAMS ((FILE *, tree, int));
-#endif
-
 
 /* If KIND=='I', return a suitable global initializer (constructor) name.
    If KIND=='D', return a suitable global clean-up (destructor) name.  */
 
 /* If KIND=='I', return a suitable global initializer (constructor) name.
    If KIND=='D', return a suitable global clean-up (destructor) name.  */
@@ -3073,6 +3095,37 @@ extern void dwarf2out_return_reg PARAMS ((const char *, unsigned));
 
 typedef tree (*walk_tree_fn)           PARAMS ((tree *, int *, void *));
 
 
 typedef tree (*walk_tree_fn)           PARAMS ((tree *, int *, void *));
 
+/* In tree-dump.c */
+
+/* Different tree dump places.  When you add new tree dump places,
+   extend the DUMP_FILES array in tree-dump.c */
+enum tree_dump_index
+{
+  TDI_all,                     /* dump the whole translation unit */
+  TDI_class,                   /* dump class hierarchy */
+  TDI_original,                        /* dump each function before optimizing it */
+  TDI_optimized,               /* dump each function after optimizing it */
+  TDI_inlined,                 /* dump each function after inlining
+                                  within it.  */
+  TDI_end
+};
+
+/* Bit masks to control tree dumping. Not all values are applicable to
+   all tree dumps. Add new ones at the end. When you define new
+   values, extend the DUMP_OPTIONS array in tree-dump.c */
+#define TDF_ADDRESS    (1 << 0)        /* dump node addresses */
+#define TDF_SLIM       (1 << 1)        /* don't go wild following links */
+
+typedef struct dump_info *dump_info_p;
+
+extern int dump_flag                   PARAMS ((dump_info_p, int, tree));
+extern int dump_enabled_p              PARAMS ((enum tree_dump_index));
+extern FILE *dump_begin                        PARAMS ((enum tree_dump_index, int *));
+extern void dump_end                   PARAMS ((enum tree_dump_index, FILE *));
+extern void dump_node                  PARAMS ((tree, int, FILE *));
+extern int dump_switch_p                PARAMS ((const char *));
+extern const char *dump_flag_name      PARAMS ((enum tree_dump_index));
+
 \f
 /* Redefine abort to report an internal error w/o coredump, and
    reporting the location of the error in the source file.  This logic
 \f
 /* Redefine abort to report an internal error w/o coredump, and
    reporting the location of the error in the source file.  This logic