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