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