X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Ffortran%2Fgfortran.h;h=cf0dabfc81d0dbb063e372d27e788c94f772d877;hb=40da2b01e4cc57a1cf890af8966a9fe49b748473;hp=9cd28459750e57b3f34963b74bdbcf990bc1a4aa;hpb=41481754c30dea84669a0cf470cce266af0df21c;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/fortran/gfortran.h b/gcc/fortran/gfortran.h index 9cd28459750..cf0dabfc81d 100644 --- a/gcc/fortran/gfortran.h +++ b/gcc/fortran/gfortran.h @@ -1,6 +1,6 @@ /* gfortran header file - Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, - Inc. + Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006 + Free Software Foundation, Inc. Contributed by Andy Vaught This file is part of GCC. @@ -55,8 +55,7 @@ char *alloca (); /* Major control parameters. */ -#define GFC_MAX_SYMBOL_LEN 63 -#define GFC_MAX_LINE 132 /* Characters beyond this are not seen. */ +#define GFC_MAX_SYMBOL_LEN 63 /* Must be at least 63 for F2003. */ #define GFC_MAX_DIMENSIONS 7 /* Maximum dimensions in an array. */ #define GFC_LETTERS 26 /* Number of letters in the alphabet. */ @@ -103,6 +102,21 @@ mstring; #define GFC_STD_F95_OBS (1<<1) /* Obsoleted in F95. */ #define GFC_STD_F77 (1<<0) /* Up to and including F77. */ +/* Bitmasks for the various FPE that can be enabled. */ +#define GFC_FPE_INVALID (1<<0) +#define GFC_FPE_DENORMAL (1<<1) +#define GFC_FPE_ZERO (1<<2) +#define GFC_FPE_OVERFLOW (1<<3) +#define GFC_FPE_UNDERFLOW (1<<4) +#define GFC_FPE_PRECISION (1<<5) + +/* Keep this in sync with libgfortran/io/io.h ! */ + +typedef enum + { CONVERT_NATIVE=0, CONVERT_SWAP, CONVERT_BIG, CONVERT_LITTLE } +options_convert; + + /*************************** Enums *****************************/ /* The author remains confused to this day about the convention of @@ -114,6 +128,14 @@ typedef enum { SUCCESS = 1, FAILURE } try; +/* This is returned by gfc_notification_std to know if, given the flags + that were given (-std=, -pedantic) we should issue an error, a warning + or nothing. */ + +typedef enum +{ SILENT, WARNING, ERROR } +notification; + /* Matchers return one of these three values. The difference between MATCH_NO and MATCH_ERROR is that MATCH_ERROR means that a match was successful, but that something non-syntactic is wrong and an error @@ -167,7 +189,7 @@ typedef enum INTRINSIC_AND, INTRINSIC_OR, INTRINSIC_EQV, INTRINSIC_NEQV, INTRINSIC_EQ, INTRINSIC_NE, INTRINSIC_GT, INTRINSIC_GE, INTRINSIC_LT, INTRINSIC_LE, INTRINSIC_NOT, INTRINSIC_USER, - INTRINSIC_ASSIGN, + INTRINSIC_ASSIGN, INTRINSIC_PARENTHESES, GFC_INTRINSIC_END /* Sentinel */ } gfc_intrinsic_op; @@ -205,6 +227,15 @@ typedef enum ST_STOP, ST_SUBROUTINE, ST_TYPE, ST_USE, ST_WHERE_BLOCK, ST_WHERE, ST_WRITE, ST_ASSIGNMENT, ST_POINTER_ASSIGNMENT, ST_SELECT_CASE, ST_SEQUENCE, ST_SIMPLE_IF, ST_STATEMENT_FUNCTION, ST_DERIVED_DECL, ST_LABEL_ASSIGNMENT, + ST_ENUM, ST_ENUMERATOR, ST_END_ENUM, + ST_OMP_ATOMIC, ST_OMP_BARRIER, ST_OMP_CRITICAL, ST_OMP_END_CRITICAL, + ST_OMP_END_DO, ST_OMP_END_MASTER, ST_OMP_END_ORDERED, ST_OMP_END_PARALLEL, + ST_OMP_END_PARALLEL_DO, ST_OMP_END_PARALLEL_SECTIONS, + ST_OMP_END_PARALLEL_WORKSHARE, ST_OMP_END_SECTIONS, ST_OMP_END_SINGLE, + ST_OMP_END_WORKSHARE, ST_OMP_DO, ST_OMP_FLUSH, ST_OMP_MASTER, ST_OMP_ORDERED, + ST_OMP_PARALLEL, ST_OMP_PARALLEL_DO, ST_OMP_PARALLEL_SECTIONS, + ST_OMP_PARALLEL_WORKSHARE, ST_OMP_SECTIONS, ST_OMP_SECTION, ST_OMP_SINGLE, + ST_OMP_THREADPRIVATE, ST_OMP_WORKSHARE, ST_NONE } gfc_statement; @@ -272,6 +303,7 @@ enum gfc_generic_isym_id the backend (eg. KIND). */ GFC_ISYM_NONE = 0, GFC_ISYM_ABS, + GFC_ISYM_ACCESS, GFC_ISYM_ACHAR, GFC_ISYM_ACOS, GFC_ISYM_ACOSH, @@ -282,6 +314,7 @@ enum gfc_generic_isym_id GFC_ISYM_ALL, GFC_ISYM_ALLOCATED, GFC_ISYM_ANINT, + GFC_ISYM_AND, GFC_ISYM_ANY, GFC_ISYM_ASIN, GFC_ISYM_ASINH, @@ -299,13 +332,16 @@ enum gfc_generic_isym_id GFC_ISYM_CEILING, GFC_ISYM_CHAR, GFC_ISYM_CHDIR, + GFC_ISYM_CHMOD, GFC_ISYM_CMPLX, GFC_ISYM_COMMAND_ARGUMENT_COUNT, + GFC_ISYM_COMPLEX, GFC_ISYM_CONJG, GFC_ISYM_COS, GFC_ISYM_COSH, GFC_ISYM_COUNT, GFC_ISYM_CSHIFT, + GFC_ISYM_CTIME, GFC_ISYM_DBLE, GFC_ISYM_DIM, GFC_ISYM_DOT_PRODUCT, @@ -316,10 +352,16 @@ enum gfc_generic_isym_id GFC_ISYM_ETIME, GFC_ISYM_EXP, GFC_ISYM_EXPONENT, + GFC_ISYM_FDATE, + GFC_ISYM_FGET, + GFC_ISYM_FGETC, GFC_ISYM_FLOOR, GFC_ISYM_FNUM, + GFC_ISYM_FPUT, + GFC_ISYM_FPUTC, GFC_ISYM_FRACTION, GFC_ISYM_FSTAT, + GFC_ISYM_FTELL, GFC_ISYM_GETCWD, GFC_ISYM_GETGID, GFC_ISYM_GETPID, @@ -336,6 +378,8 @@ enum gfc_generic_isym_id GFC_ISYM_IERRNO, GFC_ISYM_INDEX, GFC_ISYM_INT, + GFC_ISYM_INT2, + GFC_ISYM_INT8, GFC_ISYM_IOR, GFC_ISYM_IRAND, GFC_ISYM_ISATTY, @@ -350,13 +394,20 @@ enum gfc_generic_isym_id GFC_ISYM_LGT, GFC_ISYM_LLE, GFC_ISYM_LLT, + GFC_ISYM_LOC, GFC_ISYM_LOG, GFC_ISYM_LOG10, GFC_ISYM_LOGICAL, + GFC_ISYM_LONG, + GFC_ISYM_LSHIFT, + GFC_ISYM_LSTAT, + GFC_ISYM_MALLOC, GFC_ISYM_MATMUL, GFC_ISYM_MAX, GFC_ISYM_MAXLOC, GFC_ISYM_MAXVAL, + GFC_ISYM_MCLOCK, + GFC_ISYM_MCLOCK8, GFC_ISYM_MERGE, GFC_ISYM_MIN, GFC_ISYM_MINLOC, @@ -366,6 +417,7 @@ enum gfc_generic_isym_id GFC_ISYM_NEAREST, GFC_ISYM_NINT, GFC_ISYM_NOT, + GFC_ISYM_OR, GFC_ISYM_PACK, GFC_ISYM_PRESENT, GFC_ISYM_PRODUCT, @@ -374,14 +426,17 @@ enum gfc_generic_isym_id GFC_ISYM_RENAME, GFC_ISYM_REPEAT, GFC_ISYM_RESHAPE, + GFC_ISYM_RSHIFT, GFC_ISYM_RRSPACING, GFC_ISYM_SCALE, GFC_ISYM_SCAN, GFC_ISYM_SECOND, + GFC_ISYM_SECNDS, GFC_ISYM_SET_EXPONENT, GFC_ISYM_SHAPE, GFC_ISYM_SI_KIND, GFC_ISYM_SIGN, + GFC_ISYM_SIGNAL, GFC_ISYM_SIN, GFC_ISYM_SINH, GFC_ISYM_SIZE, @@ -400,24 +455,29 @@ enum gfc_generic_isym_id GFC_ISYM_TRANSFER, GFC_ISYM_TRANSPOSE, GFC_ISYM_TRIM, + GFC_ISYM_TTYNAM, GFC_ISYM_UBOUND, GFC_ISYM_UMASK, GFC_ISYM_UNLINK, GFC_ISYM_UNPACK, GFC_ISYM_VERIFY, + GFC_ISYM_XOR, GFC_ISYM_CONVERSION }; typedef enum gfc_generic_isym_id gfc_generic_isym_id; /************************* Structures *****************************/ +/* Used for keeping things in balanced binary trees. */ +#define BBT_HEADER(self) int priority; struct self *left, *right + /* Symbol attribute structure. */ typedef struct { /* Variable attributes. */ unsigned allocatable:1, dimension:1, external:1, intrinsic:1, - optional:1, pointer:1, save:1, target:1, - dummy:1, result:1, assign:1; + optional:1, pointer:1, save:1, target:1, volatile_:1, + dummy:1, result:1, assign:1, threadprivate:1; unsigned data:1, /* Symbol is named in a DATA statement. */ use_assoc:1; /* Symbol has been use-associated. */ @@ -468,13 +528,19 @@ typedef struct ENUM_BITFIELD (procedure_type) proc:3; + /* Special attributes for Cray pointers, pointees. */ + unsigned cray_pointer:1, cray_pointee:1; + + /* The symbol is a derived type with allocatable components, possibly nested. + */ + unsigned alloc_comp:1; } symbol_attribute; /* The following three structures are used to identify a location in - the sources. - + the sources. + gfc_file is used to maintain a tree of the source files and how they include each other @@ -482,17 +548,17 @@ symbol_attribute; which file it resides in locus point to the sourceline and the character in the source - line. + line. */ -typedef struct gfc_file +typedef struct gfc_file { struct gfc_file *included_by, *next, *up; int inclusion_line, line; char *filename; } gfc_file; -typedef struct gfc_linebuf +typedef struct gfc_linebuf { #ifdef USE_MAPPED_LOCATION source_location location; @@ -509,7 +575,7 @@ typedef struct gfc_linebuf #define gfc_linebuf_header_size (offsetof (gfc_linebuf, line)) -typedef struct +typedef struct { char *nextc; gfc_linebuf *lb; @@ -543,6 +609,8 @@ typedef struct gfc_charlen struct gfc_expr *length; struct gfc_charlen *next; tree backend_decl; + + int resolved; } gfc_charlen; @@ -564,6 +632,13 @@ typedef struct int rank; /* A rank of zero means that a variable is a scalar. */ array_type type; struct gfc_expr *lower[GFC_MAX_DIMENSIONS], *upper[GFC_MAX_DIMENSIONS]; + + /* These two fields are used with the Cray Pointer extension. */ + bool cray_pointee; /* True iff this spec belongs to a cray pointee. */ + bool cp_was_assumed; /* AS_ASSUMED_SIZE cp arrays are converted to + AS_EXPLICIT, but we want to remember that we + did this. */ + } gfc_array_spec; @@ -576,7 +651,7 @@ typedef struct gfc_component const char *name; gfc_typespec ts; - int pointer, dimension; + int pointer, allocatable, dimension; gfc_array_spec *as; tree backend_decl; @@ -632,6 +707,60 @@ gfc_namelist; #define gfc_get_namelist() gfc_getmem(sizeof(gfc_namelist)) +enum +{ + OMP_LIST_PRIVATE, + OMP_LIST_FIRSTPRIVATE, + OMP_LIST_LASTPRIVATE, + OMP_LIST_COPYPRIVATE, + OMP_LIST_SHARED, + OMP_LIST_COPYIN, + OMP_LIST_PLUS, + OMP_LIST_REDUCTION_FIRST = OMP_LIST_PLUS, + OMP_LIST_MULT, + OMP_LIST_SUB, + OMP_LIST_AND, + OMP_LIST_OR, + OMP_LIST_EQV, + OMP_LIST_NEQV, + OMP_LIST_MAX, + OMP_LIST_MIN, + OMP_LIST_IAND, + OMP_LIST_IOR, + OMP_LIST_IEOR, + OMP_LIST_REDUCTION_LAST = OMP_LIST_IEOR, + OMP_LIST_NUM +}; + +/* Because a symbol can belong to multiple namelists, they must be + linked externally to the symbol itself. */ +typedef struct gfc_omp_clauses +{ + struct gfc_expr *if_expr; + struct gfc_expr *num_threads; + gfc_namelist *lists[OMP_LIST_NUM]; + enum + { + OMP_SCHED_NONE, + OMP_SCHED_STATIC, + OMP_SCHED_DYNAMIC, + OMP_SCHED_GUIDED, + OMP_SCHED_RUNTIME + } sched_kind; + struct gfc_expr *chunk_size; + enum + { + OMP_DEFAULT_UNKNOWN, + OMP_DEFAULT_NONE, + OMP_DEFAULT_PRIVATE, + OMP_DEFAULT_SHARED + } default_sharing; + bool nowait, ordered; +} +gfc_omp_clauses; + +#define gfc_get_omp_clauses() gfc_getmem(sizeof(gfc_omp_clauses)) + /* The gfc_st_label structure is a doubly linked list attached to a namespace that records the usage of statement labels within that @@ -639,6 +768,8 @@ gfc_namelist; /* TODO: Make format/statement specifics a union. */ typedef struct gfc_st_label { + BBT_HEADER(gfc_st_label); + int value; gfc_sl_type defined, referenced; @@ -648,8 +779,6 @@ typedef struct gfc_st_label tree backend_decl; locus where; - - struct gfc_st_label *prev, *next; } gfc_st_label; @@ -708,6 +837,9 @@ typedef struct gfc_symbol struct gfc_symbol *result; /* function result symbol */ gfc_component *components; /* Derived type components */ + /* Defined only for Cray pointees; points to their pointer. */ + struct gfc_symbol *cp_pointer; + struct gfc_symbol *common_next; /* Links for COMMON syms */ /* This is in fact a gfc_common_head but it is only used for pointer @@ -718,6 +850,8 @@ typedef struct gfc_symbol order. */ int dummy_order; + int entry_id; + gfc_namelist *namelist, *namelist_tail; /* Change management fields. Symbols that might be modified by the @@ -732,6 +866,8 @@ typedef struct gfc_symbol /* Nonzero if all equivalences associated with this symbol have been processed. */ unsigned equiv_built:1; + /* Set if this variable is used as an index name in a FORALL. */ + unsigned forall_index:1; int refs; struct gfc_namespace *ns; /* namespace containing this symbol */ @@ -745,10 +881,10 @@ gfc_symbol; typedef struct gfc_common_head { locus where; - int use_assoc, saved; + char use_assoc, saved, threadprivate; char name[GFC_MAX_SYMBOL_LEN + 1]; struct gfc_symbol *head; -} +} gfc_common_head; #define gfc_get_common_head() gfc_getmem(sizeof(gfc_common_head)) @@ -777,8 +913,6 @@ gfc_entry_list; several symtrees pointing to the same symbol node via USE statements. */ -#define BBT_HEADER(self) int priority; struct self *left, *right - typedef struct gfc_symtree { BBT_HEADER (gfc_symtree); @@ -795,6 +929,16 @@ typedef struct gfc_symtree } gfc_symtree; +/* A linked list of derived types in the namespace. */ +typedef struct gfc_dt_list +{ + struct gfc_symbol *derived; + struct gfc_dt_list *next; +} +gfc_dt_list; + +#define gfc_get_dt_list() gfc_getmem(sizeof(gfc_dt_list)) + /* A namespace describes the contents of procedure, module or interface block. */ @@ -807,7 +951,7 @@ typedef struct gfc_namespace /* Tree containing all the user-defined operators in the namespace. */ gfc_symtree *uop_root; /* Tree containing all the common blocks. */ - gfc_symtree *common_root; + gfc_symtree *common_root; /* If set_flag[letter] is set, an implicit type has been set for letter. */ int set_flag[GFC_LETTERS]; @@ -822,6 +966,10 @@ typedef struct gfc_namespace /* Points to the equivalences set up in this namespace. */ struct gfc_equiv *equiv; + + /* Points to the equivalence groups produced by trans_common. */ + struct gfc_equiv_list *equiv_lists; + gfc_interface *operator[GFC_INTRINSIC_OPS]; /* Points to the parent namespace, i.e. the namespace of a module or @@ -854,6 +1002,9 @@ typedef struct gfc_namespace /* A list of all alternate entry points to this procedure (or NULL). */ gfc_entry_list *entries; + /* A list of all derived types in this procedure (or NULL). */ + gfc_dt_list *derived_types; + /* Set to 1 if namespace is a BLOCK DATA program unit. */ int is_block_data; } @@ -1091,6 +1242,9 @@ typedef struct gfc_expr /* True if it is converted from Hollerith constant. */ unsigned int from_H : 1; + /* True if the expression is a call to a function that returns an array, + and if we have decided not to allocate temporary data for that array. */ + unsigned int inline_noncopying_intrinsic : 1; union { @@ -1147,7 +1301,7 @@ gfc_expr; typedef struct { /* Values really representable by the target. */ - mpz_t huge, pedantic_min_int, min_int, max_int; + mpz_t huge, pedantic_min_int, min_int; int kind, radix, digits, bit_size, range; @@ -1209,6 +1363,21 @@ gfc_equiv; #define gfc_get_equiv() gfc_getmem(sizeof(gfc_equiv)) +/* Holds a single equivalence member after processing. */ +typedef struct gfc_equiv_info +{ + gfc_symbol *sym; + HOST_WIDE_INT offset; + HOST_WIDE_INT length; + struct gfc_equiv_info *next; +} gfc_equiv_info; + +/* Holds equivalence groups, after they have been processed. */ +typedef struct gfc_equiv_list +{ + gfc_equiv_info *equiv; + struct gfc_equiv_list *next; +} gfc_equiv_list; /* gfc_case stores the selector list of a case statement. The *low and *high pointers can point to the same expression in the case of @@ -1271,7 +1440,7 @@ gfc_alloc; typedef struct { gfc_expr *unit, *file, *status, *access, *form, *recl, - *blank, *position, *action, *delim, *pad, *iostat, *iomsg; + *blank, *position, *action, *delim, *pad, *iostat, *iomsg, *convert; gfc_st_label *err; } gfc_open; @@ -1298,7 +1467,7 @@ typedef struct gfc_expr *unit, *file, *iostat, *exist, *opened, *number, *named, *name, *access, *sequential, *direct, *form, *formatted, *unformatted, *recl, *nextrec, *blank, *position, *action, *read, - *write, *readwrite, *delim, *pad, *iolength, *iomsg; + *write, *readwrite, *delim, *pad, *iolength, *iomsg, *convert, *strm_pos; gfc_st_label *err; @@ -1315,7 +1484,7 @@ typedef struct gfc_st_label *format_label; gfc_st_label *err, *end, *eor; - locus eor_where, end_where; + locus eor_where, end_where, err_where; } gfc_dt; @@ -1332,14 +1501,20 @@ gfc_forall_iterator; typedef enum { EXEC_NOP = 1, EXEC_ASSIGN, EXEC_LABEL_ASSIGN, EXEC_POINTER_ASSIGN, - EXEC_GOTO, EXEC_CALL, EXEC_RETURN, EXEC_ENTRY, - EXEC_PAUSE, EXEC_STOP, EXEC_CONTINUE, + EXEC_GOTO, EXEC_CALL, EXEC_ASSIGN_CALL, EXEC_RETURN, EXEC_ENTRY, + EXEC_PAUSE, EXEC_STOP, EXEC_CONTINUE, EXEC_INIT_ASSIGN, EXEC_IF, EXEC_ARITHMETIC_IF, EXEC_DO, EXEC_DO_WHILE, EXEC_SELECT, EXEC_FORALL, EXEC_WHERE, EXEC_CYCLE, EXEC_EXIT, EXEC_ALLOCATE, EXEC_DEALLOCATE, EXEC_OPEN, EXEC_CLOSE, EXEC_READ, EXEC_WRITE, EXEC_IOLENGTH, EXEC_TRANSFER, EXEC_DT_END, - EXEC_BACKSPACE, EXEC_ENDFILE, EXEC_INQUIRE, EXEC_REWIND, EXEC_FLUSH + EXEC_BACKSPACE, EXEC_ENDFILE, EXEC_INQUIRE, EXEC_REWIND, EXEC_FLUSH, + EXEC_OMP_CRITICAL, EXEC_OMP_DO, EXEC_OMP_FLUSH, EXEC_OMP_MASTER, + EXEC_OMP_ORDERED, EXEC_OMP_PARALLEL, EXEC_OMP_PARALLEL_DO, + EXEC_OMP_PARALLEL_SECTIONS, EXEC_OMP_PARALLEL_WORKSHARE, + EXEC_OMP_SECTIONS, EXEC_OMP_SINGLE, EXEC_OMP_WORKSHARE, + EXEC_OMP_ATOMIC, EXEC_OMP_BARRIER, EXEC_OMP_END_NOWAIT, + EXEC_OMP_END_SINGLE } gfc_exec_op; @@ -1373,11 +1548,15 @@ typedef struct gfc_code struct gfc_code *whichloop; int stop_code; gfc_entry_list *entry; + gfc_omp_clauses *omp_clauses; + const char *omp_name; + gfc_namelist *omp_namelist; + bool omp_bool; } ext; /* Points to additional structures required by statement */ /* Backend_decl is used for cycle and break labels in do loops, and - * probably for other constructs as well, once we translate them. */ + probably for other constructs as well, once we translate them. */ tree backend_decl; } gfc_code; @@ -1422,18 +1601,32 @@ typedef struct { char *module_dir; gfc_source_form source_form; + /* Maximum line lengths in fixed- and free-form source, respectively. + When fixed_line_length or free_line_length are 0, the whole line is used, + regardless of length. + + If the user requests a fixed_line_length <7 then gfc_init_options() + emits a fatal error. */ int fixed_line_length; + int free_line_length; + /* Maximum number of continuation lines in fixed- and free-form source, + respectively. */ + int max_continue_fixed; + int max_continue_free; int max_identifier_length; int verbose; int warn_aliasing; + int warn_ampersand; int warn_conversion; int warn_implicit_interface; int warn_line_truncation; - int warn_underflow; int warn_surprising; - int warn_unused_labels; + int warn_tabs; + int warn_underflow; + int max_errors; + int flag_all_intrinsics; int flag_default_double; int flag_default_integer; int flag_default_real; @@ -1442,20 +1635,27 @@ typedef struct int flag_second_underscore; int flag_implicit_none; int flag_max_stack_var_size; - int flag_module_access_private; - int flag_no_backend; + int flag_range_check; int flag_pack_derived; int flag_repack_arrays; + int flag_preprocessed; int flag_f2c; int flag_automatic; int flag_backslash; + int flag_external_blas; + int blas_matmul_limit; + int flag_cray_pointer; int flag_d_lines; + int flag_openmp; - int q_kind; + int fpe; int warn_std; int allow_std; int warn_nonstd_intrinsics; + int fshort_enums; + int convert; + int record_marker; } gfc_option_t; @@ -1506,7 +1706,7 @@ void gfc_scanner_init_1 (void); void gfc_add_include_path (const char *); void gfc_release_include_path (void); -FILE *gfc_open_included_file (const char *); +FILE *gfc_open_included_file (const char *, bool); int gfc_at_end (void); int gfc_at_eof (void); @@ -1522,6 +1722,7 @@ int gfc_peek_char (void); void gfc_error_recovery (void); void gfc_gobble_whitespace (void); try gfc_new_file (void); +const char * gfc_read_orig_filename (const char *, const char **); extern gfc_source_form gfc_current_form; extern const char *gfc_source_file; @@ -1579,7 +1780,9 @@ void gfc_fatal_error (const char *, ...) ATTRIBUTE_NORETURN ATTRIBUTE_GCC_GFC(1, void gfc_internal_error (const char *, ...) ATTRIBUTE_NORETURN ATTRIBUTE_GCC_GFC(1,2); void gfc_clear_error (void); int gfc_error_check (void); +int gfc_error_flag_test (void); +notification gfc_notification_std (int); try gfc_notify_std (int, const char *, ...) ATTRIBUTE_GCC_GFC(2,3); /* A general purpose syntax error. */ @@ -1598,6 +1801,8 @@ void gfc_get_errors (int *, int *); /* arith.c */ void gfc_arith_init_1 (void); void gfc_arith_done_1 (void); +gfc_expr *gfc_enum_initializer (gfc_expr *, locus); +arith gfc_check_integer_range (mpz_t p, int kind); /* trans-types.c */ int gfc_validate_kind (bt, int, bool); @@ -1610,6 +1815,7 @@ extern int gfc_default_character_kind; extern int gfc_default_logical_kind; extern int gfc_default_complex_kind; extern int gfc_c_int_kind; +extern int gfc_intio_kind; /* symbol.c */ void gfc_clear_new_implicit (void); @@ -1625,20 +1831,26 @@ void gfc_get_component_attr (symbol_attribute *, gfc_component *); void gfc_set_sym_referenced (gfc_symbol * sym); +try gfc_add_attribute (symbol_attribute *, locus *); try gfc_add_allocatable (symbol_attribute *, locus *); try gfc_add_dimension (symbol_attribute *, const char *, locus *); try gfc_add_external (symbol_attribute *, locus *); try gfc_add_intrinsic (symbol_attribute *, locus *); try gfc_add_optional (symbol_attribute *, locus *); try gfc_add_pointer (symbol_attribute *, locus *); +try gfc_add_cray_pointer (symbol_attribute *, locus *); +try gfc_add_cray_pointee (symbol_attribute *, locus *); +try gfc_mod_pointee_as (gfc_array_spec *as); try gfc_add_result (symbol_attribute *, const char *, locus *); try gfc_add_save (symbol_attribute *, const char *, locus *); +try gfc_add_threadprivate (symbol_attribute *, const char *, locus *); try gfc_add_saved_common (symbol_attribute *, locus *); try gfc_add_target (symbol_attribute *, locus *); try gfc_add_dummy (symbol_attribute *, const char *, locus *); try gfc_add_generic (symbol_attribute *, const char *, locus *); try gfc_add_common (symbol_attribute *, locus *); try gfc_add_in_common (symbol_attribute *, const char *, locus *); +try gfc_add_in_equivalence (symbol_attribute *, const char *, locus *); try gfc_add_data (symbol_attribute *, const char *, locus *); try gfc_add_in_namelist (symbol_attribute *, const char *, locus *); try gfc_add_sequence (symbol_attribute *, const char *, locus *); @@ -1647,6 +1859,7 @@ try gfc_add_pure (symbol_attribute *, locus *); try gfc_add_recursive (symbol_attribute *, locus *); try gfc_add_function (symbol_attribute *, const char *, locus *); try gfc_add_subroutine (symbol_attribute *, const char *, locus *); +try gfc_add_volatile (symbol_attribute *, const char *, locus *); try gfc_add_access (symbol_attribute *, gfc_access, const char *, locus *); try gfc_add_flavor (symbol_attribute *, sym_flavor, const char *, locus *); @@ -1690,6 +1903,7 @@ int gfc_symbols_could_alias (gfc_symbol *, gfc_symbol *); void gfc_undo_symbols (void); void gfc_commit_symbols (void); +void gfc_commit_symbol (gfc_symbol * sym); void gfc_free_namespace (gfc_namespace *); void gfc_symbol_init_2 (void); @@ -1724,6 +1938,7 @@ try gfc_convert_type_warn (gfc_expr *, gfc_typespec *, int, int); int gfc_generic_intrinsic (const char *); int gfc_specific_intrinsic (const char *); int gfc_intrinsic_name (const char *, int); +int gfc_intrinsic_actual_ok (const char *, const bool); gfc_intrinsic_sym *gfc_find_function (const char *); match gfc_intrinsic_func_interface (gfc_expr *, int); @@ -1741,16 +1956,28 @@ void gfc_free_equiv (gfc_equiv *); void gfc_free_data (gfc_data *); void gfc_free_case_list (gfc_case *); +/* matchexp.c -- FIXME too? */ +gfc_expr *gfc_get_parentheses (gfc_expr *); + +/* openmp.c */ +void gfc_free_omp_clauses (gfc_omp_clauses *); +void gfc_resolve_omp_directive (gfc_code *, gfc_namespace *); +void gfc_resolve_do_iterator (gfc_code *, gfc_symbol *); +void gfc_resolve_omp_parallel_blocks (gfc_code *, gfc_namespace *); +void gfc_resolve_omp_do_blocks (gfc_code *, gfc_namespace *); + /* expr.c */ void gfc_free_actual_arglist (gfc_actual_arglist *); gfc_actual_arglist *gfc_copy_actual_arglist (gfc_actual_arglist *); const char *gfc_extract_int (gfc_expr *, int *); +gfc_expr *gfc_expr_to_initialize (gfc_expr *); gfc_expr *gfc_build_conversion (gfc_expr *); void gfc_free_ref_list (gfc_ref *); void gfc_type_convert_binary (gfc_expr *); int gfc_is_constant_expr (gfc_expr *); try gfc_simplify_expr (gfc_expr *, int); +int gfc_has_vector_index (gfc_expr *); gfc_expr *gfc_get_expr (void); void gfc_free_expr (gfc_expr *); @@ -1774,6 +2001,7 @@ try gfc_check_assign_symbol (gfc_symbol *, gfc_expr *); gfc_expr *gfc_default_initializer (gfc_typespec *); gfc_expr *gfc_get_variable_expr (gfc_symtree *); +void gfc_expr_set_symbols_referenced (gfc_expr * expr); /* st.c */ extern gfc_code new_st; @@ -1787,12 +2015,14 @@ void gfc_free_statements (gfc_code *); /* resolve.c */ try gfc_resolve_expr (gfc_expr *); void gfc_resolve (gfc_namespace *); +void gfc_resolve_blocks (gfc_code *, gfc_namespace *); int gfc_impure_variable (gfc_symbol *); int gfc_pure (gfc_symbol *); int gfc_elemental (gfc_symbol *); try gfc_resolve_iterator (gfc_iterator *, bool); try gfc_resolve_index (gfc_expr *, int); try gfc_resolve_dim_arg (gfc_expr *); +int gfc_is_formal_arg (void); /* array.c */ void gfc_free_array_spec (gfc_array_spec *); @@ -1811,6 +2041,7 @@ void gfc_simplify_iterator_var (gfc_expr *); try gfc_expand_constructor (gfc_expr *); int gfc_constant_ac (gfc_expr *); int gfc_expanded_ac (gfc_expr *); +void gfc_resolve_character_array_constructor (gfc_expr *); try gfc_resolve_array_constructor (gfc_expr *); try gfc_check_constructor_type (gfc_expr *); try gfc_check_iter_variable (gfc_expr *); @@ -1829,6 +2060,7 @@ int gfc_is_compile_time_shape (gfc_array_spec *); /* interface.c -- FIXME: some of these should be in symbol.c */ void gfc_free_interface (gfc_interface *); +int gfc_compare_derived_types (gfc_symbol *, gfc_symbol *); int gfc_compare_types (gfc_typespec *, gfc_typespec *); void gfc_check_interfaces (gfc_namespace *); void gfc_procedure_use (gfc_symbol *, gfc_actual_arglist **, locus *); @@ -1873,9 +2105,26 @@ void gfc_insert_bbt (void *, void *, compare_fn); void gfc_delete_bbt (void *, void *, compare_fn); /* dump-parse-tree.c */ +void gfc_show_actual_arglist (gfc_actual_arglist *); +void gfc_show_array_ref (gfc_array_ref *); +void gfc_show_array_spec (gfc_array_spec *); +void gfc_show_attr (symbol_attribute *); +void gfc_show_code (int, gfc_code *); +void gfc_show_components (gfc_symbol *); +void gfc_show_constructor (gfc_constructor *); +void gfc_show_equiv (gfc_equiv *); +void gfc_show_expr (gfc_expr *); +void gfc_show_namelist (gfc_namelist *); void gfc_show_namespace (gfc_namespace *); +void gfc_show_ref (gfc_ref *); +void gfc_show_symbol (gfc_symbol *); +void gfc_show_typespec (gfc_typespec *); /* parse.c */ try gfc_parse_file (void); +void global_used (gfc_gsymbol *, locus *); + +/* dependency.c */ +int gfc_dep_compare_expr (gfc_expr *, gfc_expr *); #endif /* GCC_GFORTRAN_H */