tree.c, tree.h (build_parse_node): Remove; was identical to build_nt.
[gcc.git] / gcc / tree.h
index 74c566c85d64d4e69d9e666cb7fe1e2790b4806c..1ff74410a94fa71ff315bbcc7b3faa5f5fed0f83 100644 (file)
@@ -133,7 +133,6 @@ struct tree_common
   ENUM_BITFIELD(tree_code) code : 8;
   unsigned side_effects_flag : 1;
   unsigned constant_flag : 1;
-  unsigned permanent_flag : 1;
   unsigned addressable_flag : 1;
   unsigned volatile_flag : 1;
   unsigned readonly_flag : 1;
@@ -155,6 +154,10 @@ struct tree_common
   unsigned lang_flag_4 : 1;
   unsigned lang_flag_5 : 1;
   unsigned lang_flag_6 : 1;
+  /* This flag is presently unused.  However, language front-ends
+     should not make use of this flag; it is reserved for future
+     expansion.  */
+  unsigned dummy : 1;
 };
 
 /* The following table lists the uses of each of the above flags and
@@ -230,8 +233,6 @@ struct tree_common
        TREE_CONSTANT in
            all expressions
 
-   permanent_flag: TREE_PERMANENT in all nodes
-
    unsigned_flag:
 
        TREE_UNSIGNED in
@@ -568,22 +569,13 @@ extern void tree_class_check_failed PARAMS ((const tree, int,
    if the value is constant.  */
 #define TREE_CONSTANT(NODE) ((NODE)->common.constant_flag)
 
-/* Nonzero means permanent node;
-   node will continue to exist for the entire compiler run.
-   Otherwise it will be recycled at the end of the function.
-   This flag is always zero if garbage collection is in use.
-   Try not to use this.  Only set it with TREE_SET_PERMANENT.  */
-#define TREE_PERMANENT(NODE) ((NODE)->common.permanent_flag)
-#define TREE_SET_PERMANENT(NODE) do { \
-  if (!ggc_p && current_obstack == &permanent_obstack) \
-    TREE_PERMANENT(NODE) = 1; \
-} while (0) 
-
 /* In INTEGER_TYPE or ENUMERAL_TYPE nodes, means an unsigned type.
    In FIELD_DECL nodes, means an unsigned bit field.
    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))
+
 /* Nonzero in a VAR_DECL means assembler code has been written.
    Nonzero in a FUNCTION_DECL means that the function has been compiled.
    This is interesting in an inline function, since it might not need
@@ -721,7 +713,7 @@ struct tree_string
   struct rtx_def *rtl; /* acts as link to register transfer language
                                   (rtl) info */
   int length;
-  char *pointer;
+  const char *pointer;
 };
 
 /* In a COMPLEX_CST node.  */
@@ -788,9 +780,6 @@ struct tree_vec
 #define RTL_EXPR_SEQUENCE(NODE) (*(struct rtx_def **) &EXPR_CHECK (NODE)->exp.operands[0])
 #define RTL_EXPR_RTL(NODE) (*(struct rtx_def **) &EXPR_CHECK (NODE)->exp.operands[1])
 
-/* In a CALL_EXPR node.  */
-#define CALL_EXPR_RTL(NODE) (*(struct rtx_def **) &EXPR_CHECK (NODE)->exp.operands[2])
-
 /* In a CONSTRUCTOR node.  */
 #define CONSTRUCTOR_ELTS(NODE) TREE_OPERAND (NODE, 1)
 
@@ -890,7 +879,6 @@ struct tree_block
 #define TYPE_MAIN_VARIANT(NODE) (TYPE_CHECK (NODE)->type.main_variant)
 #define TYPE_NONCOPIED_PARTS(NODE) (TYPE_CHECK (NODE)->type.noncopied_parts)
 #define TYPE_CONTEXT(NODE) (TYPE_CHECK (NODE)->type.context)
-#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
@@ -958,9 +946,14 @@ struct tree_block
    its size.  */
 #define TYPE_NO_FORCE_BLK(NODE) (TYPE_CHECK (NODE)->type.no_force_blk_flag)
 
-/* 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.  */
+/* In an INTEGER_TYPE, it means the type represents a size.  We use
+   this both for validity checking and to permit optimizations that
+   are unsafe for other types.  Note that the C `size_t' type should
+   *not* have this flag set.  The `size_t' type is simply a typedef
+   for an ordinary integer type that happens to be the type of an
+   expression returned by `sizeof'; `size_t' has no special
+   properties.  Expressions whose type have TYPE_IS_SIZETYPE set are
+   always actual sizes.  */
 #define TYPE_IS_SIZETYPE(NODE) \
   (INTEGER_TYPE_CHECK (NODE)->type.no_force_blk_flag)
 
