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