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