@@ -1152,7 +1145,6 @@ struct tree_type
   union tree_node *binfo;
   union tree_node *noncopied_parts;
   union tree_node *context;
-  struct obstack *obstack;
   HOST_WIDE_INT alias_set;
   /* Points to a structure whose details depend on the language in use.  */
   struct lang_type *lang_specific;
@@ -1319,8 +1311,10 @@ struct tree_type
 #define DECL_SIZE(NODE) (DECL_CHECK (NODE)->decl.size)
 /* Likewise for the size in bytes.  */
 #define DECL_SIZE_UNIT(NODE) (DECL_CHECK (NODE)->decl.size_unit)
-/* Holds the alignment required for the datum.  */
+/* Holds the alignment required for the datum, in bits.  */
 #define DECL_ALIGN(NODE) (DECL_CHECK (NODE)->decl.u1.a.align)
+/* The alignment of NODE, in bytes.  */
+#define DECL_ALIGN_UNIT(NODE) (DECL_ALIGN (NODE) / BITS_PER_UNIT)
 /* 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
@@ -1721,6 +1715,7 @@ enum tree_index
     
   TI_INTEGER_ZERO,
   TI_INTEGER_ONE,
+  TI_INTEGER_MINUS_ONE,
   TI_NULL_POINTER,
 
   TI_SIZE_ZERO,
@@ -1745,6 +1740,8 @@ enum tree_index
   TI_PTRDIFF_TYPE,
   TI_VA_LIST_TYPE,
 
+  TI_VOID_LIST_NODE,
+
   TI_V4SF_TYPE,
   TI_V4SI_TYPE,
   TI_V8QI_TYPE,
@@ -1774,6 +1771,7 @@ extern tree global_trees[TI_MAX];
 
 #define integer_zero_node              global_trees[TI_INTEGER_ZERO]
 #define integer_one_node               global_trees[TI_INTEGER_ONE]
+#define integer_minus_one_node         global_trees[TI_INTEGER_MINUS_ONE]
 #define size_zero_node                 global_trees[TI_SIZE_ZERO]
 #define size_one_node                  global_trees[TI_SIZE_ONE]
 #define bitsize_zero_node              global_trees[TI_BITSIZE_ZERO]
@@ -1799,6 +1797,13 @@ 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]
 
+/* The node that should be placed at the end of a parameter list to
+   indicate that the function does not take a variable number of
+   arguments.  The TREE_VALUE will be void_type_node and there will be
+   no TREE_CHAIN.  Language-independent code should not assume
+   anything else about this node.  */
+#define void_list_node                  global_trees[TI_VOID_LIST_NODE]
+
 #define main_identifier_node           global_trees[TI_MAIN_IDENTIFIER]
 #define MAIN_NAME_P(NODE) (IDENTIFIER_NODE_CHECK (NODE) == main_identifier_node)
 
@@ -1858,9 +1863,11 @@ extern tree integer_types[itk_none];
 extern int exact_log2_wide             PARAMS ((unsigned HOST_WIDE_INT));
 extern int floor_log2_wide             PARAMS ((unsigned HOST_WIDE_INT));
 
-extern char *oballoc                   PARAMS ((int));
+/* Approximate positive square root of a host double.  This is for
+   statistical reports, not code generation.  */
+extern double approx_sqrt              PARAMS ((double));
+
 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
@@ -1908,7 +1915,6 @@ extern tree maybe_get_identifier  PARAMS ((const char *));
 
 extern tree build                      PARAMS ((enum tree_code, tree, ...));
 extern tree build_nt                   PARAMS ((enum tree_code, ...));
-extern tree build_parse_node           PARAMS ((enum tree_code, ...));
 
 extern tree build_int_2_wide           PARAMS ((unsigned HOST_WIDE_INT, HOST_WIDE_INT));
 extern tree build_real                 PARAMS ((tree, REAL_VALUE_TYPE));
@@ -1917,8 +1923,6 @@ extern tree build_complex         PARAMS ((tree, tree, tree));
 extern tree build_string               PARAMS ((int, const char *));
 extern tree build1                     PARAMS ((enum tree_code, tree, tree));
 extern tree build_tree_list            PARAMS ((tree, tree));
