]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/fortran/gfortran.h
2005-10-12 Paul Thomas <pault@gcc.gnu.org>
[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 19along with GCC; see the file COPYING. If not, write to the Free
ab57747b
KC
20Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
2102110-1301, 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 32#include "system.h"
31043f6c 33#include "intl.h"
6de9cd9a 34#include "coretypes.h"
c8cc8542 35#include "input.h"
6de9cd9a
DN
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 */
50char *alloca ();
51#endif /* not predefined */
52#endif /* not _AIX */
53#endif /* do not HAVE_ALLOCA_H */
54#endif /* not __GNUC__ */
55
6de9cd9a
DN
56/* Major control parameters. */
57
6de9cd9a 58#define GFC_MAX_SYMBOL_LEN 63
6de9cd9a
DN
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. */
6de9cd9a
DN
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 80
30aabb86
PT
81#define BLANK_COMMON_NAME "__BLNK__"
82
6de9cd9a
DN
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. */
87typedef struct
88{
89 const char *string;
90 const char *mp;
91 int tag;
92}
93mstring;
94
95
902c2ed4 96/* Flags to specify which standard/extension contains a feature. */
c0309c74
RS
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. */
f7b529fa 100/* Note that no features were obsoleted nor deleted in F2003. */
c0309c74
RS
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. */
6de9cd9a
DN
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
113typedef enum
114{ SUCCESS = 1, FAILURE }
115try;
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
122typedef enum
123{ MATCH_NO = 1, MATCH_YES, MATCH_ERROR }
124match;
125
126typedef enum
127{ FORM_FREE, FORM_FIXED, FORM_UNKNOWN }
128gfc_source_form;
129
130typedef enum
131{ BT_UNKNOWN = 1, BT_INTEGER, BT_REAL, BT_COMPLEX,
d3642f89 132 BT_LOGICAL, BT_CHARACTER, BT_DERIVED, BT_PROCEDURE, BT_HOLLERITH
6de9cd9a
DN
133}
134bt;
135
136/* Expression node types. */
137typedef enum
138{ EXPR_OP = 1, EXPR_FUNCTION, EXPR_CONSTANT, EXPR_VARIABLE,
139 EXPR_SUBSTRING, EXPR_STRUCTURE, EXPR_ARRAY, EXPR_NULL
140}
141expr_t;
142
143/* Array types. */
144typedef enum
145{ AS_EXPLICIT = 1, AS_ASSUMED_SHAPE, AS_DEFERRED,
146 AS_ASSUMED_SIZE, AS_UNKNOWN
147}
148array_type;
149
150typedef enum
151{ AR_FULL = 1, AR_ELEMENT, AR_SECTION, AR_UNKNOWN }
152ar_type;
153
154/* Statement label types. */
155typedef enum
156{ ST_LABEL_UNKNOWN = 1, ST_LABEL_TARGET,
157 ST_LABEL_BAD_TARGET, ST_LABEL_FORMAT
158}
159gfc_sl_type;
160
161/* Intrinsic operators. */
162typedef 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}
173gfc_intrinsic_op;
174
175
176/* Strings for all intrinsic operators. */
177extern 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. */
185typedef enum
f8e566e5 186{ ARITH_OK = 1, ARITH_OVERFLOW, ARITH_UNDERFLOW, ARITH_NAN,
0de27aac 187 ARITH_DIV0, ARITH_INCOMMENSURATE, ARITH_ASYMMETRIC
6de9cd9a
DN
188}
189arith;
190
191/* Statements. */
192typedef 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,
6403ec5f
JB
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
6de9cd9a
DN
209}
210gfc_statement;
211
212
213/* Types of interfaces that we can have. Assignment interfaces are
214 considered to be intrinsic operators. */
215typedef enum
216{
217 INTERFACE_NAMELESS = 1, INTERFACE_GENERIC,
218 INTERFACE_INTRINSIC_OP, INTERFACE_USER_OP
219}
220interface_type;
221
222/* Symbol flavors: these are all mutually exclusive.
223 10 elements = 4 bits. */
5f42ddb0 224typedef enum sym_flavor
6de9cd9a
DN
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}
229sym_flavor;
230
231/* Procedure types. 7 elements = 3 bits. */
5f42ddb0 232typedef enum procedure_type
6de9cd9a
DN
233{ PROC_UNKNOWN, PROC_MODULE, PROC_INTERNAL, PROC_DUMMY,
234 PROC_INTRINSIC, PROC_ST_FUNCTION, PROC_EXTERNAL
235}
236procedure_type;
237
238/* Intent types. */
5f42ddb0 239typedef enum sym_intent
6de9cd9a
DN
240{ INTENT_UNKNOWN = 0, INTENT_IN, INTENT_OUT, INTENT_INOUT
241}
242sym_intent;
243
244/* Access types. */
5f42ddb0
KG
245typedef enum gfc_access
246{ ACCESS_UNKNOWN = 0, ACCESS_PUBLIC, ACCESS_PRIVATE
6de9cd9a
DN
247}
248gfc_access;
249
250/* Flags to keep track of where an interface came from.
251 4 elements = 2 bits. */
5f42ddb0 252typedef enum ifsrc
6de9cd9a
DN
253{ IFSRC_UNKNOWN = 0, IFSRC_DECL, IFSRC_IFBODY, IFSRC_USAGE
254}
255ifsrc;
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. */
260extern const mstring flavors[];
261extern const mstring procedures[];
262extern const mstring intents[];
263extern const mstring access_types[];
264extern const mstring ifsrc_types[];
265
266/* Enumeration of all the generic intrinsic functions. Used by the
267 backend for identification of a function. */
268
269enum 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,
1e399e23 277 GFC_ISYM_ACOSH,
6de9cd9a
DN
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,
1e399e23 287 GFC_ISYM_ASINH,
6de9cd9a
DN
288 GFC_ISYM_ASSOCIATED,
289 GFC_ISYM_ATAN,
1e399e23 290 GFC_ISYM_ATANH,
6de9cd9a 291 GFC_ISYM_ATAN2,
e8525382
SK
292 GFC_ISYM_J0,
293 GFC_ISYM_J1,
294 GFC_ISYM_JN,
295 GFC_ISYM_Y0,
296 GFC_ISYM_Y1,
297 GFC_ISYM_YN,
6de9cd9a
DN
298 GFC_ISYM_BTEST,
299 GFC_ISYM_CEILING,
300 GFC_ISYM_CHAR,
f77b6ca3 301 GFC_ISYM_CHDIR,
6de9cd9a 302 GFC_ISYM_CMPLX,
b41b2534 303 GFC_ISYM_COMMAND_ARGUMENT_COUNT,
6de9cd9a
DN
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,
e8525382
SK
314 GFC_ISYM_ERF,
315 GFC_ISYM_ERFC,
2bd74949 316 GFC_ISYM_ETIME,
6de9cd9a
DN
317 GFC_ISYM_EXP,
318 GFC_ISYM_EXPONENT,
319 GFC_ISYM_FLOOR,
df65f093 320 GFC_ISYM_FNUM,
6de9cd9a 321 GFC_ISYM_FRACTION,
df65f093 322 GFC_ISYM_FSTAT,
a8c60d7f 323 GFC_ISYM_GETCWD,
4c0c6b9f
SK
324 GFC_ISYM_GETGID,
325 GFC_ISYM_GETPID,
326 GFC_ISYM_GETUID,
f77b6ca3 327 GFC_ISYM_HOSTNM,
6de9cd9a
DN
328 GFC_ISYM_IACHAR,
329 GFC_ISYM_IAND,
b41b2534 330 GFC_ISYM_IARGC,
6de9cd9a
DN
331 GFC_ISYM_IBCLR,
332 GFC_ISYM_IBITS,
333 GFC_ISYM_IBSET,
334 GFC_ISYM_ICHAR,
335 GFC_ISYM_IEOR,
f77b6ca3 336 GFC_ISYM_IERRNO,
6de9cd9a
DN
337 GFC_ISYM_INDEX,
338 GFC_ISYM_INT,
339 GFC_ISYM_IOR,
2bd74949 340 GFC_ISYM_IRAND,
ae8b8789 341 GFC_ISYM_ISATTY,
6de9cd9a
DN
342 GFC_ISYM_ISHFT,
343 GFC_ISYM_ISHFTC,
f77b6ca3 344 GFC_ISYM_KILL,
6de9cd9a
DN
345 GFC_ISYM_LBOUND,
346 GFC_ISYM_LEN,
347 GFC_ISYM_LEN_TRIM,
f77b6ca3 348 GFC_ISYM_LINK,
6de9cd9a
DN
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,
2bd74949 372 GFC_ISYM_RAND,
6de9cd9a 373 GFC_ISYM_REAL,
f77b6ca3 374 GFC_ISYM_RENAME,
6de9cd9a
DN
375 GFC_ISYM_REPEAT,
376 GFC_ISYM_RESHAPE,
377 GFC_ISYM_RRSPACING,
378 GFC_ISYM_SCALE,
379 GFC_ISYM_SCAN,
2bd74949 380 GFC_ISYM_SECOND,
6de9cd9a
DN
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,
df65f093 392 GFC_ISYM_STAT,
6de9cd9a 393 GFC_ISYM_SUM,
f77b6ca3 394 GFC_ISYM_SYMLNK,
5b1374e9 395 GFC_ISYM_SYSTEM,
6de9cd9a
DN
396 GFC_ISYM_TAN,
397 GFC_ISYM_TANH,
f77b6ca3
FXC
398 GFC_ISYM_TIME,
399 GFC_ISYM_TIME8,
6de9cd9a
DN
400 GFC_ISYM_TRANSFER,
401 GFC_ISYM_TRANSPOSE,
402 GFC_ISYM_TRIM,
403 GFC_ISYM_UBOUND,
d8fe26b2
SK
404 GFC_ISYM_UMASK,
405 GFC_ISYM_UNLINK,
6de9cd9a
DN
406 GFC_ISYM_UNPACK,
407 GFC_ISYM_VERIFY,
408 GFC_ISYM_CONVERSION
409};
410typedef enum gfc_generic_isym_id gfc_generic_isym_id;
411
412/************************* Structures *****************************/
413
414/* Symbol attribute structure. */
415typedef struct
416{
417 /* Variable attributes. */
418 unsigned allocatable:1, dimension:1, external:1, intrinsic:1,
419 optional:1, pointer:1, save:1, target:1,
3d79abbd 420 dummy:1, result:1, assign:1;
6de9cd9a
DN
421
422 unsigned data:1, /* Symbol is named in a DATA statement. */
423 use_assoc:1; /* Symbol has been use-associated. */
424
30aabb86 425 unsigned in_namelist:1, in_common:1, in_equivalence:1;
6de9cd9a 426 unsigned function:1, subroutine:1, generic:1;
d1303acd
TS
427 unsigned implicit_type:1; /* Type defined via implicit rules. */
428 unsigned untyped:1; /* No implicit type could be found. */
6de9cd9a
DN
429
430 /* Function/subroutine attributes */
431 unsigned sequence:1, elemental:1, pure:1, recursive:1;
432 unsigned unmaskable:1, masked:1, contained:1;
433
fe58e076
TK
434 /* This is set if the subroutine doesn't return. Currently, this
435 is only possible for intrinsic subroutines. */
436 unsigned noreturn:1;
437
3d79abbd
PB
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;
8b67b708 442
3d79abbd
PB
443 /* Set if this is the master function for a procedure with multiple
444 entry points. */
445 unsigned entry_master:1;
8b67b708 446
d198b59a
JJ
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;
3d79abbd 450
6de9cd9a
DN
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
8b67b708
FXC
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
6de9cd9a 463 /* Mutually exclusive multibit attributes. */
5f42ddb0
KG
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;
6de9cd9a 468
5f42ddb0 469 ENUM_BITFIELD (procedure_type) proc:3;
6de9cd9a
DN
470
471}
472symbol_attribute;
473
474
d4fa05b9
TS
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
6de9cd9a 480
d4fa05b9
TS
481 gfc_linebuf holds a single line of source code and information
482 which file it resides in
6de9cd9a 483
d4fa05b9
TS
484 locus point to the sourceline and the character in the source
485 line.
486*/
6de9cd9a 487
d4fa05b9 488typedef struct gfc_file
6de9cd9a 489{
d4fa05b9
TS
490 struct gfc_file *included_by, *next, *up;
491 int inclusion_line, line;
492 char *filename;
493} gfc_file;
494
495typedef struct gfc_linebuf
496{
c8cc8542
PB
497#ifdef USE_MAPPED_LOCATION
498 source_location location;
499#else
d4fa05b9 500 int linenum;
c8cc8542 501#endif
d4fa05b9
TS
502 struct gfc_file *file;
503 struct gfc_linebuf *next;
504
ba1defa5
RG
505 int truncated;
506
4cdf7223 507 char line[1];
d4fa05b9 508} gfc_linebuf;
4cdf7223
PB
509
510#define gfc_linebuf_header_size (offsetof (gfc_linebuf, line))
511
d4fa05b9
TS
512typedef struct
513{
514 char *nextc;
515 gfc_linebuf *lb;
516} locus;
6de9cd9a 517
0ce0154c
KG
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
6de9cd9a 526
6de9cd9a
DN
527extern 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
541typedef struct gfc_charlen
542{
543 struct gfc_expr *length;
544 struct gfc_charlen *next;
545 tree backend_decl;
546}
547gfc_charlen;
548
549#define gfc_get_charlen() gfc_getmem(sizeof(gfc_charlen))
550
551/* Type specification structure. FIXME: derived and cl could be union??? */
552typedef struct
553{
554 bt type;
555 int kind;
556 struct gfc_symbol *derived;
557 gfc_charlen *cl; /* For character types only. */
558}
559gfc_typespec;
560
561/* Array specification. */
562typedef 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}
568gfc_array_spec;
569
570#define gfc_get_array_spec() gfc_getmem(sizeof(gfc_array_spec))
571
572
573/* Components of derived types. */
574typedef struct gfc_component
575{
cb9e4f55 576 const char *name;
6de9cd9a
DN
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}
587gfc_component;
588
589#define gfc_get_component() gfc_getmem(sizeof(gfc_component))
590
591/* Formal argument lists are lists of symbols. */
592typedef struct gfc_formal_arglist
593{
4f613946 594 /* Symbol representing the argument at this position in the arglist. */
6de9cd9a 595 struct gfc_symbol *sym;
4f613946 596 /* Points to the next formal argument. */
6de9cd9a
DN
597 struct gfc_formal_arglist *next;
598}
599gfc_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. */
605typedef struct gfc_actual_arglist
606{
cb9e4f55 607 const char *name;
6de9cd9a
DN
608 /* Alternate return label when the expr member is null. */
609 struct gfc_st_label *label;
610
1600fe22
TS
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
6de9cd9a
DN
616 struct gfc_expr *expr;
617 struct gfc_actual_arglist *next;
618}
619gfc_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. */
626typedef struct gfc_namelist
627{
628 struct gfc_symbol *sym;
629 struct gfc_namelist *next;
630}
631gfc_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. */
640typedef 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}
654gfc_st_label;
655
656
657/* gfc_interface()-- Interfaces are lists of symbols strung together. */
658typedef struct gfc_interface
659{
660 struct gfc_symbol *sym;
661 locus where;
662 struct gfc_interface *next;
663}
664gfc_interface;
665
666#define gfc_get_interface() gfc_getmem(sizeof(gfc_interface))
667
668
669/* User operator nodes. These are like stripped down symbols. */
670typedef struct
671{
cb9e4f55 672 const char *name;
6de9cd9a
DN
673
674 gfc_interface *operator;
675 struct gfc_namespace *ns;
676 gfc_access access;
677}
678gfc_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
686typedef struct gfc_symbol
687{
cb9e4f55
TS
688 const char *name; /* Primary name, before renaming */
689 const char *module; /* Module this symbol came from */
6de9cd9a
DN
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
9056bd70 711 struct gfc_symbol *common_next; /* Links for COMMON syms */
30aabb86
PT
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
6de9cd9a
DN
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;
5291e69a
PB
732 /* Nonzero if all equivalences associated with this symbol have been
733 processed. */
734 unsigned equiv_built:1;
6de9cd9a
DN
735 int refs;
736 struct gfc_namespace *ns; /* namespace containing this symbol */
737
738 tree backend_decl;
6de9cd9a
DN
739}
740gfc_symbol;
741
742
9056bd70
TS
743/* This structure is used to keep track of symbols in common blocks. */
744
30aabb86 745typedef struct gfc_common_head
9056bd70
TS
746{
747 locus where;
748 int use_assoc, saved;
53814b8f 749 char name[GFC_MAX_SYMBOL_LEN + 1];
30aabb86 750 struct gfc_symbol *head;
9056bd70
TS
751}
752gfc_common_head;
753
754#define gfc_get_common_head() gfc_getmem(sizeof(gfc_common_head))
755
756
3d79abbd
PB
757/* A list of all the alternate entry points for a procedure. */
758
759typedef 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}
770gfc_entry_list;
771
772#define gfc_get_entry_list() \
773 (gfc_entry_list *) gfc_getmem(sizeof(gfc_entry_list))
9056bd70 774
6de9cd9a
DN
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
782typedef struct gfc_symtree
783{
784 BBT_HEADER (gfc_symtree);
cb9e4f55 785 const char *name;
6de9cd9a
DN
786 int ambiguous;
787 union
788 {
789 gfc_symbol *sym; /* Symbol associated with this node */
790 gfc_user_op *uop;
9056bd70 791 gfc_common_head *common;
6de9cd9a
DN
792 }
793 n;
794
795}
796gfc_symtree;
797
798
3d79abbd
PB
799/* A namespace describes the contents of procedure, module or
800 interface block. */
801/* ??? Anything else use these? */
802
6de9cd9a
DN
803typedef struct gfc_namespace
804{
4f613946
TS
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;
6de9cd9a 811
4f613946 812 /* If set_flag[letter] is set, an implicit type has been set for letter. */
6de9cd9a 813 int set_flag[GFC_LETTERS];
4f613946
TS
814 /* Keeps track of the implicit types associated with the letters. */
815 gfc_typespec default_type[GFC_LETTERS];
6de9cd9a 816
4f613946 817 /* If this is a namespace of a procedure, this points to the procedure. */
6de9cd9a 818 struct gfc_symbol *proc_name;
4f613946
TS
819 /* If this is the namespace of a unit which contains executable
820 code, this points to it. */
6de9cd9a 821 struct gfc_code *code;
4f613946
TS
822
823 /* Points to the equivalences set up in this namespace. */
6de9cd9a 824 struct gfc_equiv *equiv;
4f613946
TS
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;
6de9cd9a
DN
838 gfc_access default_access, operator_access[GFC_INTRINSIC_OPS];
839
840 gfc_st_label *st_labels;
294fbfc8
TS
841 /* This list holds information about all the data initializers in
842 this namespace. */
6de9cd9a
DN
843 struct gfc_data *data;
844
845 gfc_charlen *cl_list;
846
4c1f4f52 847 int save_all, seen_save, seen_implicit_none;
3d79abbd
PB
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;
0de4325e
TS
856
857 /* Set to 1 if namespace is a BLOCK DATA program unit. */
858 int is_block_data;
6de9cd9a
DN
859}
860gfc_namespace;
861
862extern gfc_namespace *gfc_current_ns;
863
c9543002
TS
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
868typedef struct gfc_gsymbol
869{
870 BBT_HEADER(gfc_gsymbol);
871
973a384d 872 const char *name;
c9543002
TS
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}
879gfc_gsymbol;
880
881extern gfc_gsymbol *gfc_gsym_root;
6de9cd9a
DN
882
883/* Information on interfaces being built. */
884typedef 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}
892gfc_interface_info;
893
894extern gfc_interface_info current_interface;
895
896
897/* Array reference. */
898typedef 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}
915gfc_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
926typedef enum
927 { REF_ARRAY, REF_COMPONENT, REF_SUBSTRING }
928ref_type;
929
930typedef 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}
957gfc_ref;
958
959#define gfc_get_ref() gfc_getmem(sizeof(gfc_ref))
960
961
962/* Structures representing intrinsic symbols and their arguments lists. */
963typedef 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}
974gfc_intrinsic_arg;
975
976
4f613946
TS
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
6de9cd9a
DN
984typedef union
985{
4c0c6b9f 986 try (*f0)(void);
6de9cd9a
DN
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 *);
f3207b37 991 try (*f3ml)(gfc_actual_arglist *);
7551270e 992 try (*f3red)(gfc_actual_arglist *);
6de9cd9a
DN
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}
998gfc_check_f;
999
4f613946
TS
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. */
6de9cd9a
DN
1003
1004typedef union
1005{
4c0c6b9f 1006 struct gfc_expr *(*f0)(void);
6de9cd9a
DN
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}
1018gfc_simplify_f;
1019
4f613946 1020/* Again like gfc_check_f, these specify the type of the resolution
13795658 1021 function associated with an intrinsic. The fX are just like in
4f613946
TS
1022 gfc_check_f. f1m is used for MIN and MAX, s1 is used for abort().
1023 */
6de9cd9a
DN
1024
1025typedef 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}
1039gfc_resolve_f;
1040
1041
1042typedef struct gfc_intrinsic_sym
1043{
cb9e4f55 1044 const char *name, *lib_name;
6de9cd9a
DN
1045 gfc_intrinsic_arg *formal;
1046 gfc_typespec ts;
fe58e076 1047 int elemental, pure, generic, specific, actual_ok, standard, noreturn;
6de9cd9a
DN
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}
1056gfc_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>
f8e566e5
SK
1073#include <mpfr.h>
1074#define GFC_RND_MODE GMP_RNDN
6de9cd9a
DN
1075
1076typedef 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
6de9cd9a
DN
1085 /* Nonnull for functions and structure constructors */
1086 gfc_symtree *symtree;
1087
6de9cd9a
DN
1088 gfc_ref *ref;
1089
6de9cd9a
DN
1090 locus where;
1091
d3642f89
FW
1092 /* True if it is converted from Hollerith constant. */
1093 unsigned int from_H : 1;
1094
6de9cd9a
DN
1095 union
1096 {
6de9cd9a 1097 int logical;
f8e566e5
SK
1098 mpz_t integer;
1099
1100 mpfr_t real;
6de9cd9a
DN
1101
1102 struct
1103 {
f8e566e5 1104 mpfr_t r, i;
6de9cd9a
DN
1105 }
1106 complex;
1107
58b03ab2
TS
1108 struct
1109 {
1110 gfc_intrinsic_op operator;
1111 gfc_user_op *uop;
1112 struct gfc_expr *op1, *op2;
1113 }
1114 op;
1115
6de9cd9a
DN
1116 struct
1117 {
1118 gfc_actual_arglist *actual;
6b25a558 1119 const char *name; /* Points to the ultimate name of the function */
6de9cd9a
DN
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}
1137gfc_expr;
1138
1139
94538bd1 1140#define gfc_get_shape(rank) ((mpz_t *) gfc_getmem((rank)*sizeof(mpz_t)))
6de9cd9a
DN
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
1147typedef struct
1148{
e2cad04b 1149 /* Values really representable by the target. */
14df5747 1150 mpz_t huge, pedantic_min_int, min_int, max_int;
e2cad04b
RH
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;
6de9cd9a
DN
1161}
1162gfc_integer_info;
1163
1164extern gfc_integer_info gfc_integer_kinds[];
1165
1166
1167typedef struct
1168{
1169 int kind, bit_size;
1170
e2cad04b
RH
1171 /* True if the C++ type bool, C99 type _Bool, maps to this precision. */
1172 unsigned int c_bool : 1;
6de9cd9a
DN
1173}
1174gfc_logical_info;
1175
1176extern gfc_logical_info gfc_logical_kinds[];
1177
1178
1179typedef struct
1180{
2d0aa65f 1181 mpfr_t epsilon, huge, tiny, subnormal;
6de9cd9a 1182 int kind, radix, digits, min_exponent, max_exponent;
6de9cd9a 1183 int range, precision;
e2cad04b
RH
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;
6de9cd9a
DN
1193}
1194gfc_real_info;
1195
1196extern 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. */
1201typedef struct gfc_equiv
1202{
1203 struct gfc_equiv *next, *eq;
1204 gfc_expr *expr;
30aabb86 1205 const char *module;
6de9cd9a
DN
1206 int used;
1207}
1208gfc_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
410d1a45
SK
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
6de9cd9a
DN
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
1225typedef 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}
1245gfc_case;
1246
1247#define gfc_get_case() gfc_getmem(sizeof(gfc_case))
1248
1249
1250typedef struct
1251{
1252 gfc_expr *var, *start, *end, *step;
1253}
1254gfc_iterator;
1255
1256#define gfc_get_iterator() gfc_getmem(sizeof(gfc_iterator))
1257
1258
f7b529fa 1259/* Allocation structure for ALLOCATE, DEALLOCATE and NULLIFY statements. */
6de9cd9a
DN
1260
1261typedef struct gfc_alloc
1262{
1263 gfc_expr *expr;
1264 struct gfc_alloc *next;
1265}
1266gfc_alloc;
1267
1268#define gfc_get_alloc() gfc_getmem(sizeof(gfc_alloc))
1269
1270
1271typedef struct
1272{
1273 gfc_expr *unit, *file, *status, *access, *form, *recl,
7aba8abe 1274 *blank, *position, *action, *delim, *pad, *iostat, *iomsg;
6de9cd9a
DN
1275 gfc_st_label *err;
1276}
1277gfc_open;
1278
1279
1280typedef struct
1281{
7aba8abe 1282 gfc_expr *unit, *status, *iostat, *iomsg;
6de9cd9a
DN
1283 gfc_st_label *err;
1284}
1285gfc_close;
1286
1287
1288typedef struct
1289{
7aba8abe 1290 gfc_expr *unit, *iostat, *iomsg;
6de9cd9a
DN
1291 gfc_st_label *err;
1292}
1293gfc_filepos;
1294
1295
1296typedef 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,
7aba8abe 1301 *write, *readwrite, *delim, *pad, *iolength, *iomsg;
6de9cd9a
DN
1302
1303 gfc_st_label *err;
1304
1305}
1306gfc_inquire;
1307
1308
1309typedef struct
1310{
7aba8abe 1311 gfc_expr *io_unit, *format_expr, *rec, *advance, *iostat, *size, *iomsg;
6de9cd9a
DN
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}
1320gfc_dt;
1321
1322
1323typedef struct gfc_forall_iterator
1324{
1325 gfc_expr *var, *start, *end, *stride;
1326 struct gfc_forall_iterator *next;
1327}
1328gfc_forall_iterator;
1329
1330
1331/* Executable statements that fill gfc_code structures. */
1332typedef enum
1333{
1334 EXEC_NOP = 1, EXEC_ASSIGN, EXEC_LABEL_ASSIGN, EXEC_POINTER_ASSIGN,
3d79abbd
PB
1335 EXEC_GOTO, EXEC_CALL, EXEC_RETURN, EXEC_ENTRY,
1336 EXEC_PAUSE, EXEC_STOP, EXEC_CONTINUE,
6de9cd9a
DN
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,
6403ec5f 1342 EXEC_BACKSPACE, EXEC_ENDFILE, EXEC_INQUIRE, EXEC_REWIND, EXEC_FLUSH
6de9cd9a
DN
1343}
1344gfc_exec_op;
1345
1346typedef 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;
3d79abbd 1375 gfc_entry_list *entry;
6de9cd9a
DN
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}
1383gfc_code;
1384
1385
1386/* Storage for DATA statements. */
1387typedef struct gfc_data_variable
1388{
1389 gfc_expr *expr;
1390 gfc_iterator iter;
1391 struct gfc_data_variable *list, *next;
1392}
1393gfc_data_variable;
1394
1395
1396typedef struct gfc_data_value
1397{
b8502435 1398 unsigned int repeat;
6de9cd9a 1399 gfc_expr *expr;
6de9cd9a
DN
1400 struct gfc_data_value *next;
1401}
1402gfc_data_value;
1403
1404
1405typedef struct gfc_data
1406{
1407 gfc_data_variable *var;
1408 gfc_data_value *value;
1409 locus where;
1410
1411 struct gfc_data *next;
1412}
1413gfc_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 */
1421typedef struct
1422{
6de9cd9a
DN
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;
2d8b59df 1433 int warn_underflow;
6de9cd9a
DN
1434 int warn_surprising;
1435 int warn_unused_labels;
1436
3ae9eb27
SK
1437 int flag_default_double;
1438 int flag_default_integer;
1439 int flag_default_real;
6de9cd9a
DN
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;
973ff4c0 1449 int flag_f2c;
ee5426a4 1450 int flag_automatic;
131c66cd 1451 int flag_backslash;
e0bcf78c 1452 int flag_d_lines;
6de9cd9a
DN
1453
1454 int q_kind;
3ae9eb27 1455
6de9cd9a
DN
1456 int warn_std;
1457 int allow_std;
b7892582 1458 int warn_nonstd_intrinsics;
6de9cd9a
DN
1459}
1460gfc_option_t;
1461
1462extern gfc_option_t gfc_option;
1463
1464
1465/* Constructor nodes for array and structure constructors. */
1466typedef 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}
1482gfc_constructor;
1483
1484
1485typedef struct iterator_stack
1486{
1487 gfc_symtree *variable;
1488 mpz_t value;
1489 struct iterator_stack *prev;
1490}
1491iterator_stack;
1492extern iterator_stack *iter_stack;
1493
1494/************************ Function prototypes *************************/
1495
1496/* data.c */
1497void gfc_formalize_init_value (gfc_symbol *);
1498void gfc_get_section_index (gfc_array_ref *, mpz_t *, mpz_t *);
1499void gfc_assign_data_value (gfc_expr *, gfc_expr *, mpz_t);
b8502435 1500void gfc_assign_data_value_range (gfc_expr *, gfc_expr *, mpz_t, mpz_t);
6de9cd9a
DN
1501void gfc_advance_section (mpz_t *, gfc_array_ref *, mpz_t *);
1502
1503/* scanner.c */
1504void gfc_scanner_done_1 (void);
1505void gfc_scanner_init_1 (void);
1506
1507void gfc_add_include_path (const char *);
1508void gfc_release_include_path (void);
1509FILE *gfc_open_included_file (const char *);
1510
6de9cd9a
DN
1511int gfc_at_end (void);
1512int gfc_at_eof (void);
1513int gfc_at_bol (void);
1514int gfc_at_eol (void);
1515void gfc_advance_line (void);
1516int gfc_check_include (void);
1517
1518void gfc_skip_comments (void);
1519int gfc_next_char_literal (int);
1520int gfc_next_char (void);
1521int gfc_peek_char (void);
1522void gfc_error_recovery (void);
1523void gfc_gobble_whitespace (void);
e0bcf78c 1524try gfc_new_file (void);
6de9cd9a 1525
d4fa05b9 1526extern gfc_source_form gfc_current_form;
e0bcf78c 1527extern const char *gfc_source_file;
63645982 1528extern locus gfc_current_locus;
6de9cd9a
DN
1529
1530/* misc.c */
1531void *gfc_getmem (size_t) ATTRIBUTE_MALLOC;
1532void gfc_free (void *);
1533int gfc_terminal_width(void);
1534void gfc_clear_ts (gfc_typespec *);
1535FILE *gfc_open_file (const char *);
6de9cd9a
DN
1536const char *gfc_basic_typename (bt);
1537const char *gfc_typename (gfc_typespec *);
1538
1539#define gfc_op2string(OP) (OP == INTRINSIC_ASSIGN ? \
1540 "=" : gfc_code2string (intrinsic_operators, OP))
1541
1542const char *gfc_code2string (const mstring *, int);
1543int gfc_string2code (const mstring *, const char *);
1544const char *gfc_intent_string (sym_intent);
1545
1546void gfc_init_1 (void);
1547void gfc_init_2 (void);
1548void gfc_done_1 (void);
1549void gfc_done_2 (void);
1550
1551/* options.c */
1552unsigned int gfc_init_options (unsigned int, const char **);
1553int gfc_handle_option (size_t, const char *, int);
1554bool gfc_post_options (const char **);
1555
1556/* iresolve.c */
6b25a558 1557const char * gfc_get_string (const char *, ...) ATTRIBUTE_PRINTF_1;
6de9cd9a
DN
1558
1559/* error.c */
1560
1561typedef struct gfc_error_buf
1562{
1563 int flag;
d71b89ca
JJ
1564 size_t allocated, index;
1565 char *message;
6de9cd9a
DN
1566} gfc_error_buf;
1567
1568void gfc_error_init_1 (void);
1569void gfc_buffer_error (int);
1570
0ce0154c
KG
1571void gfc_warning (const char *, ...) ATTRIBUTE_GCC_GFC(1,2);
1572void gfc_warning_now (const char *, ...) ATTRIBUTE_GCC_GFC(1,2);
6de9cd9a
DN
1573void gfc_clear_warning (void);
1574void gfc_warning_check (void);
1575
0ce0154c
KG
1576void gfc_error (const char *, ...) ATTRIBUTE_GCC_GFC(1,2);
1577void gfc_error_now (const char *, ...) ATTRIBUTE_GCC_GFC(1,2);
1578void gfc_fatal_error (const char *, ...) ATTRIBUTE_NORETURN ATTRIBUTE_GCC_GFC(1,2);
1579void gfc_internal_error (const char *, ...) ATTRIBUTE_NORETURN ATTRIBUTE_GCC_GFC(1,2);
6de9cd9a
DN
1580void gfc_clear_error (void);
1581int gfc_error_check (void);
1582
0ce0154c 1583try gfc_notify_std (int, const char *, ...) ATTRIBUTE_GCC_GFC(2,3);
6de9cd9a
DN
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
1589void gfc_push_error (gfc_error_buf *);
1590void gfc_pop_error (gfc_error_buf *);
d71b89ca 1591void gfc_free_error (gfc_error_buf *);
6de9cd9a
DN
1592
1593void gfc_status (const char *, ...) ATTRIBUTE_PRINTF_1;
1594void gfc_status_char (char);
1595
1596void gfc_get_errors (int *, int *);
1597
1598/* arith.c */
1599void gfc_arith_init_1 (void);
1600void gfc_arith_done_1 (void);
1601
5e8e542f 1602/* trans-types.c */
e7a2d5fb 1603int gfc_validate_kind (bt, int, bool);
6de9cd9a 1604extern int gfc_index_integer_kind;
9d64df18 1605extern int gfc_default_integer_kind;
f4e7375a 1606extern int gfc_max_integer_kind;
9d64df18
TS
1607extern int gfc_default_real_kind;
1608extern int gfc_default_double_kind;
1609extern int gfc_default_character_kind;
1610extern int gfc_default_logical_kind;
1611extern int gfc_default_complex_kind;
e8525382 1612extern int gfc_c_int_kind;
6de9cd9a
DN
1613
1614/* symbol.c */
1615void gfc_clear_new_implicit (void);
1107b970
PB
1616try gfc_add_new_implicit_range (int, int);
1617try gfc_merge_new_implicit (gfc_typespec *);
6de9cd9a 1618void gfc_set_implicit_none (void);
6de9cd9a
DN
1619
1620gfc_typespec *gfc_get_default_type (gfc_symbol *, gfc_namespace *);
1621try gfc_set_default_type (gfc_symbol *, int, gfc_namespace *);
1622
1623void gfc_set_component_attr (gfc_component *, symbol_attribute *);
1624void gfc_get_component_attr (symbol_attribute *, gfc_component *);
1625
1626void gfc_set_sym_referenced (gfc_symbol * sym);
1627
1628try gfc_add_allocatable (symbol_attribute *, locus *);
231b2fcc 1629try gfc_add_dimension (symbol_attribute *, const char *, locus *);
6de9cd9a
DN
1630try gfc_add_external (symbol_attribute *, locus *);
1631try gfc_add_intrinsic (symbol_attribute *, locus *);
1632try gfc_add_optional (symbol_attribute *, locus *);
1633try gfc_add_pointer (symbol_attribute *, locus *);
231b2fcc
TS
1634try gfc_add_result (symbol_attribute *, const char *, locus *);
1635try gfc_add_save (symbol_attribute *, const char *, locus *);
6de9cd9a
DN
1636try gfc_add_saved_common (symbol_attribute *, locus *);
1637try gfc_add_target (symbol_attribute *, locus *);
231b2fcc
TS
1638try gfc_add_dummy (symbol_attribute *, const char *, locus *);
1639try gfc_add_generic (symbol_attribute *, const char *, locus *);
6de9cd9a 1640try gfc_add_common (symbol_attribute *, locus *);
231b2fcc 1641try gfc_add_in_common (symbol_attribute *, const char *, locus *);
e8ec07e1 1642try gfc_add_in_equivalence (symbol_attribute *, const char *, locus *);
231b2fcc
TS
1643try gfc_add_data (symbol_attribute *, const char *, locus *);
1644try gfc_add_in_namelist (symbol_attribute *, const char *, locus *);
1645try gfc_add_sequence (symbol_attribute *, const char *, locus *);
6de9cd9a
DN
1646try gfc_add_elemental (symbol_attribute *, locus *);
1647try gfc_add_pure (symbol_attribute *, locus *);
1648try gfc_add_recursive (symbol_attribute *, locus *);
231b2fcc
TS
1649try gfc_add_function (symbol_attribute *, const char *, locus *);
1650try gfc_add_subroutine (symbol_attribute *, const char *, locus *);
1651
1652try gfc_add_access (symbol_attribute *, gfc_access, const char *, locus *);
1653try gfc_add_flavor (symbol_attribute *, sym_flavor, const char *, locus *);
1654try gfc_add_entry (symbol_attribute *, const char *, locus *);
1655try gfc_add_procedure (symbol_attribute *, procedure_type,
1656 const char *, locus *);
6de9cd9a
DN
1657try gfc_add_intent (symbol_attribute *, sym_intent, locus *);
1658try gfc_add_explicit_interface (gfc_symbol *, ifsrc,
1659 gfc_formal_arglist *, locus *);
1660try gfc_add_type (gfc_symbol *, gfc_typespec *, locus *);
1661
1662void gfc_clear_attr (symbol_attribute *);
1663try gfc_missing_attr (symbol_attribute *, locus *);
1664try gfc_copy_attr (symbol_attribute *, symbol_attribute *, locus *);
1665
1666try gfc_add_component (gfc_symbol *, const char *, gfc_component **);
1667gfc_symbol *gfc_use_derived (gfc_symbol *);
1668gfc_symtree *gfc_use_derived_tree (gfc_symtree *);
1669gfc_component *gfc_find_component (gfc_symbol *, const char *);
1670
1671gfc_st_label *gfc_get_st_label (int);
1672void gfc_free_st_label (gfc_st_label *);
1673void gfc_define_st_label (gfc_st_label *, gfc_sl_type, locus *);
1674try gfc_reference_st_label (gfc_st_label *, gfc_sl_type);
1675
0366dfe9 1676gfc_namespace *gfc_get_namespace (gfc_namespace *, int);
6de9cd9a
DN
1677gfc_symtree *gfc_new_symtree (gfc_symtree **, const char *);
1678gfc_symtree *gfc_find_symtree (gfc_symtree *, const char *);
1679gfc_user_op *gfc_get_uop (const char *);
1680gfc_user_op *gfc_find_uop (const char *, gfc_namespace *);
1681void gfc_free_symbol (gfc_symbol *);
1682gfc_symbol *gfc_new_symbol (const char *, gfc_namespace *);
1683int gfc_find_symbol (const char *, gfc_namespace *, int, gfc_symbol **);
1684int gfc_find_sym_tree (const char *, gfc_namespace *, int, gfc_symtree **);
1685int gfc_get_symbol (const char *, gfc_namespace *, gfc_symbol **);
1686int gfc_get_sym_tree (const char *, gfc_namespace *, gfc_symtree **);
1687int gfc_get_ha_symbol (const char *, gfc_symbol **);
1688int gfc_get_ha_sym_tree (const char *, gfc_symtree **);
1689
1690int gfc_symbols_could_alias (gfc_symbol *, gfc_symbol *);
1691
1692void gfc_undo_symbols (void);
1693void gfc_commit_symbols (void);
1694void gfc_free_namespace (gfc_namespace *);
1695
1696void gfc_symbol_init_2 (void);
1697void gfc_symbol_done_2 (void);
1698
9056bd70 1699void gfc_traverse_symtree (gfc_symtree *, void (*)(gfc_symtree *));
6de9cd9a
DN
1700void gfc_traverse_ns (gfc_namespace *, void (*)(gfc_symbol *));
1701void gfc_traverse_user_op (gfc_namespace *, void (*)(gfc_user_op *));
1702void gfc_save_all (gfc_namespace *);
1703
1704void gfc_symbol_state (void);
1705
cb9e4f55
TS
1706gfc_gsymbol *gfc_get_gsymbol (const char *);
1707gfc_gsymbol *gfc_find_gsymbol (gfc_gsymbol *, const char *);
c9543002 1708
6de9cd9a
DN
1709/* intrinsic.c */
1710extern int gfc_init_expr;
1711
1712/* Given a symbol that we have decided is intrinsic, mark it as such
1713 by placing it into a special module that is otherwise impossible to
1714 read or write. */
1715
cb9e4f55 1716#define gfc_intrinsic_symbol(SYM) SYM->module = gfc_get_string ("(intrinsic)")
6de9cd9a
DN
1717
1718void gfc_intrinsic_init_1 (void);
1719void gfc_intrinsic_done_1 (void);
1720
1721char gfc_type_letter (bt);
1722gfc_symbol * gfc_get_intrinsic_sub_symbol (const char *);
1723try gfc_convert_type (gfc_expr *, gfc_typespec *, int);
1724try gfc_convert_type_warn (gfc_expr *, gfc_typespec *, int, int);
1725int gfc_generic_intrinsic (const char *);
1726int gfc_specific_intrinsic (const char *);
1727int gfc_intrinsic_name (const char *, int);
1728gfc_intrinsic_sym *gfc_find_function (const char *);
1729
1730match gfc_intrinsic_func_interface (gfc_expr *, int);
1731match gfc_intrinsic_sub_interface (gfc_code *, int);
1732
1733/* simplify.c */
1734void gfc_simplify_init_1 (void);
6de9cd9a
DN
1735
1736/* match.c -- FIXME */
1737void gfc_free_iterator (gfc_iterator *, int);
1738void gfc_free_forall_iterator (gfc_forall_iterator *);
1739void gfc_free_alloc_list (gfc_alloc *);
1740void gfc_free_namelist (gfc_namelist *);
1741void gfc_free_equiv (gfc_equiv *);
1742void gfc_free_data (gfc_data *);
1743void gfc_free_case_list (gfc_case *);
1744
1745/* expr.c */
1746void gfc_free_actual_arglist (gfc_actual_arglist *);
1747gfc_actual_arglist *gfc_copy_actual_arglist (gfc_actual_arglist *);
1748const char *gfc_extract_int (gfc_expr *, int *);
1749
1750gfc_expr *gfc_build_conversion (gfc_expr *);
1751void gfc_free_ref_list (gfc_ref *);
1752void gfc_type_convert_binary (gfc_expr *);
1753int gfc_is_constant_expr (gfc_expr *);
1754try gfc_simplify_expr (gfc_expr *, int);
1755
1756gfc_expr *gfc_get_expr (void);
1757void gfc_free_expr (gfc_expr *);
1758void gfc_replace_expr (gfc_expr *, gfc_expr *);
1759gfc_expr *gfc_int_expr (int);
1760gfc_expr *gfc_logical_expr (int, locus *);
1761mpz_t *gfc_copy_shape (mpz_t *, int);
94538bd1 1762mpz_t *gfc_copy_shape_excluding (mpz_t *, int, gfc_expr *);
6de9cd9a
DN
1763gfc_expr *gfc_copy_expr (gfc_expr *);
1764
1765try gfc_specification_expr (gfc_expr *);
1766
1767int gfc_numeric_ts (gfc_typespec *);
1768int gfc_kind_max (gfc_expr *, gfc_expr *);
1769
1770try gfc_check_conformance (const char *, gfc_expr *, gfc_expr *);
1771try gfc_check_assign (gfc_expr *, gfc_expr *, int);
1772try gfc_check_pointer_assign (gfc_expr *, gfc_expr *);
1773try gfc_check_assign_symbol (gfc_symbol *, gfc_expr *);
1774
54b4ba60 1775gfc_expr *gfc_default_initializer (gfc_typespec *);
294fbfc8
TS
1776gfc_expr *gfc_get_variable_expr (gfc_symtree *);
1777
54b4ba60 1778
6de9cd9a
DN
1779/* st.c */
1780extern gfc_code new_st;
1781
1782void gfc_clear_new_st (void);
1783gfc_code *gfc_get_code (void);
1784gfc_code *gfc_append_code (gfc_code *, gfc_code *);
1785void gfc_free_statement (gfc_code *);
1786void gfc_free_statements (gfc_code *);
1787
1788/* resolve.c */
1789try gfc_resolve_expr (gfc_expr *);
1790void gfc_resolve (gfc_namespace *);
1791int gfc_impure_variable (gfc_symbol *);
1792int gfc_pure (gfc_symbol *);
1793int gfc_elemental (gfc_symbol *);
8d5cfa27 1794try gfc_resolve_iterator (gfc_iterator *, bool);
6de9cd9a 1795try gfc_resolve_index (gfc_expr *, int);
bf302220 1796try gfc_resolve_dim_arg (gfc_expr *);
6de9cd9a
DN
1797
1798/* array.c */
1799void gfc_free_array_spec (gfc_array_spec *);
1800gfc_array_ref *gfc_copy_array_ref (gfc_array_ref *);
1801
1802try gfc_set_array_spec (gfc_symbol *, gfc_array_spec *, locus *);
1803gfc_array_spec *gfc_copy_array_spec (gfc_array_spec *);
1804try gfc_resolve_array_spec (gfc_array_spec *, int);
1805
1806int gfc_compare_array_spec (gfc_array_spec *, gfc_array_spec *);
1807
1808gfc_expr *gfc_start_constructor (bt, int, locus *);
1809void gfc_append_constructor (gfc_expr *, gfc_expr *);
1810void gfc_free_constructor (gfc_constructor *);
1811void gfc_simplify_iterator_var (gfc_expr *);
1812try gfc_expand_constructor (gfc_expr *);
1813int gfc_constant_ac (gfc_expr *);
1814int gfc_expanded_ac (gfc_expr *);
1815try gfc_resolve_array_constructor (gfc_expr *);
1816try gfc_check_constructor_type (gfc_expr *);
1817try gfc_check_iter_variable (gfc_expr *);
1818try gfc_check_constructor (gfc_expr *, try (*)(gfc_expr *));
1819gfc_constructor *gfc_copy_constructor (gfc_constructor * src);
1820gfc_expr *gfc_get_array_element (gfc_expr *, int);
1821try gfc_array_size (gfc_expr *, mpz_t *);
1822try gfc_array_dimen_size (gfc_expr *, int, mpz_t *);
1823try gfc_array_ref_shape (gfc_array_ref *, mpz_t *);
1824gfc_array_ref *gfc_find_array_ref (gfc_expr *);
1825void gfc_insert_constructor (gfc_expr *, gfc_constructor *);
1826gfc_constructor *gfc_get_constructor (void);
1827tree gfc_conv_array_initializer (tree type, gfc_expr * expr);
1828try spec_size (gfc_array_spec *, mpz_t *);
4077d207 1829int gfc_is_compile_time_shape (gfc_array_spec *);
6de9cd9a
DN
1830
1831/* interface.c -- FIXME: some of these should be in symbol.c */
1832void gfc_free_interface (gfc_interface *);
1833int gfc_compare_types (gfc_typespec *, gfc_typespec *);
1834void gfc_check_interfaces (gfc_namespace *);
1835void gfc_procedure_use (gfc_symbol *, gfc_actual_arglist **, locus *);
1836gfc_symbol *gfc_search_interface (gfc_interface *, int,
1837 gfc_actual_arglist **);
1838try gfc_extend_expr (gfc_expr *);
1839void gfc_free_formal_arglist (gfc_formal_arglist *);
1840try gfc_extend_assign (gfc_code *, gfc_namespace *);
1841try gfc_add_interface (gfc_symbol * sym);
1842
1843/* io.c */
1844extern gfc_st_label format_asterisk;
1845
1846void gfc_free_open (gfc_open *);
1847try gfc_resolve_open (gfc_open *);
1848void gfc_free_close (gfc_close *);
1849try gfc_resolve_close (gfc_close *);
1850void gfc_free_filepos (gfc_filepos *);
1851try gfc_resolve_filepos (gfc_filepos *);
1852void gfc_free_inquire (gfc_inquire *);
1853try gfc_resolve_inquire (gfc_inquire *);
1854void gfc_free_dt (gfc_dt *);
1855try gfc_resolve_dt (gfc_dt *);
1856
1857/* module.c */
1858void gfc_module_init_2 (void);
1859void gfc_module_done_2 (void);
1860void gfc_dump_module (const char *, int);
af30f793 1861bool gfc_check_access (gfc_access, gfc_access);
6de9cd9a
DN
1862
1863/* primary.c */
1864symbol_attribute gfc_variable_attr (gfc_expr *, gfc_typespec *);
1865symbol_attribute gfc_expr_attr (gfc_expr *);
1866
1867/* trans.c */
1868void gfc_generate_code (gfc_namespace *);
1869void gfc_generate_module_code (gfc_namespace *);
1870
1871/* bbt.c */
1872typedef int (*compare_fn) (void *, void *);
1873void gfc_insert_bbt (void *, void *, compare_fn);
1874void gfc_delete_bbt (void *, void *, compare_fn);
1875
1876/* dump-parse-tree.c */
1877void gfc_show_namespace (gfc_namespace *);
1878
1879/* parse.c */
1880try gfc_parse_file (void);
1881
53814b8f 1882#endif /* GCC_GFORTRAN_H */