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