OSDN Git Service

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