OSDN Git Service

fortran/
[pf3gnuchains/gcc-fork.git] / gcc / fortran / gfortran.h
1 /* gfortran header file
2    Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation,
3    Inc.
4    Contributed by Andy Vaught
5
6 This file is part of GCC.
7
8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 2, or (at your option) any later
11 version.
12
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
16 for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING.  If not, write to the Free
20 Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
21 02110-1301, USA.  */
22
23 #ifndef GCC_GFORTRAN_H
24 #define GCC_GFORTRAN_H
25
26 /* It's probably insane to have this large of a header file, but it
27    seemed like everything had to be recompiled anyway when a change
28    was made to a header file, and there were ordering issues with
29    multiple header files.  Besides, Microsoft's winnt.h was 250k last
30    time I looked, so by comparison this is perfectly reasonable.  */
31
32 #include "system.h"
33 #include "intl.h"
34 #include "coretypes.h"
35 #include "input.h"
36
37 /* The following ifdefs are recommended by the autoconf documentation
38    for any code using alloca.  */
39
40 /* AIX requires this to be the first thing in the file.  */
41 #ifdef __GNUC__
42 #else /* not __GNUC__ */
43 #ifdef HAVE_ALLOCA_H
44 #include <alloca.h>
45 #else /* do not HAVE_ALLOCA_H */
46 #ifdef _AIX
47 #pragma alloca
48 #else
49 #ifndef alloca                  /* predefined by HP cc +Olibcalls */
50 char *alloca ();
51 #endif /* not predefined */
52 #endif /* not _AIX */
53 #endif /* do not HAVE_ALLOCA_H */
54 #endif /* not __GNUC__ */
55
56 /* Major control parameters.  */
57
58 #define GFC_MAX_SYMBOL_LEN 63
59 #define GFC_MAX_LINE 132        /* Characters beyond this are not seen.  */
60 #define GFC_MAX_DIMENSIONS 7    /* Maximum dimensions in an array.  */
61 #define GFC_LETTERS 26          /* Number of letters in the alphabet.  */
62
63 #define free(x) Use_gfc_free_instead_of_free()
64 #define gfc_is_whitespace(c) ((c==' ') || (c=='\t'))
65
66 #ifndef NULL
67 #define NULL ((void *) 0)
68 #endif
69
70 /* Stringization.  */
71 #define stringize(x) expand_macro(x)
72 #define expand_macro(x) # x
73
74 /* For a the runtime library, a standard prefix is a requirement to
75    avoid cluttering the namespace with things nobody asked for.  It's
76    ugly to look at and a pain to type when you add the prefix by hand,
77    so we hide it behind a macro.  */
78 #define PREFIX(x) "_gfortran_" x
79 #define PREFIX_LEN 10
80
81 #define BLANK_COMMON_NAME "__BLNK__"
82
83 /* Macro to initialize an mstring structure.  */
84 #define minit(s, t) { s, NULL, t }
85
86 /* Structure for storing strings to be matched by gfc_match_string.  */
87 typedef struct
88 {
89   const char *string;
90   const char *mp;
91   int tag;
92 }
93 mstring;
94
95
96 /* Flags to specify which standard/extension contains a feature.  */
97 #define GFC_STD_LEGACY          (1<<6) /* Backward compatibility.  */
98 #define GFC_STD_GNU             (1<<5)    /* GNU Fortran extension.  */
99 #define GFC_STD_F2003           (1<<4)    /* New in F2003.  */
100 /* Note that no features were obsoleted nor deleted in F2003.  */
101 #define GFC_STD_F95             (1<<3)    /* New in F95.  */
102 #define GFC_STD_F95_DEL         (1<<2)    /* Deleted in F95.  */
103 #define GFC_STD_F95_OBS         (1<<1)    /* Obsoleted in F95.  */
104 #define GFC_STD_F77             (1<<0)    /* Up to and including F77.  */
105
106 /* Bitmasks for the various FPE that can be enabled.  */
107 #define GFC_FPE_INVALID    (1<<0)
108 #define GFC_FPE_DENORMAL   (1<<1)
109 #define GFC_FPE_ZERO       (1<<2)
110 #define GFC_FPE_OVERFLOW   (1<<3)
111 #define GFC_FPE_UNDERFLOW  (1<<4)
112 #define GFC_FPE_PRECISION  (1<<5)
113
114
115 /*************************** Enums *****************************/
116
117 /* The author remains confused to this day about the convention of
118    returning '0' for 'SUCCESS'... or was it the other way around?  The
119    following enum makes things much more readable.  We also start
120    values off at one instead of zero.  */
121
122 typedef enum
123 { SUCCESS = 1, FAILURE }
124 try;
125
126 /* Matchers return one of these three values.  The difference between
127    MATCH_NO and MATCH_ERROR is that MATCH_ERROR means that a match was
128    successful, but that something non-syntactic is wrong and an error
129    has already been issued.  */
130
131 typedef enum
132 { MATCH_NO = 1, MATCH_YES, MATCH_ERROR }
133 match;
134
135 typedef enum
136 { FORM_FREE, FORM_FIXED, FORM_UNKNOWN }
137 gfc_source_form;
138
139 typedef enum
140 { BT_UNKNOWN = 1, BT_INTEGER, BT_REAL, BT_COMPLEX,
141   BT_LOGICAL, BT_CHARACTER, BT_DERIVED, BT_PROCEDURE, BT_HOLLERITH
142 }
143 bt;
144
145 /* Expression node types.  */
146 typedef enum
147 { EXPR_OP = 1, EXPR_FUNCTION, EXPR_CONSTANT, EXPR_VARIABLE,
148   EXPR_SUBSTRING, EXPR_STRUCTURE, EXPR_ARRAY, EXPR_NULL
149 }
150 expr_t;
151
152 /* Array types.  */
153 typedef enum
154 { AS_EXPLICIT = 1, AS_ASSUMED_SHAPE, AS_DEFERRED,
155   AS_ASSUMED_SIZE, AS_UNKNOWN
156 }
157 array_type;
158
159 typedef enum
160 { AR_FULL = 1, AR_ELEMENT, AR_SECTION, AR_UNKNOWN }
161 ar_type;
162
163 /* Statement label types.  */
164 typedef enum
165 { ST_LABEL_UNKNOWN = 1, ST_LABEL_TARGET,
166   ST_LABEL_BAD_TARGET, ST_LABEL_FORMAT
167 }
168 gfc_sl_type;
169
170 /* Intrinsic operators.  */
171 typedef enum
172 { GFC_INTRINSIC_BEGIN = 0,
173   INTRINSIC_NONE = -1, INTRINSIC_UPLUS = GFC_INTRINSIC_BEGIN,
174   INTRINSIC_UMINUS, INTRINSIC_PLUS, INTRINSIC_MINUS, INTRINSIC_TIMES,
175   INTRINSIC_DIVIDE, INTRINSIC_POWER, INTRINSIC_CONCAT,
176   INTRINSIC_AND, INTRINSIC_OR, INTRINSIC_EQV, INTRINSIC_NEQV,
177   INTRINSIC_EQ, INTRINSIC_NE, INTRINSIC_GT, INTRINSIC_GE,
178   INTRINSIC_LT, INTRINSIC_LE, INTRINSIC_NOT, INTRINSIC_USER,
179   INTRINSIC_ASSIGN,
180   GFC_INTRINSIC_END /* Sentinel */
181 }
182 gfc_intrinsic_op;
183
184
185 /* Strings for all intrinsic operators.  */
186 extern mstring intrinsic_operators[];
187
188
189 /* This macro is the number of intrinsic operators that exist.
190    Assumptions are made about the numbering of the interface_op enums.  */
191 #define GFC_INTRINSIC_OPS GFC_INTRINSIC_END
192
193 /* Arithmetic results.  */
194 typedef enum
195 { ARITH_OK = 1, ARITH_OVERFLOW, ARITH_UNDERFLOW, ARITH_NAN,
196   ARITH_DIV0, ARITH_INCOMMENSURATE, ARITH_ASYMMETRIC
197 }
198 arith;
199
200 /* Statements.  */
201 typedef enum
202 {
203   ST_ARITHMETIC_IF, ST_ALLOCATE, ST_ATTR_DECL, ST_BACKSPACE, ST_BLOCK_DATA,
204   ST_CALL, ST_CASE, ST_CLOSE, ST_COMMON, ST_CONTINUE, ST_CONTAINS, ST_CYCLE,
205   ST_DATA, ST_DATA_DECL, ST_DEALLOCATE, ST_DO, ST_ELSE, ST_ELSEIF,
206   ST_ELSEWHERE, ST_END_BLOCK_DATA, ST_ENDDO, ST_IMPLIED_ENDDO,
207   ST_END_FILE, ST_FLUSH, ST_END_FORALL, ST_END_FUNCTION, ST_ENDIF,
208   ST_END_INTERFACE, ST_END_MODULE, ST_END_PROGRAM, ST_END_SELECT,
209   ST_END_SUBROUTINE, ST_END_WHERE, ST_END_TYPE, ST_ENTRY, ST_EQUIVALENCE,
210   ST_EXIT, ST_FORALL, ST_FORALL_BLOCK, ST_FORMAT, ST_FUNCTION, ST_GOTO,
211   ST_IF_BLOCK, ST_IMPLICIT, ST_IMPLICIT_NONE, ST_INQUIRE, ST_INTERFACE,
212   ST_PARAMETER, ST_MODULE, ST_MODULE_PROC, ST_NAMELIST, ST_NULLIFY, ST_OPEN,
213   ST_PAUSE, ST_PRIVATE, ST_PROGRAM, ST_PUBLIC, ST_READ, ST_RETURN, ST_REWIND,
214   ST_STOP, ST_SUBROUTINE, ST_TYPE, ST_USE, ST_WHERE_BLOCK, ST_WHERE, ST_WRITE,
215   ST_ASSIGNMENT, ST_POINTER_ASSIGNMENT, ST_SELECT_CASE, ST_SEQUENCE,
216   ST_SIMPLE_IF, ST_STATEMENT_FUNCTION, ST_DERIVED_DECL, ST_LABEL_ASSIGNMENT,
217   ST_ENUM, ST_ENUMERATOR, ST_END_ENUM, ST_NONE
218 }
219 gfc_statement;
220
221
222 /* Types of interfaces that we can have.  Assignment interfaces are
223    considered to be intrinsic operators.  */
224 typedef enum
225 {
226   INTERFACE_NAMELESS = 1, INTERFACE_GENERIC,
227   INTERFACE_INTRINSIC_OP, INTERFACE_USER_OP
228 }
229 interface_type;
230
231 /* Symbol flavors: these are all mutually exclusive.
232    10 elements = 4 bits.  */
233 typedef enum sym_flavor
234 {
235   FL_UNKNOWN = 0, FL_PROGRAM, FL_BLOCK_DATA, FL_MODULE, FL_VARIABLE,
236   FL_PARAMETER, FL_LABEL, FL_PROCEDURE, FL_DERIVED, FL_NAMELIST
237 }
238 sym_flavor;
239
240 /* Procedure types.  7 elements = 3 bits.  */
241 typedef enum procedure_type
242 { PROC_UNKNOWN, PROC_MODULE, PROC_INTERNAL, PROC_DUMMY,
243   PROC_INTRINSIC, PROC_ST_FUNCTION, PROC_EXTERNAL
244 }
245 procedure_type;
246
247 /* Intent types.  */
248 typedef enum sym_intent
249 { INTENT_UNKNOWN = 0, INTENT_IN, INTENT_OUT, INTENT_INOUT
250 }
251 sym_intent;
252
253 /* Access types.  */
254 typedef enum gfc_access
255 { ACCESS_UNKNOWN = 0, ACCESS_PUBLIC, ACCESS_PRIVATE
256 }
257 gfc_access;
258
259 /* Flags to keep track of where an interface came from.
260    4 elements = 2 bits.  */
261 typedef enum ifsrc
262 { IFSRC_UNKNOWN = 0, IFSRC_DECL, IFSRC_IFBODY, IFSRC_USAGE
263 }
264 ifsrc;
265
266 /* Strings for all symbol attributes.  We use these for dumping the
267    parse tree, in error messages, and also when reading and writing
268    modules.  In symbol.c.  */
269 extern const mstring flavors[];
270 extern const mstring procedures[];
271 extern const mstring intents[];
272 extern const mstring access_types[];
273 extern const mstring ifsrc_types[];
274
275 /* Enumeration of all the generic intrinsic functions.  Used by the
276    backend for identification of a function.  */
277
278 enum gfc_generic_isym_id
279 {
280   /* GFC_ISYM_NONE is used for intrinsics which will never be seen by
281      the backend (eg. KIND).  */
282   GFC_ISYM_NONE = 0,
283   GFC_ISYM_ABS,
284   GFC_ISYM_ACHAR,
285   GFC_ISYM_ACOS,
286   GFC_ISYM_ACOSH,
287   GFC_ISYM_ADJUSTL,
288   GFC_ISYM_ADJUSTR,
289   GFC_ISYM_AIMAG,
290   GFC_ISYM_AINT,
291   GFC_ISYM_ALL,
292   GFC_ISYM_ALLOCATED,
293   GFC_ISYM_ANINT,
294   GFC_ISYM_AND,
295   GFC_ISYM_ANY,
296   GFC_ISYM_ASIN,
297   GFC_ISYM_ASINH,
298   GFC_ISYM_ASSOCIATED,
299   GFC_ISYM_ATAN,
300   GFC_ISYM_ATANH,
301   GFC_ISYM_ATAN2,
302   GFC_ISYM_J0,
303   GFC_ISYM_J1,
304   GFC_ISYM_JN,
305   GFC_ISYM_Y0,
306   GFC_ISYM_Y1,
307   GFC_ISYM_YN,
308   GFC_ISYM_BTEST,
309   GFC_ISYM_CEILING,
310   GFC_ISYM_CHAR,
311   GFC_ISYM_CHDIR,
312   GFC_ISYM_CMPLX,
313   GFC_ISYM_COMMAND_ARGUMENT_COUNT,
314   GFC_ISYM_COMPLEX,
315   GFC_ISYM_CONJG,
316   GFC_ISYM_COS,
317   GFC_ISYM_COSH,
318   GFC_ISYM_COUNT,
319   GFC_ISYM_CSHIFT,
320   GFC_ISYM_CTIME,
321   GFC_ISYM_DBLE,
322   GFC_ISYM_DIM,
323   GFC_ISYM_DOT_PRODUCT,
324   GFC_ISYM_DPROD,
325   GFC_ISYM_EOSHIFT,
326   GFC_ISYM_ERF,
327   GFC_ISYM_ERFC,
328   GFC_ISYM_ETIME,
329   GFC_ISYM_EXP,
330   GFC_ISYM_EXPONENT,
331   GFC_ISYM_FDATE,
332   GFC_ISYM_FGET,
333   GFC_ISYM_FGETC,
334   GFC_ISYM_FLOOR,
335   GFC_ISYM_FNUM,
336   GFC_ISYM_FPUT,
337   GFC_ISYM_FPUTC,
338   GFC_ISYM_FRACTION,
339   GFC_ISYM_FSTAT,
340   GFC_ISYM_FTELL,
341   GFC_ISYM_GETCWD,
342   GFC_ISYM_GETGID,
343   GFC_ISYM_GETPID,
344   GFC_ISYM_GETUID,
345   GFC_ISYM_HOSTNM,
346   GFC_ISYM_IACHAR,
347   GFC_ISYM_IAND,
348   GFC_ISYM_IARGC,
349   GFC_ISYM_IBCLR,
350   GFC_ISYM_IBITS,
351   GFC_ISYM_IBSET,
352   GFC_ISYM_ICHAR,
353   GFC_ISYM_IEOR,
354   GFC_ISYM_IERRNO,
355   GFC_ISYM_INDEX,
356   GFC_ISYM_INT,
357   GFC_ISYM_IOR,
358   GFC_ISYM_IRAND,
359   GFC_ISYM_ISATTY,
360   GFC_ISYM_ISHFT,
361   GFC_ISYM_ISHFTC,
362   GFC_ISYM_KILL,
363   GFC_ISYM_LBOUND,
364   GFC_ISYM_LEN,
365   GFC_ISYM_LEN_TRIM,
366   GFC_ISYM_LINK,
367   GFC_ISYM_LGE,
368   GFC_ISYM_LGT,
369   GFC_ISYM_LLE,
370   GFC_ISYM_LLT,
371   GFC_ISYM_LOG,
372   GFC_ISYM_LOC,
373   GFC_ISYM_LOG10,
374   GFC_ISYM_LOGICAL,
375   GFC_ISYM_MALLOC,
376   GFC_ISYM_MATMUL,
377   GFC_ISYM_MAX,
378   GFC_ISYM_MAXLOC,
379   GFC_ISYM_MAXVAL,
380   GFC_ISYM_MERGE,
381   GFC_ISYM_MIN,
382   GFC_ISYM_MINLOC,
383   GFC_ISYM_MINVAL,
384   GFC_ISYM_MOD,
385   GFC_ISYM_MODULO,
386   GFC_ISYM_NEAREST,
387   GFC_ISYM_NINT,
388   GFC_ISYM_NOT,
389   GFC_ISYM_OR,
390   GFC_ISYM_PACK,
391   GFC_ISYM_PRESENT,
392   GFC_ISYM_PRODUCT,
393   GFC_ISYM_RAND,
394   GFC_ISYM_REAL,
395   GFC_ISYM_RENAME,
396   GFC_ISYM_REPEAT,
397   GFC_ISYM_RESHAPE,
398   GFC_ISYM_RRSPACING,
399   GFC_ISYM_SCALE,
400   GFC_ISYM_SCAN,
401   GFC_ISYM_SECOND,
402   GFC_ISYM_SECNDS,
403   GFC_ISYM_SET_EXPONENT,
404   GFC_ISYM_SHAPE,
405   GFC_ISYM_SI_KIND,
406   GFC_ISYM_SIGN,
407   GFC_ISYM_SIGNAL,
408   GFC_ISYM_SIN,
409   GFC_ISYM_SINH,
410   GFC_ISYM_SIZE,
411   GFC_ISYM_SPACING,
412   GFC_ISYM_SPREAD,
413   GFC_ISYM_SQRT,
414   GFC_ISYM_SR_KIND,
415   GFC_ISYM_STAT,
416   GFC_ISYM_SUM,
417   GFC_ISYM_SYMLNK,
418   GFC_ISYM_SYSTEM,
419   GFC_ISYM_TAN,
420   GFC_ISYM_TANH,
421   GFC_ISYM_TIME,
422   GFC_ISYM_TIME8,
423   GFC_ISYM_TRANSFER,
424   GFC_ISYM_TRANSPOSE,
425   GFC_ISYM_TRIM,
426   GFC_ISYM_TTYNAM,
427   GFC_ISYM_UBOUND,
428   GFC_ISYM_UMASK,
429   GFC_ISYM_UNLINK,
430   GFC_ISYM_UNPACK,
431   GFC_ISYM_VERIFY,
432   GFC_ISYM_XOR,
433   GFC_ISYM_CONVERSION
434 };
435 typedef enum gfc_generic_isym_id gfc_generic_isym_id;
436
437 /************************* Structures *****************************/
438
439 /* Symbol attribute structure.  */
440 typedef struct
441 {
442   /* Variable attributes.  */
443   unsigned allocatable:1, dimension:1, external:1, intrinsic:1,
444     optional:1, pointer:1, save:1, target:1,
445     dummy:1, result:1, assign:1;
446
447   unsigned data:1,              /* Symbol is named in a DATA statement.  */
448     use_assoc:1;                /* Symbol has been use-associated.  */
449
450   unsigned in_namelist:1, in_common:1, in_equivalence:1;
451   unsigned function:1, subroutine:1, generic:1;
452   unsigned implicit_type:1;     /* Type defined via implicit rules.  */
453   unsigned untyped:1;           /* No implicit type could be found.  */
454
455   /* Function/subroutine attributes */
456   unsigned sequence:1, elemental:1, pure:1, recursive:1;
457   unsigned unmaskable:1, masked:1, contained:1;
458
459   /* This is set if the subroutine doesn't return.  Currently, this
460      is only possible for intrinsic subroutines.  */
461   unsigned noreturn:1;
462
463   /* Set if this procedure is an alternate entry point.  These procedures
464      don't have any code associated, and the backend will turn them into
465      thunks to the master function.  */
466   unsigned entry:1;
467
468   /* Set if this is the master function for a procedure with multiple
469      entry points.  */
470   unsigned entry_master:1;
471
472   /* Set if this is the master function for a function with multiple
473      entry points where characteristics of the entry points differ.  */
474   unsigned mixed_entry_master:1;
475
476   /* Set if a function must always be referenced by an explicit interface.  */
477   unsigned always_explicit:1;
478
479   /* Set if the symbol has been referenced in an expression.  No further
480      modification of type or type parameters is permitted.  */
481   unsigned referenced:1;
482
483   /* Set if the is the symbol for the main program.  This is the least
484      cumbersome way to communicate this function property without
485      strcmp'ing with __MAIN everywhere.  */
486   unsigned is_main_program:1;
487
488   /* Mutually exclusive multibit attributes.  */
489   ENUM_BITFIELD (gfc_access) access:2;
490   ENUM_BITFIELD (sym_intent) intent:2;
491   ENUM_BITFIELD (sym_flavor) flavor:4;
492   ENUM_BITFIELD (ifsrc) if_source:2;
493
494   ENUM_BITFIELD (procedure_type) proc:3;
495
496   /* Special attributes for Cray pointers, pointees.  */
497   unsigned cray_pointer:1, cray_pointee:1;
498
499 }
500 symbol_attribute;
501
502
503 /* The following three structures are used to identify a location in
504    the sources.
505
506    gfc_file is used to maintain a tree of the source files and how
507    they include each other
508
509    gfc_linebuf holds a single line of source code and information
510    which file it resides in
511
512    locus point to the sourceline and the character in the source
513    line.
514 */
515
516 typedef struct gfc_file
517 {
518   struct gfc_file *included_by, *next, *up;
519   int inclusion_line, line;
520   char *filename;
521 } gfc_file;
522
523 typedef struct gfc_linebuf
524 {
525 #ifdef USE_MAPPED_LOCATION
526   source_location location;
527 #else
528   int linenum;
529 #endif
530   struct gfc_file *file;
531   struct gfc_linebuf *next;
532
533   int truncated;
534
535   char line[1];
536 } gfc_linebuf;
537
538 #define gfc_linebuf_header_size (offsetof (gfc_linebuf, line))
539
540 typedef struct
541 {
542   char *nextc;
543   gfc_linebuf *lb;
544 } locus;
545
546 /* In order for the "gfc" format checking to work correctly, you must
547    have declared a typedef locus first.  */
548 #if GCC_VERSION >= 4001
549 #define ATTRIBUTE_GCC_GFC(m, n) __attribute__ ((__format__ (__gcc_gfc__, m, n))) ATTRIBUTE_NONNULL(m)
550 #else
551 #define ATTRIBUTE_GCC_GFC(m, n) ATTRIBUTE_NONNULL(m)
552 #endif
553
554
555 extern int gfc_suppress_error;
556
557
558 /* Character length structures hold the expression that gives the
559    length of a character variable.  We avoid putting these into
560    gfc_typespec because doing so prevents us from doing structure
561    copies and forces us to deallocate any typespecs we create, as well
562    as structures that contain typespecs.  They also can have multiple
563    character typespecs pointing to them.
564
565    These structures form a singly linked list within the current
566    namespace and are deallocated with the namespace.  It is possible to
567    end up with gfc_charlen structures that have nothing pointing to them.  */
568
569 typedef struct gfc_charlen
570 {
571   struct gfc_expr *length;
572   struct gfc_charlen *next;
573   tree backend_decl;
574
575   int resolved;
576 }
577 gfc_charlen;
578
579 #define gfc_get_charlen() gfc_getmem(sizeof(gfc_charlen))
580
581 /* Type specification structure.  FIXME: derived and cl could be union???  */
582 typedef struct
583 {
584   bt type;
585   int kind;
586   struct gfc_symbol *derived;
587   gfc_charlen *cl;      /* For character types only.  */
588 }
589 gfc_typespec;
590
591 /* Array specification.  */
592 typedef struct
593 {
594   int rank;     /* A rank of zero means that a variable is a scalar.  */
595   array_type type;
596   struct gfc_expr *lower[GFC_MAX_DIMENSIONS], *upper[GFC_MAX_DIMENSIONS];
597
598   /* These two fields are used with the Cray Pointer extension.  */
599   bool cray_pointee; /* True iff this spec belongs to a cray pointee.  */
600   bool cp_was_assumed; /* AS_ASSUMED_SIZE cp arrays are converted to
601                         AS_EXPLICIT, but we want to remember that we
602                         did this.  */
603
604 }
605 gfc_array_spec;
606
607 #define gfc_get_array_spec() gfc_getmem(sizeof(gfc_array_spec))
608
609
610 /* Components of derived types.  */
611 typedef struct gfc_component
612 {
613   const char *name;
614   gfc_typespec ts;
615
616   int pointer, dimension;
617   gfc_array_spec *as;
618
619   tree backend_decl;
620   locus loc;
621   struct gfc_expr *initializer;
622   struct gfc_component *next;
623 }
624 gfc_component;
625
626 #define gfc_get_component() gfc_getmem(sizeof(gfc_component))
627
628 /* Formal argument lists are lists of symbols.  */
629 typedef struct gfc_formal_arglist
630 {
631   /* Symbol representing the argument at this position in the arglist.  */
632   struct gfc_symbol *sym;
633   /* Points to the next formal argument.  */
634   struct gfc_formal_arglist *next;
635 }
636 gfc_formal_arglist;
637
638 #define gfc_get_formal_arglist() gfc_getmem(sizeof(gfc_formal_arglist))
639
640
641 /* The gfc_actual_arglist structure is for actual arguments.  */
642 typedef struct gfc_actual_arglist
643 {
644   const char *name;
645   /* Alternate return label when the expr member is null.  */
646   struct gfc_st_label *label;
647
648   /* This is set to the type of an eventual omitted optional
649      argument. This is used to determine if a hidden string length
650      argument has to be added to a function call.  */
651   bt missing_arg_type;
652
653   struct gfc_expr *expr;
654   struct gfc_actual_arglist *next;
655 }
656 gfc_actual_arglist;
657
658 #define gfc_get_actual_arglist() gfc_getmem(sizeof(gfc_actual_arglist))
659
660
661 /* Because a symbol can belong to multiple namelists, they must be
662    linked externally to the symbol itself.  */
663 typedef struct gfc_namelist
664 {
665   struct gfc_symbol *sym;
666   struct gfc_namelist *next;
667 }
668 gfc_namelist;
669
670 #define gfc_get_namelist() gfc_getmem(sizeof(gfc_namelist))
671
672
673 /* The gfc_st_label structure is a doubly linked list attached to a
674    namespace that records the usage of statement labels within that
675    space.  */
676 /* TODO: Make format/statement specifics a union.  */
677 typedef struct gfc_st_label
678 {
679   int value;
680
681   gfc_sl_type defined, referenced;
682
683   struct gfc_expr *format;
684
685   tree backend_decl;
686
687   locus where;
688
689   struct gfc_st_label *prev, *next;
690 }
691 gfc_st_label;
692
693
694 /* gfc_interface()-- Interfaces are lists of symbols strung together.  */
695 typedef struct gfc_interface
696 {
697   struct gfc_symbol *sym;
698   locus where;
699   struct gfc_interface *next;
700 }
701 gfc_interface;
702
703 #define gfc_get_interface() gfc_getmem(sizeof(gfc_interface))
704
705
706 /* User operator nodes.  These are like stripped down symbols.  */
707 typedef struct
708 {
709   const char *name;
710
711   gfc_interface *operator;
712   struct gfc_namespace *ns;
713   gfc_access access;
714 }
715 gfc_user_op;
716
717 /* Symbol nodes.  These are important things.  They are what the
718    standard refers to as "entities".  The possibly multiple names that
719    refer to the same entity are accomplished by a binary tree of
720    symtree structures that is balanced by the red-black method-- more
721    than one symtree node can point to any given symbol.  */
722
723 typedef struct gfc_symbol
724 {
725   const char *name;     /* Primary name, before renaming */
726   const char *module;   /* Module this symbol came from */
727   locus declared_at;
728
729   gfc_typespec ts;
730   symbol_attribute attr;
731
732   /* The interface member points to the formal argument list if the
733      symbol is a function or subroutine name.  If the symbol is a
734      generic name, the generic member points to the list of
735      interfaces.  */
736
737   gfc_interface *generic;
738   gfc_access component_access;
739
740   gfc_formal_arglist *formal;
741   struct gfc_namespace *formal_ns;
742
743   struct gfc_expr *value;       /* Parameter/Initializer value */
744   gfc_array_spec *as;
745   struct gfc_symbol *result;    /* function result symbol */
746   gfc_component *components;    /* Derived type components */
747
748   /* Defined only for Cray pointees; points to their pointer.  */
749   struct gfc_symbol *cp_pointer;
750
751   struct gfc_symbol *common_next;       /* Links for COMMON syms */
752
753   /* This is in fact a gfc_common_head but it is only used for pointer
754      comparisons to check if symbols are in the same common block.  */
755   struct gfc_common_head* common_head;
756
757   /* Make sure setup code for dummy arguments is generated in the correct
758      order.  */
759   int dummy_order;
760
761   gfc_namelist *namelist, *namelist_tail;
762
763   /* Change management fields.  Symbols that might be modified by the
764      current statement have the mark member nonzero and are kept in a
765      singly linked list through the tlink field.  Of these symbols,
766      symbols with old_symbol equal to NULL are symbols created within
767      the current statement.  Otherwise, old_symbol points to a copy of
768      the old symbol.  */
769
770   struct gfc_symbol *old_symbol, *tlink;
771   unsigned mark:1, new:1;
772   /* Nonzero if all equivalences associated with this symbol have been
773      processed.  */
774   unsigned equiv_built:1;
775   int refs;
776   struct gfc_namespace *ns;     /* namespace containing this symbol */
777
778   tree backend_decl;
779 }
780 gfc_symbol;
781
782
783 /* This structure is used to keep track of symbols in common blocks.  */
784
785 typedef struct gfc_common_head
786 {
787   locus where;
788   int use_assoc, saved;
789   char name[GFC_MAX_SYMBOL_LEN + 1];
790   struct gfc_symbol *head;
791 }
792 gfc_common_head;
793
794 #define gfc_get_common_head() gfc_getmem(sizeof(gfc_common_head))
795
796
797 /* A list of all the alternate entry points for a procedure.  */
798
799 typedef struct gfc_entry_list
800 {
801   /* The symbol for this entry point.  */
802   gfc_symbol *sym;
803   /* The zero-based id of this entry point.  */
804   int id;
805   /* The LABEL_EXPR marking this entry point.  */
806   tree label;
807   /* The nest item in the list.  */
808   struct gfc_entry_list *next;
809 }
810 gfc_entry_list;
811
812 #define gfc_get_entry_list() \
813   (gfc_entry_list *) gfc_getmem(sizeof(gfc_entry_list))
814
815 /* Within a namespace, symbols are pointed to by symtree nodes that
816    are linked together in a balanced binary tree.  There can be
817    several symtrees pointing to the same symbol node via USE
818    statements.  */
819
820 #define BBT_HEADER(self) int priority; struct self *left, *right
821
822 typedef struct gfc_symtree
823 {
824   BBT_HEADER (gfc_symtree);
825   const char *name;
826   int ambiguous;
827   union
828   {
829     gfc_symbol *sym;            /* Symbol associated with this node */
830     gfc_user_op *uop;
831     gfc_common_head *common;
832   }
833   n;
834
835 }
836 gfc_symtree;
837
838 /* A linked list of derived types in the namespace.  */
839 typedef struct gfc_dt_list
840 {
841   struct gfc_symbol *derived;
842   struct gfc_dt_list *next;
843 }
844 gfc_dt_list;
845
846 #define gfc_get_dt_list() gfc_getmem(sizeof(gfc_dt_list))
847
848
849 /* A namespace describes the contents of procedure, module or
850    interface block.  */
851 /* ??? Anything else use these?  */
852
853 typedef struct gfc_namespace
854 {
855   /* Tree containing all the symbols in this namespace.  */
856   gfc_symtree *sym_root;
857   /* Tree containing all the user-defined operators in the namespace.  */
858   gfc_symtree *uop_root;
859   /* Tree containing all the common blocks.  */
860   gfc_symtree *common_root;
861
862   /* If set_flag[letter] is set, an implicit type has been set for letter.  */
863   int set_flag[GFC_LETTERS];
864   /* Keeps track of the implicit types associated with the letters.  */
865   gfc_typespec default_type[GFC_LETTERS];
866
867   /* If this is a namespace of a procedure, this points to the procedure.  */
868   struct gfc_symbol *proc_name;
869   /* If this is the namespace of a unit which contains executable
870      code, this points to it.  */
871   struct gfc_code *code;
872
873   /* Points to the equivalences set up in this namespace.  */
874   struct gfc_equiv *equiv;
875   gfc_interface *operator[GFC_INTRINSIC_OPS];
876
877   /* Points to the parent namespace, i.e. the namespace of a module or
878      procedure in which the procedure belonging to this namespace is
879      contained. The parent namespace points to this namespace either
880      directly via CONTAINED, or indirectly via the chain built by
881      SIBLING.  */
882   struct gfc_namespace *parent;
883   /* CONTAINED points to the first contained namespace. Sibling
884      namespaces are chained via SIBLING.  */
885   struct gfc_namespace  *contained, *sibling;
886
887   gfc_common_head blank_common;
888   gfc_access default_access, operator_access[GFC_INTRINSIC_OPS];
889
890   gfc_st_label *st_labels;
891   /* This list holds information about all the data initializers in
892      this namespace.  */
893   struct gfc_data *data;
894
895   gfc_charlen *cl_list;
896
897   int save_all, seen_save, seen_implicit_none;
898
899   /* Normally we don't need to refcount namespaces.  However when we read
900      a module containing a function with multiple entry points, this
901      will appear as several functions with the same formal namespace.  */
902   int refs;
903
904   /* A list of all alternate entry points to this procedure (or NULL).  */
905   gfc_entry_list *entries;
906
907   /* A list of all derived types in this procedure (or NULL).  */
908   gfc_dt_list *derived_types;
909
910   /* Set to 1 if namespace is a BLOCK DATA program unit.  */
911   int is_block_data;
912 }
913 gfc_namespace;
914
915 extern gfc_namespace *gfc_current_ns;
916
917 /* Global symbols are symbols of global scope. Currently we only use
918    this to detect collisions already when parsing.
919    TODO: Extend to verify procedure calls.  */
920
921 typedef struct gfc_gsymbol
922 {
923   BBT_HEADER(gfc_gsymbol);
924
925   const char *name;
926   enum { GSYM_UNKNOWN=1, GSYM_PROGRAM, GSYM_FUNCTION, GSYM_SUBROUTINE,
927         GSYM_MODULE, GSYM_COMMON, GSYM_BLOCK_DATA } type;
928
929   int defined, used;
930   locus where;
931 }
932 gfc_gsymbol;
933
934 extern gfc_gsymbol *gfc_gsym_root;
935
936 /* Information on interfaces being built.  */
937 typedef struct
938 {
939   interface_type type;
940   gfc_symbol *sym;
941   gfc_namespace *ns;
942   gfc_user_op *uop;
943   gfc_intrinsic_op op;
944 }
945 gfc_interface_info;
946
947 extern gfc_interface_info current_interface;
948
949
950 /* Array reference.  */
951 typedef struct gfc_array_ref
952 {
953   ar_type type;
954   int dimen;                    /* # of components in the reference */
955   locus where;
956   gfc_array_spec *as;
957
958   locus c_where[GFC_MAX_DIMENSIONS];    /* All expressions can be NULL */
959   struct gfc_expr *start[GFC_MAX_DIMENSIONS], *end[GFC_MAX_DIMENSIONS],
960     *stride[GFC_MAX_DIMENSIONS];
961
962   enum
963   { DIMEN_ELEMENT = 1, DIMEN_RANGE, DIMEN_VECTOR, DIMEN_UNKNOWN }
964   dimen_type[GFC_MAX_DIMENSIONS];
965
966   struct gfc_expr *offset;
967 }
968 gfc_array_ref;
969
970 #define gfc_get_array_ref() gfc_getmem(sizeof(gfc_array_ref))
971
972
973 /* Component reference nodes.  A variable is stored as an expression
974    node that points to the base symbol.  After that, a singly linked
975    list of component reference nodes gives the variable's complete
976    resolution.  The array_ref component may be present and comes
977    before the component component.  */
978
979 typedef enum
980   { REF_ARRAY, REF_COMPONENT, REF_SUBSTRING }
981 ref_type;
982
983 typedef struct gfc_ref
984 {
985   ref_type type;
986
987   union
988   {
989     struct gfc_array_ref ar;
990
991     struct
992     {
993       gfc_component *component;
994       gfc_symbol *sym;
995     }
996     c;
997
998     struct
999     {
1000       struct gfc_expr *start, *end;     /* Substring */
1001       gfc_charlen *length;
1002     }
1003     ss;
1004
1005   }
1006   u;
1007
1008   struct gfc_ref *next;
1009 }
1010 gfc_ref;
1011
1012 #define gfc_get_ref() gfc_getmem(sizeof(gfc_ref))
1013
1014
1015 /* Structures representing intrinsic symbols and their arguments lists.  */
1016 typedef struct gfc_intrinsic_arg
1017 {
1018   char name[GFC_MAX_SYMBOL_LEN + 1];
1019
1020   gfc_typespec ts;
1021   int optional;
1022   gfc_actual_arglist *actual;
1023
1024   struct gfc_intrinsic_arg *next;
1025
1026 }
1027 gfc_intrinsic_arg;
1028
1029
1030 /* Specifies the various kinds of check functions used to verify the
1031    argument lists of intrinsic functions. fX with X an integer refer
1032    to check functions of intrinsics with X arguments. f1m is used for
1033    the MAX and MIN intrinsics which can have an arbitrary number of
1034    arguments, f3ml is used for the MINLOC and MAXLOC intrinsics as
1035    these have special semantics.  */
1036
1037 typedef union
1038 {
1039   try (*f0)(void);
1040   try (*f1)(struct gfc_expr *);
1041   try (*f1m)(gfc_actual_arglist *);
1042   try (*f2)(struct gfc_expr *, struct gfc_expr *);
1043   try (*f3)(struct gfc_expr *, struct gfc_expr *, struct gfc_expr *);
1044   try (*f3ml)(gfc_actual_arglist *);
1045   try (*f3red)(gfc_actual_arglist *);
1046   try (*f4)(struct gfc_expr *, struct gfc_expr *, struct gfc_expr *,
1047             struct gfc_expr *);
1048   try (*f5)(struct gfc_expr *, struct gfc_expr *, struct gfc_expr *,
1049             struct gfc_expr *, struct gfc_expr *);
1050 }
1051 gfc_check_f;
1052
1053 /* Like gfc_check_f, these specify the type of the simplification
1054    function associated with an intrinsic. The fX are just like in
1055    gfc_check_f. cc is used for type conversion functions.  */
1056
1057 typedef union
1058 {
1059   struct gfc_expr *(*f0)(void);
1060   struct gfc_expr *(*f1)(struct gfc_expr *);
1061   struct gfc_expr *(*f2)(struct gfc_expr *, struct gfc_expr *);
1062   struct gfc_expr *(*f3)(struct gfc_expr *, struct gfc_expr *,
1063                          struct gfc_expr *);
1064   struct gfc_expr *(*f4)(struct gfc_expr *, struct gfc_expr *,
1065                          struct gfc_expr *, struct gfc_expr *);
1066   struct gfc_expr *(*f5)(struct gfc_expr *, struct gfc_expr *,
1067                          struct gfc_expr *, struct gfc_expr *,
1068                          struct gfc_expr *);
1069   struct gfc_expr *(*cc)(struct gfc_expr *, bt, int);
1070 }
1071 gfc_simplify_f;
1072
1073 /* Again like gfc_check_f, these specify the type of the resolution
1074    function associated with an intrinsic. The fX are just like in
1075    gfc_check_f. f1m is used for MIN and MAX, s1 is used for abort().
1076    */
1077
1078 typedef union
1079 {
1080   void (*f0)(struct gfc_expr *);
1081   void (*f1)(struct gfc_expr *, struct gfc_expr *);
1082   void (*f1m)(struct gfc_expr *, struct gfc_actual_arglist *);
1083   void (*f2)(struct gfc_expr *, struct gfc_expr *, struct gfc_expr *);
1084   void (*f3)(struct gfc_expr *, struct gfc_expr *, struct gfc_expr *,
1085              struct gfc_expr *);
1086   void (*f4)(struct gfc_expr *, struct gfc_expr *, struct gfc_expr *,
1087              struct gfc_expr *, struct gfc_expr *);
1088   void (*f5)(struct gfc_expr *, struct gfc_expr *, struct gfc_expr *,
1089              struct gfc_expr *, struct gfc_expr *, struct gfc_expr *);
1090   void (*s1)(struct gfc_code *);
1091 }
1092 gfc_resolve_f;
1093
1094
1095 typedef struct gfc_intrinsic_sym
1096 {
1097   const char *name, *lib_name;
1098   gfc_intrinsic_arg *formal;
1099   gfc_typespec ts;
1100   int elemental, pure, generic, specific, actual_ok, standard, noreturn;
1101
1102   gfc_simplify_f simplify;
1103   gfc_check_f check;
1104   gfc_resolve_f resolve;
1105   struct gfc_intrinsic_sym *specific_head, *next;
1106   gfc_generic_isym_id generic_id;
1107
1108 }
1109 gfc_intrinsic_sym;
1110
1111
1112 /* Expression nodes.  The expression node types deserve explanations,
1113    since the last couple can be easily misconstrued:
1114
1115    EXPR_OP         Operator node pointing to one or two other nodes
1116    EXPR_FUNCTION   Function call, symbol points to function's name
1117    EXPR_CONSTANT   A scalar constant: Logical, String, Real, Int or Complex
1118    EXPR_VARIABLE   An Lvalue with a root symbol and possible reference list
1119                    which expresses structure, array and substring refs.
1120    EXPR_NULL       The NULL pointer value (which also has a basic type).
1121    EXPR_SUBSTRING  A substring of a constant string
1122    EXPR_STRUCTURE  A structure constructor
1123    EXPR_ARRAY      An array constructor.  */
1124
1125 #include <gmp.h>
1126 #include <mpfr.h>
1127 #define GFC_RND_MODE GMP_RNDN
1128
1129 typedef struct gfc_expr
1130 {
1131   expr_t expr_type;
1132
1133   gfc_typespec ts;      /* These two refer to the overall expression */
1134
1135   int rank;
1136   mpz_t *shape;         /* Can be NULL if shape is unknown at compile time */
1137
1138   /* Nonnull for functions and structure constructors */
1139   gfc_symtree *symtree;
1140
1141   gfc_ref *ref;
1142
1143   locus where;
1144
1145   /* True if it is converted from Hollerith constant.  */
1146   unsigned int from_H : 1;
1147   /* True if the expression is a call to a function that returns an array,
1148      and if we have decided not to allocate temporary data for that array.  */
1149   unsigned int inline_noncopying_intrinsic : 1;
1150
1151   union
1152   {
1153     int logical;
1154     mpz_t integer;
1155
1156     mpfr_t real;
1157
1158     struct
1159     {
1160       mpfr_t r, i;
1161     }
1162     complex;
1163
1164     struct
1165     {
1166       gfc_intrinsic_op operator;
1167       gfc_user_op *uop;
1168       struct gfc_expr *op1, *op2;
1169     }
1170     op;
1171
1172     struct
1173     {
1174       gfc_actual_arglist *actual;
1175       const char *name; /* Points to the ultimate name of the function */
1176       gfc_intrinsic_sym *isym;
1177       gfc_symbol *esym;
1178     }
1179     function;
1180
1181     struct
1182     {
1183       int length;
1184       char *string;
1185     }
1186     character;
1187
1188     struct gfc_constructor *constructor;
1189   }
1190   value;
1191
1192 }
1193 gfc_expr;
1194
1195
1196 #define gfc_get_shape(rank) ((mpz_t *) gfc_getmem((rank)*sizeof(mpz_t)))
1197
1198 /* Structures for information associated with different kinds of
1199    numbers.  The first set of integer parameters define all there is
1200    to know about a particular kind.  The rest of the elements are
1201    computed from the first elements.  */
1202
1203 typedef struct
1204 {
1205   /* Values really representable by the target.  */
1206   mpz_t huge, pedantic_min_int, min_int, max_int;
1207
1208   int kind, radix, digits, bit_size, range;
1209
1210   /* True if the C type of the given name maps to this precision.
1211      Note that more than one bit can be set.  */
1212   unsigned int c_char : 1;
1213   unsigned int c_short : 1;
1214   unsigned int c_int : 1;
1215   unsigned int c_long : 1;
1216   unsigned int c_long_long : 1;
1217 }
1218 gfc_integer_info;
1219
1220 extern gfc_integer_info gfc_integer_kinds[];
1221
1222
1223 typedef struct
1224 {
1225   int kind, bit_size;
1226
1227   /* True if the C++ type bool, C99 type _Bool, maps to this precision.  */
1228   unsigned int c_bool : 1;
1229 }
1230 gfc_logical_info;
1231
1232 extern gfc_logical_info gfc_logical_kinds[];
1233
1234
1235 typedef struct
1236 {
1237   mpfr_t epsilon, huge, tiny, subnormal;
1238   int kind, radix, digits, min_exponent, max_exponent;
1239   int range, precision;
1240
1241   /* The precision of the type as reported by GET_MODE_PRECISION.  */
1242   int mode_precision;
1243
1244   /* True if the C type of the given name maps to this precision.
1245      Note that more than one bit can be set.  */
1246   unsigned int c_float : 1;
1247   unsigned int c_double : 1;
1248   unsigned int c_long_double : 1;
1249 }
1250 gfc_real_info;
1251
1252 extern gfc_real_info gfc_real_kinds[];
1253
1254
1255 /* Equivalence structures.  Equivalent lvalues are linked along the
1256    *eq pointer, equivalence sets are strung along the *next node.  */
1257 typedef struct gfc_equiv
1258 {
1259   struct gfc_equiv *next, *eq;
1260   gfc_expr *expr;
1261   const char *module;
1262   int used;
1263 }
1264 gfc_equiv;
1265
1266 #define gfc_get_equiv() gfc_getmem(sizeof(gfc_equiv))
1267
1268
1269 /* gfc_case stores the selector list of a case statement.  The *low
1270    and *high pointers can point to the same expression in the case of
1271    a single value.  If *high is NULL, the selection is from *low
1272    upwards, if *low is NULL the selection is *high downwards.
1273
1274    This structure has separate fields to allow single and double linked
1275    lists of CASEs at the same time.  The singe linked list along the NEXT
1276    field is a list of cases for a single CASE label.  The double linked
1277    list along the LEFT/RIGHT fields is used to detect overlap and to
1278    build a table of the cases for SELECT constructs with a CHARACTER
1279    case expression.  */
1280
1281 typedef struct gfc_case
1282 {
1283   /* Where we saw this case.  */
1284   locus where;
1285   int n;
1286
1287   /* Case range values.  If (low == high), it's a single value.  If one of
1288      the labels is NULL, it's an unbounded case.  If both are NULL, this
1289      represents the default case.  */
1290   gfc_expr *low, *high;
1291
1292   /* Next case label in the list of cases for a single CASE label.  */
1293   struct gfc_case *next;
1294
1295   /* Used for detecting overlap, and for code generation.  */
1296   struct gfc_case *left, *right;
1297
1298   /* True if this case label can never be matched.  */
1299   int unreachable;
1300 }
1301 gfc_case;
1302
1303 #define gfc_get_case() gfc_getmem(sizeof(gfc_case))
1304
1305
1306 typedef struct
1307 {
1308   gfc_expr *var, *start, *end, *step;
1309 }
1310 gfc_iterator;
1311
1312 #define gfc_get_iterator() gfc_getmem(sizeof(gfc_iterator))
1313
1314
1315 /* Allocation structure for ALLOCATE, DEALLOCATE and NULLIFY statements.  */
1316
1317 typedef struct gfc_alloc
1318 {
1319   gfc_expr *expr;
1320   struct gfc_alloc *next;
1321 }
1322 gfc_alloc;
1323
1324 #define gfc_get_alloc() gfc_getmem(sizeof(gfc_alloc))
1325
1326
1327 typedef struct
1328 {
1329   gfc_expr *unit, *file, *status, *access, *form, *recl,
1330     *blank, *position, *action, *delim, *pad, *iostat, *iomsg, *convert;
1331   gfc_st_label *err;
1332 }
1333 gfc_open;
1334
1335
1336 typedef struct
1337 {
1338   gfc_expr *unit, *status, *iostat, *iomsg;
1339   gfc_st_label *err;
1340 }
1341 gfc_close;
1342
1343
1344 typedef struct
1345 {
1346   gfc_expr *unit, *iostat, *iomsg;
1347   gfc_st_label *err;
1348 }
1349 gfc_filepos;
1350
1351
1352 typedef struct
1353 {
1354   gfc_expr *unit, *file, *iostat, *exist, *opened, *number, *named,
1355     *name, *access, *sequential, *direct, *form, *formatted,
1356     *unformatted, *recl, *nextrec, *blank, *position, *action, *read,
1357     *write, *readwrite, *delim, *pad, *iolength, *iomsg, *convert;
1358
1359   gfc_st_label *err;
1360
1361 }
1362 gfc_inquire;
1363
1364
1365 typedef struct
1366 {
1367   gfc_expr *io_unit, *format_expr, *rec, *advance, *iostat, *size, *iomsg;
1368
1369   gfc_symbol *namelist;
1370   /* A format_label of `format_asterisk' indicates the "*" format */
1371   gfc_st_label *format_label;
1372   gfc_st_label *err, *end, *eor;
1373
1374   locus eor_where, end_where, err_where;
1375 }
1376 gfc_dt;
1377
1378
1379 typedef struct gfc_forall_iterator
1380 {
1381   gfc_expr *var, *start, *end, *stride;
1382   struct gfc_forall_iterator *next;
1383 }
1384 gfc_forall_iterator;
1385
1386
1387 /* Executable statements that fill gfc_code structures.  */
1388 typedef enum
1389 {
1390   EXEC_NOP = 1, EXEC_ASSIGN, EXEC_LABEL_ASSIGN, EXEC_POINTER_ASSIGN,
1391   EXEC_GOTO, EXEC_CALL, EXEC_RETURN, EXEC_ENTRY,
1392   EXEC_PAUSE, EXEC_STOP, EXEC_CONTINUE,
1393   EXEC_IF, EXEC_ARITHMETIC_IF, EXEC_DO, EXEC_DO_WHILE, EXEC_SELECT,
1394   EXEC_FORALL, EXEC_WHERE, EXEC_CYCLE, EXEC_EXIT,
1395   EXEC_ALLOCATE, EXEC_DEALLOCATE,
1396   EXEC_OPEN, EXEC_CLOSE,
1397   EXEC_READ, EXEC_WRITE, EXEC_IOLENGTH, EXEC_TRANSFER, EXEC_DT_END,
1398   EXEC_BACKSPACE, EXEC_ENDFILE, EXEC_INQUIRE, EXEC_REWIND, EXEC_FLUSH
1399 }
1400 gfc_exec_op;
1401
1402 typedef struct gfc_code
1403 {
1404   gfc_exec_op op;
1405
1406   struct gfc_code *block, *next;
1407   locus loc;
1408
1409   gfc_st_label *here, *label, *label2, *label3;
1410   gfc_symtree *symtree;
1411   gfc_expr *expr, *expr2;
1412   /* A name isn't sufficient to identify a subroutine, we need the actual
1413      symbol for the interface definition.
1414   const char *sub_name;  */
1415   gfc_symbol *resolved_sym;
1416
1417   union
1418   {
1419     gfc_actual_arglist *actual;
1420     gfc_case *case_list;
1421     gfc_iterator *iterator;
1422     gfc_alloc *alloc_list;
1423     gfc_open *open;
1424     gfc_close *close;
1425     gfc_filepos *filepos;
1426     gfc_inquire *inquire;
1427     gfc_dt *dt;
1428     gfc_forall_iterator *forall_iterator;
1429     struct gfc_code *whichloop;
1430     int stop_code;
1431     gfc_entry_list *entry;
1432   }
1433   ext;          /* Points to additional structures required by statement */
1434
1435   /* Backend_decl is used for cycle and break labels in do loops, and
1436      probably for other constructs as well, once we translate them.  */
1437   tree backend_decl;
1438 }
1439 gfc_code;
1440
1441
1442 /* Storage for DATA statements.  */
1443 typedef struct gfc_data_variable
1444 {
1445   gfc_expr *expr;
1446   gfc_iterator iter;
1447   struct gfc_data_variable *list, *next;
1448 }
1449 gfc_data_variable;
1450
1451
1452 typedef struct gfc_data_value
1453 {
1454   unsigned int repeat;
1455   gfc_expr *expr;
1456   struct gfc_data_value *next;
1457 }
1458 gfc_data_value;
1459
1460
1461 typedef struct gfc_data
1462 {
1463   gfc_data_variable *var;
1464   gfc_data_value *value;
1465   locus where;
1466
1467   struct gfc_data *next;
1468 }
1469 gfc_data;
1470
1471 #define gfc_get_data_variable() gfc_getmem(sizeof(gfc_data_variable))
1472 #define gfc_get_data_value() gfc_getmem(sizeof(gfc_data_value))
1473 #define gfc_get_data() gfc_getmem(sizeof(gfc_data))
1474
1475
1476 /* Structure for holding compile options */
1477 typedef struct
1478 {
1479   char *module_dir;
1480   gfc_source_form source_form;
1481   /* When fixed_line_length or free_line_length are 0, the whole line is used.
1482
1483      Default is -1, the maximum line length mandated by the respective source
1484      form is used:
1485      for FORM_FREE GFC_MAX_LINE (132)
1486      else 72.
1487
1488      If fixed_line_length or free_line_length is not 0 nor -1 then the user has
1489      requested a specific line-length.
1490
1491      If the user requests a fixed_line_length <7 then gfc_init_options()
1492      emits a fatal error.  */
1493   int fixed_line_length; /* maximum line length in fixed-form.  */
1494   int free_line_length; /* maximum line length in free-form.  */
1495   int max_identifier_length;
1496   int verbose;
1497
1498   int warn_aliasing;
1499   int warn_conversion;
1500   int warn_implicit_interface;
1501   int warn_line_truncation;
1502   int warn_underflow;
1503   int warn_surprising;
1504   int warn_unused_labels;
1505
1506   int flag_default_double;
1507   int flag_default_integer;
1508   int flag_default_real;
1509   int flag_dollar_ok;
1510   int flag_underscoring;
1511   int flag_second_underscore;
1512   int flag_implicit_none;
1513   int flag_max_stack_var_size;
1514   int flag_module_access_private;
1515   int flag_no_backend;
1516   int flag_pack_derived;
1517   int flag_repack_arrays;
1518   int flag_f2c;
1519   int flag_automatic;
1520   int flag_backslash;
1521   int flag_cray_pointer;
1522   int flag_d_lines;
1523
1524   int q_kind;
1525
1526   int fpe;
1527
1528   int warn_std;
1529   int allow_std;
1530   int warn_nonstd_intrinsics;
1531   int fshort_enums;
1532 }
1533 gfc_option_t;
1534
1535 extern gfc_option_t gfc_option;
1536
1537
1538 /* Constructor nodes for array and structure constructors.  */
1539 typedef struct gfc_constructor
1540 {
1541   gfc_expr *expr;
1542   gfc_iterator *iterator;
1543   locus where;
1544   struct gfc_constructor *next;
1545   struct
1546   {
1547     mpz_t offset; /* Record the offset of array element which appears in
1548                      data statement like "data a(5)/4/".  */
1549     gfc_component *component; /* Record the component being initialized.  */
1550   }
1551   n;
1552   mpz_t repeat; /* Record the repeat number of initial values in data
1553                  statement like "data a/5*10/".  */
1554 }
1555 gfc_constructor;
1556
1557
1558 typedef struct iterator_stack
1559 {
1560   gfc_symtree *variable;
1561   mpz_t value;
1562   struct iterator_stack *prev;
1563 }
1564 iterator_stack;
1565 extern iterator_stack *iter_stack;
1566
1567 /************************ Function prototypes *************************/
1568
1569 /* data.c  */
1570 void gfc_formalize_init_value (gfc_symbol *);
1571 void gfc_get_section_index (gfc_array_ref *, mpz_t *, mpz_t *);
1572 void gfc_assign_data_value (gfc_expr *, gfc_expr *, mpz_t);
1573 void gfc_assign_data_value_range (gfc_expr *, gfc_expr *, mpz_t, mpz_t);
1574 void gfc_advance_section (mpz_t *, gfc_array_ref *, mpz_t *);
1575
1576 /* scanner.c */
1577 void gfc_scanner_done_1 (void);
1578 void gfc_scanner_init_1 (void);
1579
1580 void gfc_add_include_path (const char *);
1581 void gfc_release_include_path (void);
1582 FILE *gfc_open_included_file (const char *, bool);
1583
1584 int gfc_at_end (void);
1585 int gfc_at_eof (void);
1586 int gfc_at_bol (void);
1587 int gfc_at_eol (void);
1588 void gfc_advance_line (void);
1589 int gfc_check_include (void);
1590
1591 void gfc_skip_comments (void);
1592 int gfc_next_char_literal (int);
1593 int gfc_next_char (void);
1594 int gfc_peek_char (void);
1595 void gfc_error_recovery (void);
1596 void gfc_gobble_whitespace (void);
1597 try gfc_new_file (void);
1598
1599 extern gfc_source_form gfc_current_form;
1600 extern const char *gfc_source_file;
1601 extern locus gfc_current_locus;
1602
1603 /* misc.c */
1604 void *gfc_getmem (size_t) ATTRIBUTE_MALLOC;
1605 void gfc_free (void *);
1606 int gfc_terminal_width(void);
1607 void gfc_clear_ts (gfc_typespec *);
1608 FILE *gfc_open_file (const char *);
1609 const char *gfc_basic_typename (bt);
1610 const char *gfc_typename (gfc_typespec *);
1611
1612 #define gfc_op2string(OP) (OP == INTRINSIC_ASSIGN ? \
1613                            "=" : gfc_code2string (intrinsic_operators, OP))
1614
1615 const char *gfc_code2string (const mstring *, int);
1616 int gfc_string2code (const mstring *, const char *);
1617 const char *gfc_intent_string (sym_intent);
1618
1619 void gfc_init_1 (void);
1620 void gfc_init_2 (void);
1621 void gfc_done_1 (void);
1622 void gfc_done_2 (void);
1623
1624 /* options.c */
1625 unsigned int gfc_init_options (unsigned int, const char **);
1626 int gfc_handle_option (size_t, const char *, int);
1627 bool gfc_post_options (const char **);
1628
1629 /* iresolve.c */
1630 const char * gfc_get_string (const char *, ...) ATTRIBUTE_PRINTF_1;
1631
1632 /* error.c */
1633
1634 typedef struct gfc_error_buf
1635 {
1636   int flag;
1637   size_t allocated, index;
1638   char *message;
1639 } gfc_error_buf;
1640
1641 void gfc_error_init_1 (void);
1642 void gfc_buffer_error (int);
1643
1644 void gfc_warning (const char *, ...) ATTRIBUTE_GCC_GFC(1,2);
1645 void gfc_warning_now (const char *, ...) ATTRIBUTE_GCC_GFC(1,2);
1646 void gfc_clear_warning (void);
1647 void gfc_warning_check (void);
1648
1649 void gfc_error (const char *, ...) ATTRIBUTE_GCC_GFC(1,2);
1650 void gfc_error_now (const char *, ...) ATTRIBUTE_GCC_GFC(1,2);
1651 void gfc_fatal_error (const char *, ...) ATTRIBUTE_NORETURN ATTRIBUTE_GCC_GFC(1,2);
1652 void gfc_internal_error (const char *, ...) ATTRIBUTE_NORETURN ATTRIBUTE_GCC_GFC(1,2);
1653 void gfc_clear_error (void);
1654 int gfc_error_check (void);
1655
1656 try gfc_notify_std (int, const char *, ...) ATTRIBUTE_GCC_GFC(2,3);
1657
1658 /* A general purpose syntax error.  */
1659 #define gfc_syntax_error(ST)    \
1660   gfc_error ("Syntax error in %s statement at %C", gfc_ascii_statement (ST));
1661
1662 void gfc_push_error (gfc_error_buf *);
1663 void gfc_pop_error (gfc_error_buf *);
1664 void gfc_free_error (gfc_error_buf *);
1665
1666 void gfc_status (const char *, ...) ATTRIBUTE_PRINTF_1;
1667 void gfc_status_char (char);
1668
1669 void gfc_get_errors (int *, int *);
1670
1671 /* arith.c */
1672 void gfc_arith_init_1 (void);
1673 void gfc_arith_done_1 (void);
1674 gfc_expr *gfc_enum_initializer (gfc_expr *, locus);
1675 arith gfc_check_integer_range (mpz_t p, int kind);
1676
1677 /* trans-types.c */
1678 int gfc_validate_kind (bt, int, bool);
1679 extern int gfc_index_integer_kind;
1680 extern int gfc_default_integer_kind;
1681 extern int gfc_max_integer_kind;
1682 extern int gfc_default_real_kind;
1683 extern int gfc_default_double_kind;
1684 extern int gfc_default_character_kind;
1685 extern int gfc_default_logical_kind;
1686 extern int gfc_default_complex_kind;
1687 extern int gfc_c_int_kind;
1688
1689 /* symbol.c */
1690 void gfc_clear_new_implicit (void);
1691 try gfc_add_new_implicit_range (int, int);
1692 try gfc_merge_new_implicit (gfc_typespec *);
1693 void gfc_set_implicit_none (void);
1694
1695 gfc_typespec *gfc_get_default_type (gfc_symbol *, gfc_namespace *);
1696 try gfc_set_default_type (gfc_symbol *, int, gfc_namespace *);
1697
1698 void gfc_set_component_attr (gfc_component *, symbol_attribute *);
1699 void gfc_get_component_attr (symbol_attribute *, gfc_component *);
1700
1701 void gfc_set_sym_referenced (gfc_symbol * sym);
1702
1703 try gfc_add_allocatable (symbol_attribute *, locus *);
1704 try gfc_add_dimension (symbol_attribute *, const char *, locus *);
1705 try gfc_add_external (symbol_attribute *, locus *);
1706 try gfc_add_intrinsic (symbol_attribute *, locus *);
1707 try gfc_add_optional (symbol_attribute *, locus *);
1708 try gfc_add_pointer (symbol_attribute *, locus *);
1709 try gfc_add_cray_pointer (symbol_attribute *, locus *);
1710 try gfc_add_cray_pointee (symbol_attribute *, locus *);
1711 try gfc_mod_pointee_as (gfc_array_spec *as);
1712 try gfc_add_result (symbol_attribute *, const char *, locus *);
1713 try gfc_add_save (symbol_attribute *, const char *, locus *);
1714 try gfc_add_saved_common (symbol_attribute *, locus *);
1715 try gfc_add_target (symbol_attribute *, locus *);
1716 try gfc_add_dummy (symbol_attribute *, const char *, locus *);
1717 try gfc_add_generic (symbol_attribute *, const char *, locus *);
1718 try gfc_add_common (symbol_attribute *, locus *);
1719 try gfc_add_in_common (symbol_attribute *, const char *, locus *);
1720 try gfc_add_in_equivalence (symbol_attribute *, const char *, locus *);
1721 try gfc_add_data (symbol_attribute *, const char *, locus *);
1722 try gfc_add_in_namelist (symbol_attribute *, const char *, locus *);
1723 try gfc_add_sequence (symbol_attribute *, const char *, locus *);
1724 try gfc_add_elemental (symbol_attribute *, locus *);
1725 try gfc_add_pure (symbol_attribute *, locus *);
1726 try gfc_add_recursive (symbol_attribute *, locus *);
1727 try gfc_add_function (symbol_attribute *, const char *, locus *);
1728 try gfc_add_subroutine (symbol_attribute *, const char *, locus *);
1729
1730 try gfc_add_access (symbol_attribute *, gfc_access, const char *, locus *);
1731 try gfc_add_flavor (symbol_attribute *, sym_flavor, const char *, locus *);
1732 try gfc_add_entry (symbol_attribute *, const char *, locus *);
1733 try gfc_add_procedure (symbol_attribute *, procedure_type,
1734                        const char *, locus *);
1735 try gfc_add_intent (symbol_attribute *, sym_intent, locus *);
1736 try gfc_add_explicit_interface (gfc_symbol *, ifsrc,
1737                                 gfc_formal_arglist *, locus *);
1738 try gfc_add_type (gfc_symbol *, gfc_typespec *, locus *);
1739
1740 void gfc_clear_attr (symbol_attribute *);
1741 try gfc_missing_attr (symbol_attribute *, locus *);
1742 try gfc_copy_attr (symbol_attribute *, symbol_attribute *, locus *);
1743
1744 try gfc_add_component (gfc_symbol *, const char *, gfc_component **);
1745 gfc_symbol *gfc_use_derived (gfc_symbol *);
1746 gfc_symtree *gfc_use_derived_tree (gfc_symtree *);
1747 gfc_component *gfc_find_component (gfc_symbol *, const char *);
1748
1749 gfc_st_label *gfc_get_st_label (int);
1750 void gfc_free_st_label (gfc_st_label *);
1751 void gfc_define_st_label (gfc_st_label *, gfc_sl_type, locus *);
1752 try gfc_reference_st_label (gfc_st_label *, gfc_sl_type);
1753
1754 gfc_namespace *gfc_get_namespace (gfc_namespace *, int);
1755 gfc_symtree *gfc_new_symtree (gfc_symtree **, const char *);
1756 gfc_symtree *gfc_find_symtree (gfc_symtree *, const char *);
1757 gfc_user_op *gfc_get_uop (const char *);
1758 gfc_user_op *gfc_find_uop (const char *, gfc_namespace *);
1759 void gfc_free_symbol (gfc_symbol *);
1760 gfc_symbol *gfc_new_symbol (const char *, gfc_namespace *);
1761 int gfc_find_symbol (const char *, gfc_namespace *, int, gfc_symbol **);
1762 int gfc_find_sym_tree (const char *, gfc_namespace *, int, gfc_symtree **);
1763 int gfc_get_symbol (const char *, gfc_namespace *, gfc_symbol **);
1764 int gfc_get_sym_tree (const char *, gfc_namespace *, gfc_symtree **);
1765 int gfc_get_ha_symbol (const char *, gfc_symbol **);
1766 int gfc_get_ha_sym_tree (const char *, gfc_symtree **);
1767
1768 int gfc_symbols_could_alias (gfc_symbol *, gfc_symbol *);
1769
1770 void gfc_undo_symbols (void);
1771 void gfc_commit_symbols (void);
1772 void gfc_free_namespace (gfc_namespace *);
1773
1774 void gfc_symbol_init_2 (void);
1775 void gfc_symbol_done_2 (void);
1776
1777 void gfc_traverse_symtree (gfc_symtree *, void (*)(gfc_symtree *));
1778 void gfc_traverse_ns (gfc_namespace *, void (*)(gfc_symbol *));
1779 void gfc_traverse_user_op (gfc_namespace *, void (*)(gfc_user_op *));
1780 void gfc_save_all (gfc_namespace *);
1781
1782 void gfc_symbol_state (void);
1783
1784 gfc_gsymbol *gfc_get_gsymbol (const char *);
1785 gfc_gsymbol *gfc_find_gsymbol (gfc_gsymbol *, const char *);
1786
1787 /* intrinsic.c */
1788 extern int gfc_init_expr;
1789
1790 /* Given a symbol that we have decided is intrinsic, mark it as such
1791    by placing it into a special module that is otherwise impossible to
1792    read or write.  */
1793
1794 #define gfc_intrinsic_symbol(SYM) SYM->module = gfc_get_string ("(intrinsic)")
1795
1796 void gfc_intrinsic_init_1 (void);
1797 void gfc_intrinsic_done_1 (void);
1798
1799 char gfc_type_letter (bt);
1800 gfc_symbol * gfc_get_intrinsic_sub_symbol (const char *);
1801 try gfc_convert_type (gfc_expr *, gfc_typespec *, int);
1802 try gfc_convert_type_warn (gfc_expr *, gfc_typespec *, int, int);
1803 int gfc_generic_intrinsic (const char *);
1804 int gfc_specific_intrinsic (const char *);
1805 int gfc_intrinsic_name (const char *, int);
1806 gfc_intrinsic_sym *gfc_find_function (const char *);
1807
1808 match gfc_intrinsic_func_interface (gfc_expr *, int);
1809 match gfc_intrinsic_sub_interface (gfc_code *, int);
1810
1811 /* simplify.c */
1812 void gfc_simplify_init_1 (void);
1813
1814 /* match.c -- FIXME */
1815 void gfc_free_iterator (gfc_iterator *, int);
1816 void gfc_free_forall_iterator (gfc_forall_iterator *);
1817 void gfc_free_alloc_list (gfc_alloc *);
1818 void gfc_free_namelist (gfc_namelist *);
1819 void gfc_free_equiv (gfc_equiv *);
1820 void gfc_free_data (gfc_data *);
1821 void gfc_free_case_list (gfc_case *);
1822
1823 /* expr.c */
1824 void gfc_free_actual_arglist (gfc_actual_arglist *);
1825 gfc_actual_arglist *gfc_copy_actual_arglist (gfc_actual_arglist *);
1826 const char *gfc_extract_int (gfc_expr *, int *);
1827
1828 gfc_expr *gfc_build_conversion (gfc_expr *);
1829 void gfc_free_ref_list (gfc_ref *);
1830 void gfc_type_convert_binary (gfc_expr *);
1831 int gfc_is_constant_expr (gfc_expr *);
1832 try gfc_simplify_expr (gfc_expr *, int);
1833 int gfc_has_vector_index (gfc_expr *);
1834
1835 gfc_expr *gfc_get_expr (void);
1836 void gfc_free_expr (gfc_expr *);
1837 void gfc_replace_expr (gfc_expr *, gfc_expr *);
1838 gfc_expr *gfc_int_expr (int);
1839 gfc_expr *gfc_logical_expr (int, locus *);
1840 mpz_t *gfc_copy_shape (mpz_t *, int);
1841 mpz_t *gfc_copy_shape_excluding (mpz_t *, int, gfc_expr *);
1842 gfc_expr *gfc_copy_expr (gfc_expr *);
1843
1844 try gfc_specification_expr (gfc_expr *);
1845
1846 int gfc_numeric_ts (gfc_typespec *);
1847 int gfc_kind_max (gfc_expr *, gfc_expr *);
1848
1849 try gfc_check_conformance (const char *, gfc_expr *, gfc_expr *);
1850 try gfc_check_assign (gfc_expr *, gfc_expr *, int);
1851 try gfc_check_pointer_assign (gfc_expr *, gfc_expr *);
1852 try gfc_check_assign_symbol (gfc_symbol *, gfc_expr *);
1853
1854 gfc_expr *gfc_default_initializer (gfc_typespec *);
1855 gfc_expr *gfc_get_variable_expr (gfc_symtree *);
1856
1857
1858 /* st.c */
1859 extern gfc_code new_st;
1860
1861 void gfc_clear_new_st (void);
1862 gfc_code *gfc_get_code (void);
1863 gfc_code *gfc_append_code (gfc_code *, gfc_code *);
1864 void gfc_free_statement (gfc_code *);
1865 void gfc_free_statements (gfc_code *);
1866
1867 /* resolve.c */
1868 try gfc_resolve_expr (gfc_expr *);
1869 void gfc_resolve (gfc_namespace *);
1870 int gfc_impure_variable (gfc_symbol *);
1871 int gfc_pure (gfc_symbol *);
1872 int gfc_elemental (gfc_symbol *);
1873 try gfc_resolve_iterator (gfc_iterator *, bool);
1874 try gfc_resolve_index (gfc_expr *, int);
1875 try gfc_resolve_dim_arg (gfc_expr *);
1876 int gfc_is_formal_arg (void);
1877
1878 /* array.c */
1879 void gfc_free_array_spec (gfc_array_spec *);
1880 gfc_array_ref *gfc_copy_array_ref (gfc_array_ref *);
1881
1882 try gfc_set_array_spec (gfc_symbol *, gfc_array_spec *, locus *);
1883 gfc_array_spec *gfc_copy_array_spec (gfc_array_spec *);
1884 try gfc_resolve_array_spec (gfc_array_spec *, int);
1885
1886 int gfc_compare_array_spec (gfc_array_spec *, gfc_array_spec *);
1887
1888 gfc_expr *gfc_start_constructor (bt, int, locus *);
1889 void gfc_append_constructor (gfc_expr *, gfc_expr *);
1890 void gfc_free_constructor (gfc_constructor *);
1891 void gfc_simplify_iterator_var (gfc_expr *);
1892 try gfc_expand_constructor (gfc_expr *);
1893 int gfc_constant_ac (gfc_expr *);
1894 int gfc_expanded_ac (gfc_expr *);
1895 try gfc_resolve_array_constructor (gfc_expr *);
1896 try gfc_check_constructor_type (gfc_expr *);
1897 try gfc_check_iter_variable (gfc_expr *);
1898 try gfc_check_constructor (gfc_expr *, try (*)(gfc_expr *));
1899 gfc_constructor *gfc_copy_constructor (gfc_constructor * src);
1900 gfc_expr *gfc_get_array_element (gfc_expr *, int);
1901 try gfc_array_size (gfc_expr *, mpz_t *);
1902 try gfc_array_dimen_size (gfc_expr *, int, mpz_t *);
1903 try gfc_array_ref_shape (gfc_array_ref *, mpz_t *);
1904 gfc_array_ref *gfc_find_array_ref (gfc_expr *);
1905 void gfc_insert_constructor (gfc_expr *, gfc_constructor *);
1906 gfc_constructor *gfc_get_constructor (void);
1907 tree gfc_conv_array_initializer (tree type, gfc_expr * expr);
1908 try spec_size (gfc_array_spec *, mpz_t *);
1909 int gfc_is_compile_time_shape (gfc_array_spec *);
1910
1911 /* interface.c -- FIXME: some of these should be in symbol.c */
1912 void gfc_free_interface (gfc_interface *);
1913 int gfc_compare_derived_types (gfc_symbol *, gfc_symbol *);
1914 int gfc_compare_types (gfc_typespec *, gfc_typespec *);
1915 void gfc_check_interfaces (gfc_namespace *);
1916 void gfc_procedure_use (gfc_symbol *, gfc_actual_arglist **, locus *);
1917 gfc_symbol *gfc_search_interface (gfc_interface *, int,
1918                                   gfc_actual_arglist **);
1919 try gfc_extend_expr (gfc_expr *);
1920 void gfc_free_formal_arglist (gfc_formal_arglist *);
1921 try gfc_extend_assign (gfc_code *, gfc_namespace *);
1922 try gfc_add_interface (gfc_symbol * sym);
1923
1924 /* io.c */
1925 extern gfc_st_label format_asterisk;
1926
1927 void gfc_free_open (gfc_open *);
1928 try gfc_resolve_open (gfc_open *);
1929 void gfc_free_close (gfc_close *);
1930 try gfc_resolve_close (gfc_close *);
1931 void gfc_free_filepos (gfc_filepos *);
1932 try gfc_resolve_filepos (gfc_filepos *);
1933 void gfc_free_inquire (gfc_inquire *);
1934 try gfc_resolve_inquire (gfc_inquire *);
1935 void gfc_free_dt (gfc_dt *);
1936 try gfc_resolve_dt (gfc_dt *);
1937
1938 /* module.c */
1939 void gfc_module_init_2 (void);
1940 void gfc_module_done_2 (void);
1941 void gfc_dump_module (const char *, int);
1942 bool gfc_check_access (gfc_access, gfc_access);
1943
1944 /* primary.c */
1945 symbol_attribute gfc_variable_attr (gfc_expr *, gfc_typespec *);
1946 symbol_attribute gfc_expr_attr (gfc_expr *);
1947
1948 /* trans.c */
1949 void gfc_generate_code (gfc_namespace *);
1950 void gfc_generate_module_code (gfc_namespace *);
1951
1952 /* bbt.c */
1953 typedef int (*compare_fn) (void *, void *);
1954 void gfc_insert_bbt (void *, void *, compare_fn);
1955 void gfc_delete_bbt (void *, void *, compare_fn);
1956
1957 /* dump-parse-tree.c */
1958 void gfc_show_namespace (gfc_namespace *);
1959
1960 /* parse.c */
1961 try gfc_parse_file (void);
1962
1963 #endif /* GCC_GFORTRAN_H  */