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