OSDN Git Service

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