OSDN Git Service

ch:
[pf3gnuchains/gcc-fork.git] / gcc / tree.h
index 13d079a..c00fafd 100644 (file)
@@ -96,6 +96,9 @@ enum built_in_function
 
 /* Names for the above.  */
 extern const char *const built_in_names[(int) END_BUILTINS];
+
+/* An array of _DECL trees for the above.  */
+extern union tree_node *built_in_decls[(int) END_BUILTINS];
 \f
 /* The definition of tree nodes fills the next several pages.  */
 
@@ -161,8 +164,8 @@ struct tree_common
    addressable_flag:
 
        TREE_ADDRESSABLE in
-          VAR_DECL, FUNCTION_DECL, CONSTRUCTOR, LABEL_DECL, ..._TYPE
-          IDENTIFIER_NODE
+          VAR_DECL, FUNCTION_DECL, FIELD_DECL, CONSTRUCTOR, LABEL_DECL,
+          ..._TYPE, IDENTIFIER_NODE
 
    static_flag:
 
@@ -219,8 +222,6 @@ struct tree_common
 
        TREE_READONLY in
            all expressions
-       ITERATOR_BOUND_P in
-           VAR_DECL if iterator (C)
        TYPE_READONLY in
            ..._TYPE
 
@@ -281,14 +282,12 @@ struct tree_common
 #define TREE_CHECK(t, code) __extension__                              \
 ({  const tree __t = t;                                                        \
     if (TREE_CODE(__t) != (code))                                      \
-      tree_check_failed (__t, code, __FILE__,                          \
-                        __LINE__, __PRETTY_FUNCTION__);                \
+      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__, __PRETTY_FUNCTION__);          \
+      tree_class_check_failed (__t, class, __FILE__, __LINE__, __FUNCTION__); \
     __t; })
 
 /* These checks have to be special cased.  */
@@ -296,23 +295,21 @@ struct tree_common
 ({  const tree __t = t;                                                        \
     enum tree_code __c = TREE_CODE(__t);                               \
     if (__c != CONSTRUCTOR && TREE_CODE_CLASS(__c) != 'c')             \
-      tree_check_failed (__t, CONSTRUCTOR, __FILE__,                   \
-                        __LINE__, __PRETTY_FUNCTION__);                \
+      tree_check_failed (__t, CONSTRUCTOR, __FILE__, __LINE__, __FUNCTION__); \
     __t; })
 #define EXPR_CHECK(t) __extension__                                    \
 ({  const tree __t = t;                                                        \
     char __c = TREE_CODE_CLASS(TREE_CODE(__t));                                \
     if (__c != 'r' && __c != 's' && __c != '<'                         \
        && __c != '1' && __c != '2' && __c != 'e')                      \
-      tree_class_check_failed(__t, 'e', __FILE__,                      \
-                             __LINE__, __PRETTY_FUNCTION__);           \
+      tree_class_check_failed(__t, 'e', __FILE__, __LINE__, __FUNCTION__); \
     __t; })
 
 extern void tree_check_failed PARAMS ((const tree, enum tree_code,
-                                    const char *, int, const char *))
+                                      const char *, int, const char *))
     ATTRIBUTE_NORETURN;
-extern void tree_class_check_failed PARAMS ((const tree, char,
-                                          const char *, int, const char *))
+extern void tree_class_check_failed PARAMS ((const tree, int,
+                                            const char *, int, const char *))
     ATTRIBUTE_NORETURN;
 
 #else /* not ENABLE_TREE_CHECKING, or not gcc */
