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