OSDN Git Service

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