@@ -332,7 +329,8 @@ extern void tree_class_check_failed PARAMS ((const tree, char,
 
 /* 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.
-   In ARRAY_TYPE nodes, this is the type of the elements.  */
+   In ARRAY_TYPE nodes, this is the type of the elements.
+   In VECTOR_TYPE nodes, this is the type of the elements.  */
 #define TREE_TYPE(NODE) ((NODE)->common.type)
 
 /* Nodes are chained together for many purposes.
@@ -349,10 +347,11 @@ extern void tree_class_check_failed PARAMS ((const tree, char,
 /* Given an expression as a tree, strip any NON_LVALUE_EXPRs and NOP_EXPRs
    that don't change the machine mode.  */
 
-#define STRIP_NOPS(EXP) \
+#define STRIP_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_MODE (TREE_TYPE (EXP))                        \
             == TYPE_MODE (TREE_TYPE (TREE_OPERAND (EXP, 0))))) \
     (EXP) = TREE_OPERAND (EXP, 0);
@@ -363,6 +362,7 @@ extern void tree_class_check_failed PARAMS ((const tree, char,
   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_MODE (TREE_TYPE (EXP))                        \
             == TYPE_MODE (TREE_TYPE (TREE_OPERAND (EXP, 0))))  \
         && (TREE_UNSIGNED (TREE_TYPE (EXP))                    \
@@ -375,6 +375,7 @@ extern void tree_class_check_failed PARAMS ((const tree, char,
   while ((TREE_CODE (EXP) == NOP_EXPR                          \
          || TREE_CODE (EXP) == CONVERT_EXPR                    \
          || TREE_CODE (EXP) == NON_LVALUE_EXPR)                \
+        && TREE_OPERAND (EXP, 0) != error_mark_node            \
         && (TREE_TYPE (EXP)                                    \
             == TREE_TYPE (TREE_OPERAND (EXP, 0))))             \
     (EXP) = TREE_OPERAND (EXP, 0);
@@ -453,9 +454,12 @@ extern void tree_class_check_failed PARAMS ((const tree, char,
 /* Nonzero if this type is a complete type.  */
 #define COMPLETE_TYPE_P(NODE) (TYPE_SIZE (NODE) != NULL_TREE)
 
+/* Nonzero if this type is the (possibly qualified) void type.  */
+#define VOID_TYPE_P(NODE) (TREE_CODE (NODE) == VOID_TYPE)
+
 /* Nonzero if this type is complete or is cv void.  */
 #define COMPLETE_OR_VOID_TYPE_P(NODE) \
-    (COMPLETE_TYPE_P (NODE) || TREE_CODE (NODE) == VOID_TYPE)
+    (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) \
@@ -471,6 +475,9 @@ extern void tree_class_check_failed PARAMS ((const tree, char,
    So it cannot be in a register.
    In a FUNCTION_DECL, nonzero means its address is needed.
    So it must be compiled even if it is an inline function.
+   In a FIELD_DECL node, it means that the programmer is permitted to
+   construct the address of this field.  This is used for aliasing
+   purposes: see record_component_aliases.
    In CONSTRUCTOR nodes, it means object constructed must be in memory.
    In LABEL_DECL nodes, it means a goto for this label has been seen 
    from a place outside all binding contours that restore stack levels.
@@ -651,8 +658,9 @@ extern void tree_class_check_failed PARAMS ((const tree, char,
    If the data type is signed, the value is sign-extended to 2 words
    even though not all of them may really be in use.
    In an unsigned constant shorter than 2 words, the extra bits are 0.  */
-#define TREE_INT_CST_LOW(NODE) (INTEGER_CST_CHECK (NODE)->int_cst.int_cst_low)
-#define TREE_INT_CST_HIGH(NODE) (INTEGER_CST_CHECK (NODE)->int_cst.int_cst_high)
+#define TREE_INT_CST(NODE) (INTEGER_CST_CHECK (NODE)->int_cst.int_cst)
+#define TREE_INT_CST_LOW(NODE) (TREE_INT_CST (NODE).low)
+#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)                 \
@@ -668,11 +676,16 @@ extern void tree_class_check_failed PARAMS ((const tree, char,
 
 struct tree_int_cst
 {
-  char common[sizeof (struct tree_common)];
+  struct tree_common common;
   struct rtx_def *rtl; /* acts as link to register transfer language
                           (rtl) info */
-  unsigned HOST_WIDE_INT int_cst_low;
-  HOST_WIDE_INT int_cst_high;
+  /* A sub-struct is necessary here because the function `const_hash'
+     wants to scan both words as a unit and taking the address of the
+     sub-struct yields the properly inclusive bounded pointer.  */
+  struct {
+    unsigned HOST_WIDE_INT low;
+    HOST_WIDE_INT high;
+  } int_cst;
 };
 
 /* In REAL_CST, STRING_CST, COMPLEX_CST nodes, and CONSTRUCTOR nodes,
@@ -692,7 +705,7 @@ struct tree_int_cst
 
 struct tree_real_cst
 {
-  char common[sizeof (struct tree_common)];
+  struct tree_common common;
   struct rtx_def *rtl; /* acts as link to register transfer language
                                   (rtl) info */
   REAL_VALUE_TYPE real_cst;
@@ -704,7 +717,7 @@ struct tree_real_cst
 
 struct tree_string
 {
-  char common[sizeof (struct tree_common)];
+  struct tree_common common;
   struct rtx_def *rtl; /* acts as link to register transfer language
                                   (rtl) info */
   int length;
@@ -717,7 +730,7 @@ struct tree_string
 
 struct tree_complex
 {
-  char common[sizeof (struct tree_common)];
+  struct tree_common common;
   struct rtx_def *rtl; /* acts as link to register transfer language
                                   (rtl) info */
   union tree_node *real;
@@ -731,9 +744,9 @@ struct tree_complex
 
 struct tree_identifier
 {
-  char common[sizeof (struct tree_common)];
+  struct tree_common common;
   int length;
-  char *pointer;
+  const char *pointer;
 };
 
 /* In a TREE_LIST node.  */
@@ -742,7 +755,7 @@ struct tree_identifier
 
 struct tree_list
 {
-  char common[sizeof (struct tree_common)];
+  struct tree_common common;
   union tree_node *purpose;
   union tree_node *value;
 };
@@ -754,7 +767,7 @@ struct tree_list
 
 struct tree_vec
 {
-  char common[sizeof (struct tree_common)];
+  struct tree_common common;
   int length;
   union tree_node *a[1];
 };
@@ -810,7 +823,7 @@ struct tree_vec
 
 struct tree_exp
 {
-  char common[sizeof (struct tree_common)];
+  struct tree_common common;
   int complexity;
   union tree_node *operands[1];
 };
@@ -836,7 +849,7 @@ struct tree_exp
 
 struct tree_block
 {
-  char common[sizeof (struct tree_common)];
+  struct tree_common common;
 
   unsigned handler_block_flag : 1;
   unsigned abstract_flag : 1;
@@ -880,6 +893,11 @@ struct tree_block
 #define TYPE_OBSTACK(NODE) (TYPE_CHECK (NODE)->type.obstack)
 #define TYPE_LANG_SPECIFIC(NODE) (TYPE_CHECK (NODE)->type.lang_specific)
 
+/* For a VECTOR_TYPE node, this describes a different type which is emitted
+   in the debugging output.  We use this to describe a vector as a
+   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
@@ -925,6 +943,10 @@ struct tree_block
    The value is an int, measured in bits.  */
 #define TYPE_ALIGN(NODE) (TYPE_CHECK (NODE)->type.align)
 
+/* 1 if the alignment for this type was requested by "aligned" attribute,
+   0 if it is the default for this type.  */
+#define TYPE_USER_ALIGN(NODE) (TYPE_CHECK (NODE)->type.user_align)
+
 /* The alignment for NODE, in bytes.  */
 #define TYPE_ALIGN_UNIT(NODE) \
   (TYPE_ALIGN (NODE) / BITS_PER_UNIT)
@@ -939,7 +961,13 @@ struct tree_block
 /* In an INTEGER_TYPE, it means the type represents a size.  We use this
    both for validity checking and to permit optimziations that are unsafe
    for other types.  */
-#define TYPE_IS_SIZETYPE(NODE) (TYPE_CHECK (NODE)->type.no_force_blk_flag)
+#define TYPE_IS_SIZETYPE(NODE) \
+  (INTEGER_TYPE_CHECK (NODE)->type.no_force_blk_flag)
+
+/* In a FUNCTION_TYPE, indicates that the function returns with the stack
+   pointer depressed.  */
+#define TYPE_RETURNS_STACK_DEPRESSED(NODE) \
+  (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)
@@ -1002,13 +1030,23 @@ struct tree_block
    object of the given ARRAY_TYPE.  This allows temporaries to be allocated. */
 #define TYPE_ARRAY_MAX_SIZE(ARRAY_TYPE) TYPE_MAX_VALUE (ARRAY_TYPE)
 
-/* Indicates that objects of this type must be initialized by calling a
+/* 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))
+
+  /* Indicates that objects of this type must be initialized by calling a
    function when they are created.  */
-#define TYPE_NEEDS_CONSTRUCTING(NODE) (TYPE_CHECK (NODE)->type.needs_constructing_flag)
+#define TYPE_NEEDS_CONSTRUCTING(NODE) \
+  (TYPE_CHECK (NODE)->type.needs_constructing_flag)
 
 /* Indicates that objects of this type (a UNION_TYPE), should be passed
    the same way that the first union alternative would be passed.  */
-#define TYPE_TRANSPARENT_UNION(NODE) (TYPE_CHECK (NODE)->type.transparent_union_flag)
+#define TYPE_TRANSPARENT_UNION(NODE)  \
+  (UNION_TYPE_CHECK (NODE)->type.transparent_union_flag)
+
+/* For an ARRAY_TYPE, indicates that it is not permitted to
+   take the address of a component of the type.  */
+#define TYPE_NONALIASED_COMPONENT(NODE) \
+  (ARRAY_TYPE_CHECK (NODE)->type.transparent_union_flag)
 
 /* Indicated that objects of this type should be laid out in as
    compact a way as possible.  */
@@ -1067,15 +1105,15 @@ struct tree_block
    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) (TYPE_CHECK (TYPE)->type.transparent_union_flag)
+#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 tree_type
 {
-  char common[sizeof (struct tree_common)];
+  struct tree_common common;
   union tree_node *values;
   union tree_node *size;
   union tree_node *size_unit;
@@ -1100,6 +1138,7 @@ struct tree_type
   unsigned lang_flag_4 : 1;
   unsigned lang_flag_5 : 1;
   unsigned lang_flag_6 : 1;
+  unsigned user_align : 1;
 
   unsigned int align;
   union tree_node *pointer_to;
@@ -1114,7 +1153,7 @@ struct tree_type
   union tree_node *noncopied_parts;
   union tree_node *context;
   struct obstack *obstack;
-  int alias_set;
+  HOST_WIDE_INT alias_set;
   /* Points to a structure whose details depend on the language in use.  */
   struct lang_type *lang_specific;
 };
@@ -1282,8 +1321,18 @@ struct tree_type
 #define DECL_SIZE_UNIT(NODE) (DECL_CHECK (NODE)->decl.size_unit)
 /* Holds the alignment required for the datum.  */
 #define DECL_ALIGN(NODE) (DECL_CHECK (NODE)->decl.u1.a.align)
-/* For FIELD_DECLs, holds the alignment that DECL_FIELD_OFFSET has.  */
-#define DECL_OFFSET_ALIGN(NODE) (FIELD_DECL_CHECK (NODE)->decl.u1.a.off_align)
+/* For FIELD_DECLs, off_align holds the number of low-order bits of
+   DECL_FIELD_OFFSET which are known to be always zero.
+   DECL_OFFSET_ALIGN thus returns the alignment that DECL_FIELD_OFFSET
+   has.  */
+#define DECL_OFFSET_ALIGN(NODE) \
+  (((unsigned HOST_WIDE_INT)1) << FIELD_DECL_CHECK (NODE)->decl.u1.a.off_align)
+/* Specify that DECL_ALIGN(NODE) is a multiple of X.  */
+#define SET_DECL_OFFSET_ALIGN(NODE, X) \
+  (FIELD_DECL_CHECK (NODE)->decl.u1.a.off_align        = exact_log2 ((X) & -(X)))
+/* 1 if the alignment for this type was requested by "aligned" attribute,
+   0 if it is the default for this type.  */
+#define DECL_USER_ALIGN(NODE) (DECL_CHECK (NODE)->decl.user_align)
 /* Holds the machine mode corresponding to the declaration of a variable or
    field.  Always equal to TYPE_MODE (TREE_TYPE (decl)) except for a
    FIELD_DECL.  */
@@ -1337,11 +1386,10 @@ struct tree_type
 #define DECL_ORIGIN(NODE) \
   (DECL_ABSTRACT_ORIGIN (NODE) ? DECL_ABSTRACT_ORIGIN (NODE) : NODE)
 
-/* 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
-   (see save_for_inline_copying).  */
+/* 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. */
 #define DECL_FROM_INLINE(NODE) (DECL_ABSTRACT_ORIGIN (NODE) != (tree) 0 \
                                && DECL_ABSTRACT_ORIGIN (NODE) != (NODE))
 
@@ -1519,6 +1567,11 @@ struct tree_type
    an address constant.  */
 #define DECL_NON_ADDR_CONST_P(NODE) (DECL_CHECK (NODE)->decl.non_addr_const_p)
 
+/* Used in a FIELD_DECL to indicate that we cannot form the address of
+   this component.  */
+#define DECL_NONADDRESSABLE_P(NODE) \
+  (FIELD_DECL_CHECK (NODE)->decl.non_addressable)
+
 /* Used to indicate an alias set for the memory pointed to by this
    particular FIELD_DECL, PARM_DECL, or VAR_DECL, which must have
    pointer (or reference) type.  */
@@ -1541,7 +1594,7 @@ struct tree_type
 
 struct tree_decl
 {
-  char common[sizeof (struct tree_common)];
+  struct tree_common common;
   const char *filename;
   int linenum;
   unsigned int uid;
@@ -1572,9 +1625,13 @@ struct tree_decl
   unsigned comdat_flag : 1;
   unsigned malloc_flag : 1;
   unsigned no_limit_stack : 1;
-  unsigned pure_flag : 1;
   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;
+  /* Three unused bits.  */
 
   unsigned lang_flag_0 : 1;
   unsigned lang_flag_1 : 1;
@@ -1620,7 +1677,7 @@ struct tree_decl
   } u2;
 
   union tree_node *vindex;
-  int pointer_alias_set;
+  HOST_WIDE_INT pointer_alias_set;
   /* Points to a structure whose details depend on the language in use.  */
   struct lang_decl *lang_specific;
 };
@@ -1688,6 +1745,14 @@ enum tree_index
   TI_PTRDIFF_TYPE,
   TI_VA_LIST_TYPE,
 
+  TI_V4SF_TYPE,
+  TI_V4SI_TYPE,
+  TI_V8QI_TYPE,
+  TI_V4HI_TYPE,
+  TI_V2SI_TYPE,
+
+  TI_MAIN_IDENTIFIER,
+
   TI_MAX
 };
 
@@ -1734,6 +1799,15 @@ extern tree global_trees[TI_MAX];
 #define ptrdiff_type_node              global_trees[TI_PTRDIFF_TYPE]
 #define va_list_type_node              global_trees[TI_VA_LIST_TYPE]
 
+#define main_identifier_node           global_trees[TI_MAIN_IDENTIFIER]
+#define MAIN_NAME_P(NODE) (IDENTIFIER_NODE_CHECK (NODE) == main_identifier_node)
+
+#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 V4HI_type_node                 global_trees[TI_V4HI_TYPE]
+#define V2SI_type_node                 global_trees[TI_V2SI_TYPE]
+
 /* An enumeration of the standard C integer types.  These must be
    ordered so that shorter types appear before longer ones.  */
 enum integer_type_kind 
@@ -1789,6 +1863,11 @@ extern char *permalloc                   PARAMS ((int));
 extern char *savealloc                 PARAMS ((int));
 extern char *expralloc                 PARAMS ((int));
 
+/* Compute the number of bytes occupied by 'node'.  This routine only
+   looks at TREE_CODE and, if the code is TREE_VEC, TREE_VEC_LENGTH.  */
+
+extern size_t tree_size                        PARAMS ((tree));
+
 /* Lowest level primitive for allocating a node.
    The TREE_CODE is the only argument.  Contents are initialized
    to zero except for a few of the common fields.  */
@@ -1871,11 +1950,13 @@ extern int attribute_list_equal         PARAMS ((tree, tree));
 extern int attribute_list_contained    PARAMS ((tree, tree));
 extern int tree_int_cst_equal          PARAMS ((tree, tree));
 extern int tree_int_cst_lt             PARAMS ((tree, tree));
+extern int tree_int_cst_compare         PARAMS ((tree, tree));
 extern int host_integerp               PARAMS ((tree, int));
 extern HOST_WIDE_INT tree_low_cst      PARAMS ((tree, int));
 extern int tree_int_cst_msb            PARAMS ((tree));
 extern int tree_int_cst_sgn            PARAMS ((tree));
-extern int tree_expr_nonnegative_p             PARAMS ((tree));
+extern int tree_expr_nonnegative_p     PARAMS ((tree));
+extern int rtl_expr_nonnegative_p      PARAMS ((struct rtx_def *));
 extern int index_type_equal            PARAMS ((tree, tree));
 extern tree get_inner_array_type       PARAMS ((tree));
 
@@ -2368,14 +2449,11 @@ extern tree builtin_function                    PARAMS ((const char *, tree, int,
 \f
 /* In tree.c */
 extern char *perm_calloc                       PARAMS ((int, long));
-extern tree get_file_function_name             PARAMS ((int));
+extern void clean_symbol_name                  PARAMS ((char *));
 extern tree get_file_function_name_long        PARAMS ((const char *));
 extern tree get_set_constructor_bits           PARAMS ((tree, char *, int));
 extern tree get_set_constructor_bytes          PARAMS ((tree,
                                                       unsigned char *, int));
-extern int get_alias_set                        PARAMS ((tree));
-extern int new_alias_set                       PARAMS ((void));
-extern int (*lang_get_alias_set)                PARAMS ((tree));
 extern tree get_callee_fndecl                   PARAMS ((tree));
 \f
 /* In stmt.c */
@@ -2427,6 +2505,8 @@ extern int expand_dcc_cleanup                     PARAMS ((tree));
 extern void expand_start_case                  PARAMS ((int, tree, tree,
                                                       const char *));
 extern void expand_end_case                    PARAMS ((tree));
+extern int add_case_node                        PARAMS ((tree, tree,
+                                                        tree, tree *));
 extern int pushcase                            PARAMS ((tree,
                                                       tree (*) (tree, tree),
                                                       tree, tree *));
@@ -2484,52 +2564,6 @@ extern tree invert_truthvalue    PARAMS ((tree));
 
 extern tree (*lang_type_promotes_to)   PARAMS ((tree));
 \f
-/* Interface of the DWARF2 unwind info support.  */
-
-/* Decide whether we want to emit frame unwind information for the current
-   translation unit.  */
-
-extern int dwarf2out_do_frame          PARAMS ((void));
-
-/* Generate a new label for the CFI info to refer to.  */
-
-extern char *dwarf2out_cfi_label       PARAMS ((void));
-
-/* Entry point to update the canonical frame address (CFA).  */
-
-extern void dwarf2out_def_cfa          PARAMS ((const char *, unsigned, long));
-
-/* Add the CFI for saving a register window.  */
-
-extern void dwarf2out_window_save      PARAMS ((const char *));
-
-/* Add a CFI to update the running total of the size of arguments pushed
-   onto the stack.  */
-
-extern void dwarf2out_args_size                PARAMS ((const char *, long));
-
-/* Entry point for saving a register to the stack.  */
-
-extern void dwarf2out_reg_save         PARAMS ((const char *, unsigned, long));
-
-/* Entry point for saving the return address in the stack.  */
-
-extern void dwarf2out_return_save      PARAMS ((const char *, long));
-
-/* Entry point for saving the return address in a register.  */
-
-extern void dwarf2out_return_reg       PARAMS ((const char *, unsigned));
-
-/* Output a marker (i.e. a label) for the beginning of a function, before
-   the prologue.  */
-
-extern void dwarf2out_begin_prologue   PARAMS ((void));
-
-/* Output a marker (i.e. a label) for the absolute end of the generated
-   code for a function definition.  */
-
-extern void dwarf2out_end_epilogue     PARAMS ((void));
-\f
 /* The language front-end must define these functions.  */
 
 /* Function of no arguments for initializing options.  */
@@ -2615,7 +2649,11 @@ extern void end_temporary_allocation PARAMS ((void));
 extern void pop_obstacks PARAMS ((void));
 
 /* In alias.c */
-void record_component_aliases          PARAMS ((tree));
+extern void record_component_aliases           PARAMS ((tree));
+extern HOST_WIDE_INT get_alias_set             PARAMS ((tree));
+
+/* In c-common.c */
+extern HOST_WIDE_INT lang_get_alias_set                PARAMS ((tree));
 
 /* In tree.c */
 extern int really_constant_p           PARAMS ((tree));
@@ -2626,7 +2664,6 @@ extern void preserve_momentary            PARAMS ((void));
 extern void saveable_allocation                PARAMS ((void));
 extern void temporary_allocation       PARAMS ((void));
 extern void resume_temporary_allocation        PARAMS ((void));
-extern tree get_file_function_name     PARAMS ((int));
 extern void set_identifier_size                PARAMS ((int));
 extern int int_fits_type_p             PARAMS ((tree, tree));
 extern int tree_log2                   PARAMS ((tree));
@@ -2756,8 +2793,7 @@ extern int global_bindings_p              PARAMS ((void));
 extern void insert_block               PARAMS ((tree));
 
 /* In integrate.c */
-extern void save_for_inline_nocopy     PARAMS ((tree));
-extern void save_for_inline_copying    PARAMS ((tree));
+extern void save_for_inline            PARAMS ((tree));
 extern void set_decl_abstract_flags    PARAMS ((tree, int));
 extern void output_inline_function     PARAMS ((tree));
 extern void set_decl_origin_self       PARAMS ((tree));
@@ -2798,6 +2834,7 @@ extern int drop_through_at_end_p  PARAMS ((void));
 extern void expand_start_target_temps  PARAMS ((void));
 extern void expand_end_target_temps    PARAMS ((void));
 extern void expand_elseif              PARAMS ((tree));
+extern void save_stack_pointer         PARAMS ((void));
 extern void expand_decl                        PARAMS ((tree));
 extern int expand_decl_cleanup         PARAMS ((tree, tree));
 extern void expand_anon_union_decl     PARAMS ((tree, tree, tree));
@@ -2862,7 +2899,7 @@ extern void dwarf2out_begin_prologue      PARAMS ((void));
    code for a function definition.  */
 
 extern void dwarf2out_end_epilogue     PARAMS ((void));
-
+\f
 /* Redefine abort to report an internal error w/o coredump, and
    reporting the location of the error in the source file.  This logic
    is duplicated in rtl.h and tree.h because every file that needs the
@@ -2871,8 +2908,4 @@ extern void dwarf2out_end_epilogue        PARAMS ((void));
 
 extern void fancy_abort PARAMS ((const char *, int, const char *))
     ATTRIBUTE_NORETURN;
-#if (GCC_VERSION >= 2007)
-#define abort() fancy_abort (__FILE__, __LINE__, __PRETTY_FUNCTION__)
-#else
-#define abort() fancy_abort (__FILE__, __LINE__, 0)
-#endif
+#define abort() fancy_abort (__FILE__, __LINE__, __FUNCTION__)