-extern tree build_decl_list            PARAMS ((tree, tree));
-extern tree build_expr_list            PARAMS ((tree, tree));
 extern tree build_decl                 PARAMS ((enum tree_code, tree, tree));
 extern tree build_block                        PARAMS ((tree, tree, tree, tree, tree));
 extern tree build_expr_wfl              PARAMS ((tree, const char *, int, int));
@@ -1933,6 +1937,7 @@ extern tree signed_or_unsigned_type       PARAMS ((int, tree));
 extern void fixup_unsigned_type                PARAMS ((tree));
 extern tree build_pointer_type         PARAMS ((tree));
 extern tree build_reference_type       PARAMS ((tree));
+extern tree build_type_no_quals        PARAMS ((tree));
 extern tree build_index_type           PARAMS ((tree));
 extern tree build_index_2_type         PARAMS ((tree, tree));
 extern tree build_array_type           PARAMS ((tree, tree));
@@ -2177,11 +2182,6 @@ extern tree chainon                      PARAMS ((tree, tree));
 /* Make a new TREE_LIST node from specified PURPOSE, VALUE and CHAIN.  */
 
 extern tree tree_cons                  PARAMS ((tree, tree, tree));
-extern tree perm_tree_cons             PARAMS ((tree, tree, tree));
-extern tree temp_tree_cons             PARAMS ((tree, tree, tree));
-extern tree saveable_tree_cons         PARAMS ((tree, tree, tree));
-extern tree decl_tree_cons             PARAMS ((tree, tree, tree));
-extern tree expr_tree_cons             PARAMS ((tree, tree, tree));
 
 /* Return the last tree node in a chain.  */
 
@@ -2265,7 +2265,11 @@ extern void (*lang_unsave_expr_now)     PARAMS ((tree));
 /* Return 0 if it is safe to evaluate EXPR multiple times,
    return 1 if it is safe if EXPR is unsaved afterward, or
    return 2 if it is completely unsafe.  */
-extern int unsafe_for_reeval PARAMS ((tree));
+extern int unsafe_for_reeval           PARAMS ((tree));
+
+/* If non-null, these are language-specific helper functions for
+   unsafe_for_reeval.  Return negative to not handle some tree.  */
+extern int (*lang_unsafe_for_reeval)   PARAMS ((tree));
 
 /* Return 1 if EXP contains a PLACEHOLDER_EXPR; i.e., if it represents a size
    or offset that depends on a field within a record.
@@ -2446,9 +2450,6 @@ extern const char * const language_string;
 extern tree builtin_function                   PARAMS ((const char *, tree, int,
                                                       enum built_in_class,
                                                       const char *));
-/* Pointer to function to check the format of printf, etc.  This is
-   used by the backend, e.g. builtins.c.  */
-extern void (*check_function_format_ptr) PARAMS ((int *, tree, tree, tree));
 \f
 /* In tree.c */
 extern char *perm_calloc                       PARAMS ((int, long));
@@ -2478,8 +2479,10 @@ extern void expand_start_else                    PARAMS ((void));
 extern void expand_start_elseif                        PARAMS ((tree));
 extern struct nesting *expand_start_loop       PARAMS ((int));
 extern struct nesting *expand_start_loop_continue_elsewhere    PARAMS ((int));
+extern struct nesting *expand_start_null_loop  PARAMS ((void));
 extern void expand_loop_continue_here          PARAMS ((void));
 extern void expand_end_loop                    PARAMS ((void));
