aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.2.1/gcc/ada/gigi.h
diff options
context:
space:
mode:
Diffstat (limited to 'gcc-4.2.1/gcc/ada/gigi.h')
-rw-r--r--gcc-4.2.1/gcc/ada/gigi.h815
1 files changed, 0 insertions, 815 deletions
diff --git a/gcc-4.2.1/gcc/ada/gigi.h b/gcc-4.2.1/gcc/ada/gigi.h
deleted file mode 100644
index 43d46f6ad..000000000
--- a/gcc-4.2.1/gcc/ada/gigi.h
+++ /dev/null
@@ -1,815 +0,0 @@
-/****************************************************************************
- * *
- * GNAT COMPILER COMPONENTS *
- * *
- * G I G I *
- * *
- * C Header File *
- * *
- * Copyright (C) 1992-2006 Free Software Foundation, Inc. *
- * *
- * GNAT is free software; you can redistribute it and/or modify it under *
- * terms of the GNU General Public License as published by the Free Soft- *
- * ware Foundation; either version 2, or (at your option) any later ver- *
- * sion. GNAT is distributed in the hope that it will be useful, but WITH- *
- * OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY *
- * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License *
- * for more details. You should have received a copy of the GNU General *
- * Public License distributed with GNAT; see file COPYING. If not, write *
- * to the Free Software Foundation, 51 Franklin Street, Fifth Floor, *
- * Boston, MA 02110-1301, USA. *
- * *
- * As a special exception, if you link this file with other files to *
- * produce an executable, this file does not by itself cause the resulting *
- * executable to be covered by the GNU General Public License. This except- *
- * ion does not however invalidate any other reasons why the executable *
- * file might be covered by the GNU Public License. *
- * *
- * GNAT was originally developed by the GNAT team at New York University. *
- * Extensive contributions were provided by Ada Core Technologies Inc. *
- * *
- ****************************************************************************/
-
-/* Declare all functions and types used by gigi. */
-
-/* The largest alignment, in bits, that is needed for using the widest
- move instruction. */
-extern unsigned int largest_move_alignment;
-
-/* Compute the alignment of the largest mode that can be used for copying
- objects. */
-extern void gnat_compute_largest_alignment (void);
-
-/* GNU_TYPE is a type. Determine if it should be passed by reference by
- default. */
-extern bool default_pass_by_ref (tree gnu_type);
-
-/* GNU_TYPE is the type of a subprogram parameter. Determine from the type
- if it should be passed by reference. */
-extern bool must_pass_by_ref (tree gnu_type);
-
-/* Initialize DUMMY_NODE_TABLE. */
-extern void init_dummy_type (void);
-
-/* Given GNAT_ENTITY, a GNAT defining identifier node, which denotes some Ada
- entity, this routine returns the equivalent GCC tree for that entity
- (an ..._DECL node) and associates the ..._DECL node with the input GNAT
- defining identifier.
-
- If GNAT_ENTITY is a variable or a constant declaration, GNU_EXPR gives its
- initial value (in GCC tree form). This is optional for variables.
- For renamed entities, GNU_EXPR gives the object being renamed.
-
- DEFINITION is nonzero if this call is intended for a definition. This is
- used for separate compilation where it necessary to know whether an
- external declaration or a definition should be created if the GCC equivalent
- was not created previously. The value of 1 is normally used for a nonzero
- DEFINITION, but a value of 2 is used in special circumstances, defined in
- the code. */
-extern tree gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr,
- int definition);
-
-/* Similar, but if the returned value is a COMPONENT_REF, return the
- FIELD_DECL. */
-extern tree gnat_to_gnu_field_decl (Entity_Id gnat_entity);
-
-/* Given GNAT_ENTITY, an entity in the incoming GNAT tree, return a
- GCC type corresponding to that entity. GNAT_ENTITY is assumed to
- refer to an Ada type. */
-extern tree gnat_to_gnu_type (Entity_Id gnat_entity);
-
-/* Add GNU_STMT to the current BLOCK_STMT node. */
-extern void add_stmt (tree gnu_stmt);
-
-/* Similar, but set the location of GNU_STMT to that of GNAT_NODE. */
-extern void add_stmt_with_node (tree gnu_stmt, Node_Id gnat_node);
-
-/* Set the BLOCK node corresponding to the current code group to GNU_BLOCK. */
-extern void set_block_for_group (tree);
-
-/* Add a declaration statement for GNU_DECL to the current BLOCK_STMT node.
- Get SLOC from GNAT_ENTITY. */
-extern void add_decl_expr (tree gnu_decl, Entity_Id gnat_entity);
-
-/* Given GNAT_ENTITY, elaborate all expressions that are required to
- be elaborated at the point of its definition, but do nothing else. */
-extern void elaborate_entity (Entity_Id gnat_entity);
-
-/* Mark GNAT_ENTITY as going out of scope at this point. Recursively mark
- any entities on its entity chain similarly. */
-extern void mark_out_of_scope (Entity_Id gnat_entity);
-
-/* Make a dummy type corresponding to GNAT_TYPE. */
-extern tree make_dummy_type (Entity_Id gnat_type);
-
-/* Get the unpadded version of a GNAT type. */
-extern tree get_unpadded_type (Entity_Id gnat_entity);
-
-/* Called when we need to protect a variable object using a save_expr. */
-extern tree maybe_variable (tree gnu_operand);
-
-/* Create a record type that contains a field of TYPE with a starting bit
- position so that it is aligned to ALIGN bits and is SIZE bytes long. */
-extern tree make_aligning_type (tree type, int align, tree size);
-
-/* Ensure that TYPE has SIZE and ALIGN. Make and return a new padded type
- if needed. We have already verified that SIZE and TYPE are large enough.
-
- GNAT_ENTITY and NAME_TRAILER are used to name the resulting record and
- to issue a warning.
-
- IS_USER_TYPE is true if we must be sure we complete the original type.
-
- DEFINITION is true if this type is being defined.
-
- SAME_RM_SIZE is true if the RM_Size of the resulting type is to be
- set to its TYPE_SIZE; otherwise, it's set to the RM_Size of the original
- type. */
-extern tree maybe_pad_type (tree type, tree size, unsigned int align,
- Entity_Id gnat_entity, const char *name_trailer,
- bool is_user_type, bool definition,
- bool same_rm_size);
-
-/* Given a GNU tree and a GNAT list of choices, generate an expression to test
- the value passed against the list of choices. */
-extern tree choices_to_gnu (tree operand, Node_Id choices);
-
-/* Given a type T, a FIELD_DECL F, and a replacement value R,
- return a new type with all size expressions that contain F
- updated by replacing F with R. This is identical to GCC's
- substitute_in_type except that it knows about TYPE_INDEX_TYPE. */
-extern tree gnat_substitute_in_type (tree t, tree f, tree r);
-
-/* Return the "RM size" of GNU_TYPE. This is the actual number of bits
- needed to represent the object. */
-extern tree rm_size (tree gnu_type);
-
-/* Given GNU_ID, an IDENTIFIER_NODE containing a name, and SUFFIX, a
- string, return a new IDENTIFIER_NODE that is the concatenation of
- the name in GNU_ID and SUFFIX. */
-extern tree concat_id_with_name (tree gnu_id, const char *suffix);
-
-/* Return the name to be used for GNAT_ENTITY. If a type, create a
- fully-qualified name, possibly with type information encoding.
- Otherwise, return the name. */
-extern tree get_entity_name (Entity_Id gnat_entity);
-
-/* Return a name for GNAT_ENTITY concatenated with two underscores and
- SUFFIX. */
-extern tree create_concat_name (Entity_Id gnat_entity, const char *suffix);
-
-/* If true, then gigi is being called on an analyzed but unexpanded tree, and
- the only purpose of the call is to properly annotate types with
- representation information. */
-extern bool type_annotate_only;
-
-/* Current file name without path */
-extern const char *ref_filename;
-
-/* This is the main program of the back-end. It sets up all the table
- structures and then generates code.
-
- ??? Needs parameter descriptions */
-
-extern void gigi (Node_Id gnat_root, int max_gnat_node, int number_name,
- struct Node *nodes_ptr, Node_Id *next_node_ptr,
- Node_Id *prev_node_ptr, struct Elist_Header *elists_ptr,
- struct Elmt_Item *elmts_ptr,
- struct String_Entry *strings_ptr,
- Char_Code *strings_chars_ptr,
- struct List_Header *list_headers_ptr,
- Int number_units ATTRIBUTE_UNUSED,
- char *file_info_ptr ATTRIBUTE_UNUSED,
- Entity_Id standard_integer,
- Entity_Id standard_long_long_float,
- Entity_Id standard_exception_type,
- Int gigi_operating_mode);
-
-/* GNAT_NODE is the root of some GNAT tree. Return the root of the
- GCC tree corresponding to that GNAT tree. Normally, no code is generated;
- we just return an equivalent tree which is used elsewhere to generate
- code. */
-extern tree gnat_to_gnu (Node_Id gnat_node);
-
-/* GNU_STMT is a statement. We generate code for that statement. */
-extern void gnat_expand_stmt (tree gnu_stmt);
-
-/* ??? missing documentation */
-extern int gnat_gimplify_expr (tree *expr_p, tree *pre_p,
- tree *post_p ATTRIBUTE_UNUSED);
-
-/* Do the processing for the declaration of a GNAT_ENTITY, a type. If
- a separate Freeze node exists, delay the bulk of the processing. Otherwise
- make a GCC type for GNAT_ENTITY and set up the correspondence. */
-extern void process_type (Entity_Id gnat_entity);
-
-/* Convert Sloc into *LOCUS (a location_t). Return true if this Sloc
- corresponds to a source code location and false if it doesn't. In the
- latter case, we don't update *LOCUS. We also set the Gigi global variable
- REF_FILENAME to the reference file name as given by sinput (i.e no
- directory). */
-extern bool Sloc_to_locus (Source_Ptr Sloc, location_t *locus);
-
-/* Post an error message. MSG is the error message, properly annotated.
- NODE is the node at which to post the error and the node to use for the
- "&" substitution. */
-extern void post_error (const char *, Node_Id);
-
-/* Similar, but NODE is the node at which to post the error and ENT
- is the node to use for the "&" substitution. */
-extern void post_error_ne (const char *msg, Node_Id node, Entity_Id ent);
-
-/* Similar, but NODE is the node at which to post the error, ENT is the node
- to use for the "&" substitution, and N is the number to use for the ^. */
-extern void post_error_ne_num (const char *msg, Node_Id node, Entity_Id ent,
- int n);
-
-/* Similar to post_error_ne_num, but T is a GCC tree representing the number
- to write. If the tree represents a constant that fits within a
- host integer, the text inside curly brackets in MSG will be output
- (presumably including a '^'). Otherwise that text will not be output
- and the text inside square brackets will be output instead. */
-extern void post_error_ne_tree (const char *msg, Node_Id node, Entity_Id ent,
- tree t);
-
-/* Similar to post_error_ne_tree, except that NUM is a second
- integer to write in the message. */
-extern void post_error_ne_tree_2 (const char *msg, Node_Id node, Entity_Id ent,
- tree t, int num);
-
-/* Protect EXP from multiple evaluation. This may make a SAVE_EXPR. */
-extern tree protect_multiple_eval (tree exp);
-
-/* Initialize the table that maps GNAT codes to GCC codes for simple
- binary and unary operations. */
-extern void init_code_table (void);
-
-/* Current node being treated, in case gigi_abort or Check_Elaboration_Code
- called. */
-extern Node_Id error_gnat_node;
-
-/* This is equivalent to stabilize_reference in GCC's tree.c, but we know how
- to handle our new nodes and we take extra arguments.
-
- FORCE says whether to force evaluation of everything,
-
- SUCCESS we set to true unless we walk through something we don't
- know how to stabilize, or through something which is not an lvalue
- and LVALUES_ONLY is true, in which cases we set to false. */
-extern tree maybe_stabilize_reference (tree ref, bool force, bool lvalues_only,
- bool *success);
-
-/* Wrapper around maybe_stabilize_reference, for common uses without
- lvalue restrictions and without need to examine the success
- indication. */
-
-extern tree gnat_stabilize_reference (tree ref, bool force);
-
-/* Highest number in the front-end node table. */
-extern int max_gnat_nodes;
-
-/* If nonzero, pretend we are allocating at global level. */
-extern int force_global;
-
-/* Standard data type sizes. Most of these are not used. */
-
-#ifndef CHAR_TYPE_SIZE
-#define CHAR_TYPE_SIZE BITS_PER_UNIT
-#endif
-
-#ifndef SHORT_TYPE_SIZE
-#define SHORT_TYPE_SIZE (BITS_PER_UNIT * MIN ((UNITS_PER_WORD + 1) / 2, 2))
-#endif
-
-#ifndef INT_TYPE_SIZE
-#define INT_TYPE_SIZE BITS_PER_WORD
-#endif
-
-#ifndef LONG_TYPE_SIZE
-#define LONG_TYPE_SIZE BITS_PER_WORD
-#endif
-
-#ifndef LONG_LONG_TYPE_SIZE
-#define LONG_LONG_TYPE_SIZE (BITS_PER_WORD * 2)
-#endif
-
-#ifndef FLOAT_TYPE_SIZE
-#define FLOAT_TYPE_SIZE BITS_PER_WORD
-#endif
-
-#ifndef DOUBLE_TYPE_SIZE
-#define DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2)
-#endif
-
-#ifndef LONG_DOUBLE_TYPE_SIZE
-#define LONG_DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2)
-#endif
-
-/* The choice of SIZE_TYPE here is very problematic. We need a signed
- type whose bit width is Pmode. Assume "long" is such a type here. */
-#undef SIZE_TYPE
-#define SIZE_TYPE "long int"
-
-/* Data structures used to represent attributes. */
-
-enum attr_type
-{
- ATTR_MACHINE_ATTRIBUTE,
- ATTR_LINK_ALIAS,
- ATTR_LINK_SECTION,
- ATTR_LINK_CONSTRUCTOR,
- ATTR_LINK_DESTRUCTOR,
- ATTR_WEAK_EXTERNAL
-};
-
-struct attrib
-{
- struct attrib *next;
- enum attr_type type;
- tree name;
- tree args;
- Node_Id error_point;
-};
-
-/* Table of machine-independent internal attributes. */
-extern const struct attribute_spec gnat_internal_attribute_table[];
-
-/* Define the entries in the standard data array. */
-enum standard_datatypes
-{
-/* Various standard data types and nodes. */
- ADT_longest_float_type,
- ADT_void_type_decl,
-
- /* The type of an exception. */
- ADT_except_type,
-
- /* Type declaration node <==> typedef void *T */
- ADT_ptr_void_type,
-
- /* Function type declaration -- void T() */
- ADT_void_ftype,
-
- /* Type declaration node <==> typedef void *T() */
- ADT_ptr_void_ftype,
-
- /* A function declaration node for a run-time function for allocating memory.
- Ada allocators cause calls to this function to be generated. */
- ADT_malloc_decl,
-
- /* Likewise for freeing memory. */
- ADT_free_decl,
-
- /* Types and decls used by our temporary exception mechanism. See
- init_gigi_decls for details. */
- ADT_jmpbuf_type,
- ADT_jmpbuf_ptr_type,
- ADT_get_jmpbuf_decl,
- ADT_set_jmpbuf_decl,
- ADT_get_excptr_decl,
- ADT_setjmp_decl,
- ADT_longjmp_decl,
- ADT_update_setjmp_buf_decl,
- ADT_raise_nodefer_decl,
- ADT_begin_handler_decl,
- ADT_end_handler_decl,
- ADT_others_decl,
- ADT_all_others_decl,
- ADT_LAST};
-
-extern GTY(()) tree gnat_std_decls[(int) ADT_LAST];
-extern GTY(()) tree gnat_raise_decls[(int) LAST_REASON_CODE + 1];
-
-extern GTY(()) tree static_ctors;
-extern GTY(()) tree static_dtors;
-
-#define longest_float_type_node gnat_std_decls[(int) ADT_longest_float_type]
-#define void_type_decl_node gnat_std_decls[(int) ADT_void_type_decl]
-#define except_type_node gnat_std_decls[(int) ADT_except_type]
-#define ptr_void_type_node gnat_std_decls[(int) ADT_ptr_void_type]
-#define void_ftype gnat_std_decls[(int) ADT_void_ftype]
-#define ptr_void_ftype gnat_std_decls[(int) ADT_ptr_void_ftype]
-#define malloc_decl gnat_std_decls[(int) ADT_malloc_decl]
-#define free_decl gnat_std_decls[(int) ADT_free_decl]
-#define jmpbuf_type gnat_std_decls[(int) ADT_jmpbuf_type]
-#define jmpbuf_ptr_type gnat_std_decls[(int) ADT_jmpbuf_ptr_type]
-#define get_jmpbuf_decl gnat_std_decls[(int) ADT_get_jmpbuf_decl]
-#define set_jmpbuf_decl gnat_std_decls[(int) ADT_set_jmpbuf_decl]
-#define get_excptr_decl gnat_std_decls[(int) ADT_get_excptr_decl]
-#define setjmp_decl gnat_std_decls[(int) ADT_setjmp_decl]
-#define longjmp_decl gnat_std_decls[(int) ADT_longjmp_decl]
-#define update_setjmp_buf_decl gnat_std_decls[(int) ADT_update_setjmp_buf_decl]
-#define raise_nodefer_decl gnat_std_decls[(int) ADT_raise_nodefer_decl]
-#define begin_handler_decl gnat_std_decls[(int) ADT_begin_handler_decl]
-#define others_decl gnat_std_decls[(int) ADT_others_decl]
-#define all_others_decl gnat_std_decls[(int) ADT_all_others_decl]
-#define end_handler_decl gnat_std_decls[(int) ADT_end_handler_decl]
-
-/* Routines expected by the gcc back-end. They must have exactly the same
- prototype and names as below. */
-
-/* Returns nonzero if we are currently in the global binding level. */
-extern int global_bindings_p (void);
-
-/* Enter and exit a new binding level. */
-extern void gnat_pushlevel (void);
-extern void gnat_poplevel (void);
-
-/* Set SUPERCONTEXT of the BLOCK for the current binding level to FNDECL
- and point FNDECL to this BLOCK. */
-extern void set_current_block_context (tree fndecl);
-
-/* Set the jmpbuf_decl for the current binding level to DECL. */
-extern void set_block_jmpbuf_decl (tree decl);
-
-/* Get the setjmp_decl, if any, for the current binding level. */
-extern tree get_block_jmpbuf_decl (void);
-
-/* Insert BLOCK at the end of the list of subblocks of the
- current binding level. This is used when a BIND_EXPR is expanded,
- to handle the BLOCK node inside the BIND_EXPR. */
-extern void insert_block (tree block);
-
-/* Records a ..._DECL node DECL as belonging to the current lexical scope
- and uses GNAT_NODE for location information. */
-extern void gnat_pushdecl (tree decl, Node_Id gnat_node);
-
-extern void gnat_init_stmt_group (void);
-extern void gnat_init_decl_processing (void);
-extern void init_gigi_decls (tree long_long_float_type, tree exception_type);
-extern void gnat_init_gcc_eh (void);
-
-/* Return an integer type with the number of bits of precision given by
- PRECISION. UNSIGNEDP is nonzero if the type is unsigned; otherwise
- it is a signed type. */
-extern tree gnat_type_for_size (unsigned precision, int unsignedp);
-
-/* Return a data type that has machine mode MODE. UNSIGNEDP selects
- an unsigned type; otherwise a signed type is returned. */
-extern tree gnat_type_for_mode (enum machine_mode mode, int unsignedp);
-
-/* Return the unsigned version of a TYPE_NODE, a scalar type. */
-extern tree gnat_unsigned_type (tree type_node);
-
-/* Return the signed version of a TYPE_NODE, a scalar type. */
-extern tree gnat_signed_type (tree type_node);
-
-/* Return a type the same as TYPE except unsigned or signed according to
- UNSIGNEDP. */
-extern tree gnat_signed_or_unsigned_type (int unsignedp, tree type);
-
-/* Create an expression whose value is that of EXPR,
- converted to type TYPE. The TREE_TYPE of the value
- is always TYPE. This function implements all reasonable
- conversions; callers should filter out those that are
- not permitted by the language being compiled. */
-extern tree convert (tree type, tree expr);
-
-/* Routines created solely for the tree translator's sake. Their prototypes
- can be changed as desired. */
-
-/* GNAT_ENTITY is a GNAT tree node for a defining identifier.
- GNU_DECL is the GCC tree which is to be associated with
- GNAT_ENTITY. Such gnu tree node is always an ..._DECL node.
- If NO_CHECK is nonzero, the latter check is suppressed.
- If GNU_DECL is zero, a previous association is to be reset. */
-extern void save_gnu_tree (Entity_Id gnat_entity, tree gnu_decl,
- bool no_check);
-
-/* GNAT_ENTITY is a GNAT tree node for a defining identifier.
- Return the ..._DECL node that was associated with it. If there is no tree
- node associated with GNAT_ENTITY, abort. */
-extern tree get_gnu_tree (Entity_Id gnat_entity);
-
-/* Return nonzero if a GCC tree has been associated with GNAT_ENTITY. */
-extern bool present_gnu_tree (Entity_Id gnat_entity);
-
-/* Initialize tables for above routines. */
-extern void init_gnat_to_gnu (void);
-
-/* Given a record type (RECORD_TYPE) and a chain of FIELD_DECL
- nodes (FIELDLIST), finish constructing the record or union type.
- If HAS_REP is true, this record has a rep clause; don't call
- layout_type but merely set the size and alignment ourselves.
- If DEFER_DEBUG is true, do not call the debugging routines
- on this type; it will be done later. */
-extern void finish_record_type (tree record_type, tree fieldlist,
- bool has_rep, bool defer_debug);
-
-/* Output the debug information associated to a record type. */
-extern void write_record_type_debug_info (tree);
-
-/* Returns a FUNCTION_TYPE node. RETURN_TYPE is the type returned by the
- subprogram. If it is void_type_node, then we are dealing with a procedure,
- otherwise we are dealing with a function. PARAM_DECL_LIST is a list of
- PARM_DECL nodes that are the subprogram arguments. CICO_LIST is the
- copy-in/copy-out list to be stored into TYPE_CI_CO_LIST.
- RETURNS_UNCONSTRAINED is true if the function returns an unconstrained
- object. RETURNS_BY_REF is true if the function returns by reference.
- RETURNS_WITH_DSP is true if the function is to return with a
- depressed stack pointer. RETURNS_BY_TARGET_PTR is true if the function
- is to be passed (as its first parameter) the address of the place to copy
- its result. */
-extern tree create_subprog_type (tree return_type, tree param_decl_list,
- tree cico_list, bool returns_unconstrained,
- bool returns_by_ref, bool returns_with_dsp,
- bool returns_by_target_ptr);
-
-/* Return a copy of TYPE, but safe to modify in any way. */
-extern tree copy_type (tree type);
-
-/* Return an INTEGER_TYPE of SIZETYPE with range MIN to MAX and whose
- TYPE_INDEX_TYPE is INDEX. */
-extern tree create_index_type (tree min, tree max, tree index);
-
-/* Return a TYPE_DECL node. TYPE_NAME gives the name of the type (a character
- string) and TYPE is a ..._TYPE node giving its data type.
- ARTIFICIAL_P is true if this is a declaration that was generated
- by the compiler. DEBUG_INFO_P is true if we need to write debugging
- information about this type. GNAT_NODE is used for the position of
- the decl. */
-extern tree create_type_decl (tree type_name, tree type,
- struct attrib *attr_list,
- bool artificial_p, bool debug_info_p,
- Node_Id gnat_node);
-
-/* Returns a GCC VAR_DECL node. VAR_NAME gives the name of the variable.
- ASM_NAME is its assembler name (if provided). TYPE is
- its data type (a GCC ..._TYPE node). VAR_INIT is the GCC tree for an
- optional initial expression; NULL_TREE if none.
-
- CONST_FLAG is true if this variable is constant.
-
- PUBLIC_FLAG is true if this definition is to be made visible outside of
- the current compilation unit. This flag should be set when processing the
- variable definitions in a package specification. EXTERN_FLAG is nonzero
- when processing an external variable declaration (as opposed to a
- definition: no storage is to be allocated for the variable here).
-
- STATIC_FLAG is only relevant when not at top level. In that case
- it indicates whether to always allocate storage to the variable.
-
- GNAT_NODE is used for the position of the decl. */
-extern tree create_var_decl (tree var_name, tree asm_name, tree type,
- tree var_init, bool const_flag,
- bool public_flag, bool extern_flag,
- bool static_flag,
- struct attrib *attr_list, Node_Id gnat_node);
-
-/* Given a DECL and ATTR_LIST, apply the listed attributes. */
-extern void process_attributes (tree decl, struct attrib *attr_list);
-
-/* Returns a FIELD_DECL node. FIELD_NAME the field name, FIELD_TYPE is its
- type, and RECORD_TYPE is the type of the parent. PACKED is nonzero if
- this field is in a record type with a "pragma pack". If SIZE is nonzero
- it is the specified size for this field. If POS is nonzero, it is the bit
- position. If ADDRESSABLE is nonzero, it means we are allowed to take
- the address of this field for aliasing purposes. */
-extern tree create_field_decl (tree field_name, tree field_type,
- tree record_type, int packed, tree size,
- tree pos, int addressable);
-
-/* Returns a PARM_DECL node. PARAM_NAME is the name of the parameter,
- PARAM_TYPE is its type. READONLY is true if the parameter is
- readonly (either an IN parameter or an address of a pass-by-ref
- parameter). */
-extern tree create_param_decl (tree param_name, tree param_type,
- bool readonly);
-
-/* Returns a FUNCTION_DECL node. SUBPROG_NAME is the name of the subprogram,
- ASM_NAME is its assembler name, SUBPROG_TYPE is its type (a FUNCTION_TYPE
- node), PARAM_DECL_LIST is the list of the subprogram arguments (a list of
- PARM_DECL nodes chained through the TREE_CHAIN field).
-
- INLINE_FLAG, PUBLIC_FLAG, EXTERN_FLAG, and ATTR_LIST are used to set the
- appropriate fields in the FUNCTION_DECL. GNAT_NODE gives the location. */
-extern tree create_subprog_decl (tree subprog_name, tree asm_name,
- tree subprog_type, tree param_decl_list,
- bool inlinee_flag, bool public_flag,
- bool extern_flag,
- struct attrib *attr_list, Node_Id gnat_node);
-
-/* Returns a LABEL_DECL node for LABEL_NAME. */
-extern tree create_label_decl (tree label_name);
-
-/* Set up the framework for generating code for SUBPROG_DECL, a subprogram
- body. This routine needs to be invoked before processing the declarations
- appearing in the subprogram. */
-extern void begin_subprog_body (tree subprog_decl);
-
-/* Finish the definition of the current subprogram and compile it all the way
- to assembler language output. BODY is the tree corresponding to
- the subprogram. */
-extern void end_subprog_body (tree body);
-
-/* Build a template of type TEMPLATE_TYPE from the array bounds of ARRAY_TYPE.
- EXPR is an expression that we can use to locate any PLACEHOLDER_EXPRs.
- Return a constructor for the template. */
-extern tree build_template (tree template_type, tree array_type, tree expr);
-
-/* Build a VMS descriptor from a Mechanism_Type, which must specify
- a descriptor type, and the GCC type of an object. Each FIELD_DECL
- in the type contains in its DECL_INITIAL the expression to use when
- a constructor is made for the type. GNAT_ENTITY is a gnat node used
- to print out an error message if the mechanism cannot be applied to
- an object of that type and also for the name. */
-
-extern tree build_vms_descriptor (tree type, Mechanism_Type mech,
- Entity_Id gnat_entity);
-
-/* Build a type to be used to represent an aliased object whose nominal
- type is an unconstrained array. This consists of a RECORD_TYPE containing
- a field of TEMPLATE_TYPE and a field of OBJECT_TYPE, which is an
- ARRAY_TYPE. If ARRAY_TYPE is that of the unconstrained array, this
- is used to represent an arbitrary unconstrained object. Use NAME
- as the name of the record. */
-extern tree build_unc_object_type (tree template_type, tree object_type,
- tree name);
-
-/* Same as build_unc_object_type, but taking a thin or fat pointer type
- instead of the template type. */
-extern tree build_unc_object_type_from_ptr (tree thin_fat_ptr_type,
- tree object_type, tree name);
-
-/* Update anything previously pointing to OLD_TYPE to point to NEW_TYPE. In
- the normal case this is just two adjustments, but we have more to do
- if NEW is an UNCONSTRAINED_ARRAY_TYPE. */
-extern void update_pointer_to (tree old_type, tree new_type);
-
-/* EXP is an expression for the size of an object. If this size contains
- discriminant references, replace them with the maximum (if MAX_P) or
- minimum (if !MAX_P) possible value of the discriminant. */
-extern tree max_size (tree exp, bool max_p);
-
-/* Remove all conversions that are done in EXP. This includes converting
- from a padded type or to a left-justified modular type. If TRUE_ADDRESS
- is true, always return the address of the containing object even if
- the address is not bit-aligned. */
-extern tree remove_conversions (tree exp, bool true_address);
-
-/* If EXP's type is an UNCONSTRAINED_ARRAY_TYPE, return an expression that
- refers to the underlying array. If its type has TYPE_CONTAINS_TEMPLATE_P,
- likewise return an expression pointing to the underlying array. */
-extern tree maybe_unconstrained_array (tree exp);
-
-/* Return an expression that does an unchecked conversion of EXPR to TYPE.
- If NOTRUNC_P is true, truncation operations should be suppressed. */
-extern tree unchecked_convert (tree type, tree expr, bool notrunc_p);
-
-/* Prepare expr to be an argument of a TRUTH_NOT_EXPR or other logical
- operation.
-
- This preparation consists of taking the ordinary
- representation of an expression EXPR and producing a valid tree
- boolean expression describing whether EXPR is nonzero. We could
- simply always do build_binary_op (NE_EXPR, expr, integer_zero_node, 1),
- but we optimize comparisons, &&, ||, and !.
-
- The resulting type should always be the same as the input type.
- This function is simpler than the corresponding C version since
- the only possible operands will be things of Boolean type. */
-extern tree gnat_truthvalue_conversion (tree expr);
-
-/* Return the base type of TYPE. */
-extern tree get_base_type (tree type);
-
-/* EXP is a GCC tree representing an address. See if we can find how
- strictly the object at that address is aligned. Return that alignment
- strictly the object at that address is aligned. Return that alignment
- in bits. If we don't know anything about the alignment, return 0. */
-extern unsigned int known_alignment (tree exp);
-
-/* Return true if VALUE is a multiple of FACTOR. FACTOR must be a power
- of 2. */
-extern bool value_factor_p (tree value, HOST_WIDE_INT factor);
-
-/* Make a binary operation of kind OP_CODE. RESULT_TYPE is the type
- desired for the result. Usually the operation is to be performed
- in that type. For MODIFY_EXPR and ARRAY_REF, RESULT_TYPE may be 0
- in which case the type to be used will be derived from the operands. */
-extern tree build_binary_op (enum tree_code op_code, tree retult_type,
- tree left_operand, tree right_operand);
-
-/* Similar, but make unary operation. */
-extern tree build_unary_op (enum tree_code op_code, tree result_type,
- tree operand);
-
-/* Similar, but for COND_EXPR. */
-extern tree build_cond_expr (tree result_type, tree condition_operand,
- tree true_operand, tree false_operand);
-
-/* Similar, but for RETURN_EXPR. */
-extern tree build_return_expr (tree result_decl, tree ret_val);
-
-/* Build a CALL_EXPR to call FUNDECL with one argument, ARG. Return
- the CALL_EXPR. */
-extern tree build_call_1_expr (tree fundecl, tree arg);
-
-/* Build a CALL_EXPR to call FUNDECL with two argument, ARG1 & ARG2. Return
- the CALL_EXPR. */
-extern tree build_call_2_expr (tree fundecl, tree arg1, tree arg2);
-
-/* Likewise to call FUNDECL with no arguments. */
-extern tree build_call_0_expr (tree fundecl);
-
-/* Call a function that raises an exception and pass the line number and file
- name, if requested. MSG says which exception function to call.
-
- GNAT_NODE is the gnat node conveying the source location for which the
- error should be signaled, or Empty in which case the error is signaled on
- the current ref_file_name/input_line. */
-extern tree build_call_raise (int msg, Node_Id gnat_node);
-
-/* Return a CONSTRUCTOR of TYPE whose list is LIST. This is not the
- same as build_constructor in the language-independent tree.c. */
-extern tree gnat_build_constructor (tree type, tree list);
-
-/* Return a COMPONENT_REF to access a field that is given by COMPONENT,
- an IDENTIFIER_NODE giving the name of the field, FIELD, a FIELD_DECL,
- for the field, or both. Don't fold the result if NO_FOLD_P. */
-extern tree build_component_ref (tree record_variable, tree component,
- tree field, bool no_fold_p);
-
-/* Build a GCC tree to call an allocation or deallocation function.
- If GNU_OBJ is nonzero, it is an object to deallocate. Otherwise,
- genrate an allocator.
-
- GNU_SIZE is the size of the object and ALIGN is the alignment.
- GNAT_PROC, if present is a procedure to call and GNAT_POOL is the
- storage pool to use. If not preset, malloc and free will be used. */
-extern tree build_call_alloc_dealloc (tree gnu_obj, tree gnu_size,
- unsigned align, Entity_Id gnat_proc,
- Entity_Id gnat_pool, Node_Id gnat_node);
-
-/* Build a GCC tree to correspond to allocating an object of TYPE whose
- initial value if INIT, if INIT is nonzero. Convert the expression to
- RESULT_TYPE, which must be some type of pointer. Return the tree.
- GNAT_PROC and GNAT_POOL optionally give the procedure to call and
- the storage pool to use. GNAT_NODE is used to provide an error
- location for restriction violations messages. If IGNORE_INIT_TYPE is
- true, ignore the type of INIT for the purpose of determining the size;
- this will cause the maximum size to be allocated if TYPE is of
- self-referential size. */
-extern tree build_allocator (tree type, tree init, tree result_type,
- Entity_Id gnat_proc, Entity_Id gnat_pool,
- Node_Id gnat_node, bool);
-
-/* Fill in a VMS descriptor for EXPR and return a constructor for it.
- GNAT_FORMAL is how we find the descriptor record. */
-
-extern tree fill_vms_descriptor (tree expr, Entity_Id gnat_formal);
-
-/* Indicate that we need to make the address of EXPR_NODE and it therefore
- should not be allocated in a register. Return true if successful. */
-extern bool gnat_mark_addressable (tree expr_node);
-
-/* Implementation of the builtin_function langhook. */
-extern tree builtin_function (const char *name, tree type, int function_code,
- enum built_in_class class,
- const char *library_name, tree attrs);
-
-/* Search the chain of currently reachable declarations for a builtin
- FUNCTION_DECL node corresponding to function NAME (an IDENTIFIER_NODE).
- Return the first node found, if any, or NULL_TREE otherwise. */
-extern tree builtin_decl_for (tree name ATTRIBUTE_UNUSED);
-
-/* This function is called by the front end to enumerate all the supported
- modes for the machine. We pass a function which is called back with
- the following integer parameters:
-
- FLOAT_P nonzero if this represents a floating-point mode
- COMPLEX_P nonzero is this represents a complex mode
- COUNT count of number of items, nonzero for vector mode
- PRECISION number of bits in data representation
- MANTISSA number of bits in mantissa, if FP and known, else zero.
- SIZE number of bits used to store data
- ALIGN number of bits to which mode is aligned. */
-extern void enumerate_modes (void (*f) (int, int, int, int, int, int,
- unsigned int));
-
-/* These are temporary function to deal with recent GCC changes related to
- FP type sizes and precisions. */
-extern int fp_prec_to_size (int prec);
-extern int fp_size_to_prec (int size);
-
-/* These functions return the basic data type sizes and related parameters
- about the target machine. */
-
-extern Pos get_target_bits_per_unit (void);
-extern Pos get_target_bits_per_word (void);
-extern Pos get_target_char_size (void);
-extern Pos get_target_wchar_t_size (void);
-extern Pos get_target_short_size (void);
-extern Pos get_target_int_size (void);
-extern Pos get_target_long_size (void);
-extern Pos get_target_long_long_size (void);
-extern Pos get_target_float_size (void);
-extern Pos get_target_double_size (void);
-extern Pos get_target_long_double_size (void);
-extern Pos get_target_pointer_size (void);
-extern Pos get_target_maximum_alignment (void);
-extern Nat get_float_words_be (void);
-extern Nat get_words_be (void);
-extern Nat get_bytes_be (void);
-extern Nat get_bits_be (void);
-extern Nat get_strict_alignment (void);