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