+extern void expand_end_null_loop               PARAMS ((void));
 extern int expand_continue_loop                        PARAMS ((struct nesting *));
 extern int expand_exit_loop                    PARAMS ((struct nesting *));
 extern int expand_exit_loop_if_false           PARAMS ((struct nesting *,
@@ -2566,22 +2569,15 @@ extern tree invert_truthvalue   PARAMS ((tree));
    change.  Required by any language that supports variadic arguments.  */
 
 extern tree (*lang_type_promotes_to)   PARAMS ((tree));
+extern tree fold_builtin               PARAMS ((tree));
 \f
 /* The language front-end must define these functions.  */
 
-/* Function of no arguments for initializing options.  */
-extern void lang_init_options                  PARAMS ((void));
-
 /* 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));
 
-/* Functions called with no arguments at the beginning and end or processing
-   the input source file.  */
-extern void lang_init                          PARAMS ((void));
-extern void lang_finish                                PARAMS ((void));
-
 /* Function to identify which front-end produced the output file. */
 extern const char *lang_identify                       PARAMS ((void));
 
@@ -2594,11 +2590,6 @@ extern void copy_lang_decl                       PARAMS ((tree));
 
 /* Function called with no arguments to parse and compile the input.  */
 extern int yyparse                             PARAMS ((void));
-/* Function called with option as argument
-   to decode options starting with -f or -W or +.
-   It should return nonzero if it handles the option.  */
-extern int lang_decode_option                  PARAMS ((int, char **));
-
 /* Functions for processing symbol declarations.  */
 /* Function to enter a new lexical scope.
    Takes one argument: always zero when called from outside the front end.  */
@@ -2623,55 +2614,28 @@ extern tree gettags                             PARAMS ((void));
 
 extern tree build_range_type PARAMS ((tree, tree, tree));
 
-/* Call when starting to parse a declaration:
-   make expressions in the declaration last the length of the function.
-   Returns an argument that should be passed to resume_momentary later.  */
-extern int suspend_momentary PARAMS ((void));
-
-extern int allocation_temporary_p PARAMS ((void));
-
-/* Call when finished parsing a declaration:
-   restore the treatment of node-allocation that was
-   in effect before the suspension.
-   YES should be the value previously returned by suspend_momentary.  */
-extern void resume_momentary PARAMS ((int));
-
 /* Called after finishing a record, union or enumeral type.  */
 extern void rest_of_type_compilation PARAMS ((tree, int));
 
-/* Save the current set of obstacks, but don't change them.  */
-extern void push_obstacks_nochange PARAMS ((void));
-
-extern void permanent_allocation PARAMS ((int));
-extern void push_momentary PARAMS ((void));
-extern void clear_momentary PARAMS ((void));
-extern void pop_momentary PARAMS ((void));
-extern void end_temporary_allocation PARAMS ((void));
-
-/* Pop the obstack selection stack.  */
-extern void pop_obstacks PARAMS ((void));
-
 /* In alias.c */
 extern void record_component_aliases           PARAMS ((tree));
 extern HOST_WIDE_INT get_alias_set             PARAMS ((tree));
+extern int alias_sets_conflict_p               PARAMS ((HOST_WIDE_INT,
+                                                        HOST_WIDE_INT));
+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));
 
+struct obstack;
+
 /* In tree.c */
 extern int really_constant_p           PARAMS ((tree));
-extern void push_obstacks              PARAMS ((struct obstack *,
-                                               struct obstack *));
-extern void pop_momentary_nofree       PARAMS ((void));
-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 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 void preserve_initializer       PARAMS ((void));
 extern void preserve_data              PARAMS ((void));
 extern int object_permanent_p          PARAMS ((tree));
 extern int type_precision              PARAMS ((tree));
@@ -2686,10 +2650,6 @@ extern tree type_hash_lookup             PARAMS ((unsigned int, tree));
 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 debug_obstack              PARAMS ((char *));
-extern void rtl_in_current_obstack     PARAMS ((void));
-extern void rtl_in_saveable_obstack    PARAMS ((void));
-extern void init_tree_codes            PARAMS ((void));
 extern void dump_tree_statistics       PARAMS ((void));
 extern void print_obstack_statistics   PARAMS ((const char *,
                                                struct obstack *));
@@ -2705,9 +2665,9 @@ extern int real_twop                      PARAMS ((tree));
 extern void start_identifier_warnings  PARAMS ((void));
 extern void gcc_obstack_init           PARAMS ((struct obstack *));
 extern void init_obstacks              PARAMS ((void));
-extern void obfree                     PARAMS ((char *));
 extern void build_common_tree_nodes    PARAMS ((int));
 extern void build_common_tree_nodes_2  PARAMS ((int));
+extern void mark_tree_hashtable         PARAMS ((void *));
 
 /* In function.c */
 extern void setjmp_protect_args                PARAMS ((void));
@@ -2808,7 +2768,7 @@ extern void set_yydebug                   PARAMS ((int));
 extern void fixup_signed_type          PARAMS ((tree));
 
 /* varasm.c */
-extern void make_decl_rtl              PARAMS ((tree, const char *, int));
+extern void make_decl_rtl              PARAMS ((tree, const char *));
 extern void make_decl_one_only         PARAMS ((tree));
 extern int supports_one_only           PARAMS ((void));
 extern void variable_section           PARAMS ((tree, int));