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