]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/fortran/gfortran.h
tree-cfg.c (verify_gimple_expr): Accept OBJ_TYPE_REF.
[thirdparty/gcc.git] / gcc / fortran / gfortran.h
CommitLineData
6de9cd9a 1/* gfortran header file
710a179f 2 Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
840bd9f7 3 Free Software Foundation, Inc.
6de9cd9a
DN
4 Contributed by Andy Vaught
5
9fc4d79b 6This file is part of GCC.
6de9cd9a 7
9fc4d79b
TS
8GCC is free software; you can redistribute it and/or modify it under
9the terms of the GNU General Public License as published by the Free
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,
69773742 225 ST_OMP_THREADPRIVATE, ST_OMP_WORKSHARE, ST_PROCEDURE,
6c7a4dfd 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
51b09ce3
AL
513typedef enum
514{
515 GFC_INIT_REAL_OFF = 0,
516 GFC_INIT_REAL_ZERO,
517 GFC_INIT_REAL_NAN,
518 GFC_INIT_REAL_INF,
519 GFC_INIT_REAL_NEG_INF
520}
521init_local_real;
522
523typedef enum
524{
525 GFC_INIT_LOGICAL_OFF = 0,
526 GFC_INIT_LOGICAL_FALSE,
527 GFC_INIT_LOGICAL_TRUE
528}
529init_local_logical;
530
531typedef enum
532{
533 GFC_INIT_CHARACTER_OFF = 0,
534 GFC_INIT_CHARACTER_ON
535}
536init_local_character;
537
538typedef enum
539{
540 GFC_INIT_INTEGER_OFF = 0,
541 GFC_INIT_INTEGER_ON
542}
543init_local_integer;
544
6de9cd9a
DN
545/************************* Structures *****************************/
546
5cf54585
TS
547/* Used for keeping things in balanced binary trees. */
548#define BBT_HEADER(self) int priority; struct self *left, *right
549
a8b3b0b6
CR
550#define NAMED_INTCST(a,b,c) a,
551typedef enum
552{
553 ISOFORTRANENV_INVALID = -1,
554#include "iso-fortran-env.def"
555 ISOFORTRANENV_LAST, ISOFORTRANENV_NUMBER = ISOFORTRANENV_LAST
556}
557iso_fortran_env_symbol;
558#undef NAMED_INTCST
559
560#define NAMED_INTCST(a,b,c) a,
561#define NAMED_REALCST(a,b,c) a,
562#define NAMED_CMPXCST(a,b,c) a,
563#define NAMED_LOGCST(a,b,c) a,
564#define NAMED_CHARKNDCST(a,b,c) a,
565#define NAMED_CHARCST(a,b,c) a,
566#define DERIVED_TYPE(a,b,c) a,
567#define PROCEDURE(a,b) a,
568typedef enum
569{
570 ISOCBINDING_INVALID = -1,
571#include "iso-c-binding.def"
572 ISOCBINDING_LAST,
573 ISOCBINDING_NUMBER = ISOCBINDING_LAST
574}
575iso_c_binding_symbol;
576#undef NAMED_INTCST
577#undef NAMED_REALCST
578#undef NAMED_CMPXCST
579#undef NAMED_LOGCST
580#undef NAMED_CHARKNDCST
581#undef NAMED_CHARCST
582#undef DERIVED_TYPE
583#undef PROCEDURE
584
585typedef enum
586{
587 INTMOD_NONE = 0, INTMOD_ISO_FORTRAN_ENV, INTMOD_ISO_C_BINDING
588}
589intmod_id;
590
591typedef struct
592{
593 char name[GFC_MAX_SYMBOL_LEN + 1];
594 int value; /* Used for both integer and character values. */
595 bt f90_type;
596}
597CInteropKind_t;
598
599/* Array of structs, where the structs represent the C interop kinds.
600 The list will be implemented based on a hash of the kind name since
601 these could be accessed multiple times.
602 Declared in trans-types.c as a global, since it's in that file
603 that the list is initialized. */
604extern CInteropKind_t c_interop_kinds_table[];
605
6de9cd9a
DN
606/* Symbol attribute structure. */
607typedef struct
608{
609 /* Variable attributes. */
610 unsigned allocatable:1, dimension:1, external:1, intrinsic:1,
5349080d 611 optional:1, pointer:1, target:1, value:1, volatile_:1,
e9bd9f7d 612 dummy:1, result:1, assign:1, threadprivate:1, not_always_present:1,
1d6b7f39 613 implied_index:1, subref_array_pointer:1;
6de9cd9a 614
5349080d
TB
615 ENUM_BITFIELD (save_state) save:2;
616
6de9cd9a 617 unsigned data:1, /* Symbol is named in a DATA statement. */
ee7e677f 618 protected:1, /* Symbol has been marked as protected. */
993ef28f 619 use_assoc:1, /* Symbol has been use-associated. */
5a8af0b4
PT
620 use_only:1, /* Symbol has been use-associated, with ONLY. */
621 imported:1; /* Symbol has been associated by IMPORT. */
6de9cd9a 622
30aabb86 623 unsigned in_namelist:1, in_common:1, in_equivalence:1;
69773742
JW
624 unsigned function:1, subroutine:1, procedure:1;
625 unsigned generic:1, generic_copy:1;
d1303acd
TS
626 unsigned implicit_type:1; /* Type defined via implicit rules. */
627 unsigned untyped:1; /* No implicit type could be found. */
6de9cd9a 628
a8b3b0b6
CR
629 unsigned is_bind_c:1; /* say if is bound to C */
630
631 /* These flags are both in the typespec and attribute. The attribute
632 list is what gets read from/written to a module file. The typespec
633 is created from a decl being processed. */
634 unsigned is_c_interop:1; /* It's c interoperable. */
635 unsigned is_iso_c:1; /* Symbol is from iso_c_binding. */
636
6de9cd9a
DN
637 /* Function/subroutine attributes */
638 unsigned sequence:1, elemental:1, pure:1, recursive:1;
9e1d712c 639 unsigned unmaskable:1, masked:1, contained:1, mod_proc:1, abstract:1;
6de9cd9a 640
fe58e076
TK
641 /* This is set if the subroutine doesn't return. Currently, this
642 is only possible for intrinsic subroutines. */
643 unsigned noreturn:1;
644
3d79abbd
PB
645 /* Set if this procedure is an alternate entry point. These procedures
646 don't have any code associated, and the backend will turn them into
647 thunks to the master function. */
648 unsigned entry:1;
8b67b708 649
3d79abbd
PB
650 /* Set if this is the master function for a procedure with multiple
651 entry points. */
652 unsigned entry_master:1;
8b67b708 653
d198b59a
JJ
654 /* Set if this is the master function for a function with multiple
655 entry points where characteristics of the entry points differ. */
656 unsigned mixed_entry_master:1;
3d79abbd 657
6de9cd9a
DN
658 /* Set if a function must always be referenced by an explicit interface. */
659 unsigned always_explicit:1;
660
661 /* Set if the symbol has been referenced in an expression. No further
662 modification of type or type parameters is permitted. */
663 unsigned referenced:1;
664
993ef28f
PT
665 /* Set if the symbol has ambiguous interfaces. */
666 unsigned ambiguous_interfaces:1;
667
8b67b708
FXC
668 /* Set if the is the symbol for the main program. This is the least
669 cumbersome way to communicate this function property without
670 strcmp'ing with __MAIN everywhere. */
671 unsigned is_main_program:1;
672
6de9cd9a 673 /* Mutually exclusive multibit attributes. */
5f42ddb0
KG
674 ENUM_BITFIELD (gfc_access) access:2;
675 ENUM_BITFIELD (sym_intent) intent:2;
676 ENUM_BITFIELD (sym_flavor) flavor:4;
677 ENUM_BITFIELD (ifsrc) if_source:2;
6de9cd9a 678
5f42ddb0 679 ENUM_BITFIELD (procedure_type) proc:3;
949446f5 680
83d890b9 681 /* Special attributes for Cray pointers, pointees. */
949446f5 682 unsigned cray_pointer:1, cray_pointee:1;
6de9cd9a 683
5cca320d 684 /* The symbol is a derived type with allocatable components, pointer
9fa6b0af
FXC
685 components or private components, possibly nested. zer_comp
686 is true if the derived type has no component at all. */
687 unsigned alloc_comp:1, pointer_comp:1, private_comp:1, zero_comp:1;
77bb16aa
TB
688
689 /* The namespace where the VOLATILE attribute has been set. */
690 struct gfc_namespace *volatile_ns;
6de9cd9a
DN
691}
692symbol_attribute;
693
694
d4fa05b9 695/* The following three structures are used to identify a location in
949446f5
BF
696 the sources.
697
d4fa05b9
TS
698 gfc_file is used to maintain a tree of the source files and how
699 they include each other
6de9cd9a 700
d4fa05b9
TS
701 gfc_linebuf holds a single line of source code and information
702 which file it resides in
6de9cd9a 703
d4fa05b9 704 locus point to the sourceline and the character in the source
949446f5 705 line.
d4fa05b9 706*/
6de9cd9a 707
949446f5 708typedef struct gfc_file
6de9cd9a 709{
d4fa05b9
TS
710 struct gfc_file *included_by, *next, *up;
711 int inclusion_line, line;
712 char *filename;
713} gfc_file;
714
949446f5 715typedef struct gfc_linebuf
d4fa05b9 716{
c8cc8542
PB
717#ifdef USE_MAPPED_LOCATION
718 source_location location;
719#else
d4fa05b9 720 int linenum;
c8cc8542 721#endif
d4fa05b9
TS
722 struct gfc_file *file;
723 struct gfc_linebuf *next;
724
ba1defa5 725 int truncated;
9e8a6720 726 bool dbg_emitted;
ba1defa5 727
4cdf7223 728 char line[1];
d4fa05b9 729} gfc_linebuf;
4cdf7223
PB
730
731#define gfc_linebuf_header_size (offsetof (gfc_linebuf, line))
732
5ffeb913
TT
733#ifdef USE_MAPPED_LOCATION
734#define gfc_linebuf_linenum(LBUF) (LOCATION_LINE ((LBUF)->location))
735#else
736#define gfc_linebuf_linenum(LBUF) ((LBUF)->linenum)
737#endif
738
949446f5 739typedef struct
d4fa05b9
TS
740{
741 char *nextc;
742 gfc_linebuf *lb;
743} locus;
6de9cd9a 744
0ce0154c
KG
745/* In order for the "gfc" format checking to work correctly, you must
746 have declared a typedef locus first. */
747#if GCC_VERSION >= 4001
748#define ATTRIBUTE_GCC_GFC(m, n) __attribute__ ((__format__ (__gcc_gfc__, m, n))) ATTRIBUTE_NONNULL(m)
749#else
750#define ATTRIBUTE_GCC_GFC(m, n) ATTRIBUTE_NONNULL(m)
751#endif
752
6de9cd9a 753
6de9cd9a
DN
754extern int gfc_suppress_error;
755
756
757/* Character length structures hold the expression that gives the
758 length of a character variable. We avoid putting these into
759 gfc_typespec because doing so prevents us from doing structure
760 copies and forces us to deallocate any typespecs we create, as well
761 as structures that contain typespecs. They also can have multiple
762 character typespecs pointing to them.
763
764 These structures form a singly linked list within the current
765 namespace and are deallocated with the namespace. It is possible to
766 end up with gfc_charlen structures that have nothing pointing to them. */
767
768typedef struct gfc_charlen
769{
770 struct gfc_expr *length;
771 struct gfc_charlen *next;
772 tree backend_decl;
110eec24
TS
773
774 int resolved;
6de9cd9a
DN
775}
776gfc_charlen;
777
778#define gfc_get_charlen() gfc_getmem(sizeof(gfc_charlen))
779
780/* Type specification structure. FIXME: derived and cl could be union??? */
781typedef struct
782{
783 bt type;
784 int kind;
785 struct gfc_symbol *derived;
786 gfc_charlen *cl; /* For character types only. */
a8b3b0b6
CR
787 int is_c_interop;
788 int is_iso_c;
789 bt f90_type;
6de9cd9a
DN
790}
791gfc_typespec;
792
793/* Array specification. */
794typedef struct
795{
796 int rank; /* A rank of zero means that a variable is a scalar. */
797 array_type type;
798 struct gfc_expr *lower[GFC_MAX_DIMENSIONS], *upper[GFC_MAX_DIMENSIONS];
83d890b9
AL
799
800 /* These two fields are used with the Cray Pointer extension. */
801 bool cray_pointee; /* True iff this spec belongs to a cray pointee. */
802 bool cp_was_assumed; /* AS_ASSUMED_SIZE cp arrays are converted to
803 AS_EXPLICIT, but we want to remember that we
804 did this. */
805
6de9cd9a
DN
806}
807gfc_array_spec;
808
809#define gfc_get_array_spec() gfc_getmem(sizeof(gfc_array_spec))
810
811
812/* Components of derived types. */
813typedef struct gfc_component
814{
cb9e4f55 815 const char *name;
6de9cd9a
DN
816 gfc_typespec ts;
817
5046aff5 818 int pointer, allocatable, dimension;
2eae3dc7 819 gfc_access access;
6de9cd9a
DN
820 gfc_array_spec *as;
821
822 tree backend_decl;
823 locus loc;
824 struct gfc_expr *initializer;
825 struct gfc_component *next;
826}
827gfc_component;
828
829#define gfc_get_component() gfc_getmem(sizeof(gfc_component))
830
831/* Formal argument lists are lists of symbols. */
832typedef struct gfc_formal_arglist
833{
4f613946 834 /* Symbol representing the argument at this position in the arglist. */
6de9cd9a 835 struct gfc_symbol *sym;
4f613946 836 /* Points to the next formal argument. */
6de9cd9a
DN
837 struct gfc_formal_arglist *next;
838}
839gfc_formal_arglist;
840
841#define gfc_get_formal_arglist() gfc_getmem(sizeof(gfc_formal_arglist))
842
843
844/* The gfc_actual_arglist structure is for actual arguments. */
845typedef struct gfc_actual_arglist
846{
cb9e4f55 847 const char *name;
6de9cd9a
DN
848 /* Alternate return label when the expr member is null. */
849 struct gfc_st_label *label;
850
1600fe22
TS
851 /* This is set to the type of an eventual omitted optional
852 argument. This is used to determine if a hidden string length
853 argument has to be added to a function call. */
854 bt missing_arg_type;
855
6de9cd9a
DN
856 struct gfc_expr *expr;
857 struct gfc_actual_arglist *next;
858}
859gfc_actual_arglist;
860
861#define gfc_get_actual_arglist() gfc_getmem(sizeof(gfc_actual_arglist))
862
863
864/* Because a symbol can belong to multiple namelists, they must be
865 linked externally to the symbol itself. */
866typedef struct gfc_namelist
867{
868 struct gfc_symbol *sym;
869 struct gfc_namelist *next;
870}
871gfc_namelist;
872
873#define gfc_get_namelist() gfc_getmem(sizeof(gfc_namelist))
874
6c7a4dfd
JJ
875enum
876{
877 OMP_LIST_PRIVATE,
878 OMP_LIST_FIRSTPRIVATE,
879 OMP_LIST_LASTPRIVATE,
880 OMP_LIST_COPYPRIVATE,
881 OMP_LIST_SHARED,
882 OMP_LIST_COPYIN,
883 OMP_LIST_PLUS,
884 OMP_LIST_REDUCTION_FIRST = OMP_LIST_PLUS,
885 OMP_LIST_MULT,
886 OMP_LIST_SUB,
887 OMP_LIST_AND,
888 OMP_LIST_OR,
889 OMP_LIST_EQV,
890 OMP_LIST_NEQV,
891 OMP_LIST_MAX,
892 OMP_LIST_MIN,
893 OMP_LIST_IAND,
894 OMP_LIST_IOR,
895 OMP_LIST_IEOR,
896 OMP_LIST_REDUCTION_LAST = OMP_LIST_IEOR,
897 OMP_LIST_NUM
898};
899
900/* Because a symbol can belong to multiple namelists, they must be
901 linked externally to the symbol itself. */
902typedef struct gfc_omp_clauses
903{
904 struct gfc_expr *if_expr;
905 struct gfc_expr *num_threads;
906 gfc_namelist *lists[OMP_LIST_NUM];
907 enum
908 {
909 OMP_SCHED_NONE,
910 OMP_SCHED_STATIC,
911 OMP_SCHED_DYNAMIC,
912 OMP_SCHED_GUIDED,
913 OMP_SCHED_RUNTIME
914 } sched_kind;
915 struct gfc_expr *chunk_size;
916 enum
917 {
918 OMP_DEFAULT_UNKNOWN,
919 OMP_DEFAULT_NONE,
920 OMP_DEFAULT_PRIVATE,
921 OMP_DEFAULT_SHARED
922 } default_sharing;
923 bool nowait, ordered;
924}
925gfc_omp_clauses;
926
927#define gfc_get_omp_clauses() gfc_getmem(sizeof(gfc_omp_clauses))
928
6de9cd9a
DN
929
930/* The gfc_st_label structure is a doubly linked list attached to a
931 namespace that records the usage of statement labels within that
932 space. */
933/* TODO: Make format/statement specifics a union. */
934typedef struct gfc_st_label
935{
5cf54585
TS
936 BBT_HEADER(gfc_st_label);
937
6de9cd9a
DN
938 int value;
939
940 gfc_sl_type defined, referenced;
941
942 struct gfc_expr *format;
943
944 tree backend_decl;
945
946 locus where;
6de9cd9a
DN
947}
948gfc_st_label;
949
950
951/* gfc_interface()-- Interfaces are lists of symbols strung together. */
952typedef struct gfc_interface
953{
954 struct gfc_symbol *sym;
955 locus where;
956 struct gfc_interface *next;
957}
958gfc_interface;
959
960#define gfc_get_interface() gfc_getmem(sizeof(gfc_interface))
961
962
963/* User operator nodes. These are like stripped down symbols. */
964typedef struct
965{
cb9e4f55 966 const char *name;
6de9cd9a
DN
967
968 gfc_interface *operator;
969 struct gfc_namespace *ns;
970 gfc_access access;
971}
972gfc_user_op;
973
974/* Symbol nodes. These are important things. They are what the
975 standard refers to as "entities". The possibly multiple names that
976 refer to the same entity are accomplished by a binary tree of
977 symtree structures that is balanced by the red-black method-- more
978 than one symtree node can point to any given symbol. */
979
980typedef struct gfc_symbol
981{
cb9e4f55
TS
982 const char *name; /* Primary name, before renaming */
983 const char *module; /* Module this symbol came from */
6de9cd9a
DN
984 locus declared_at;
985
986 gfc_typespec ts;
987 symbol_attribute attr;
988
989 /* The interface member points to the formal argument list if the
990 symbol is a function or subroutine name. If the symbol is a
991 generic name, the generic member points to the list of
992 interfaces. */
993
994 gfc_interface *generic;
995 gfc_access component_access;
996
997 gfc_formal_arglist *formal;
998 struct gfc_namespace *formal_ns;
999
1000 struct gfc_expr *value; /* Parameter/Initializer value */
1001 gfc_array_spec *as;
1002 struct gfc_symbol *result; /* function result symbol */
1003 gfc_component *components; /* Derived type components */
1004
69773742
JW
1005 struct gfc_symbol *interface; /* For PROCEDURE declarations. */
1006
83d890b9
AL
1007 /* Defined only for Cray pointees; points to their pointer. */
1008 struct gfc_symbol *cp_pointer;
1009
9056bd70 1010 struct gfc_symbol *common_next; /* Links for COMMON syms */
30aabb86
PT
1011
1012 /* This is in fact a gfc_common_head but it is only used for pointer
1013 comparisons to check if symbols are in the same common block. */
1014 struct gfc_common_head* common_head;
1015
6de9cd9a
DN
1016 /* Make sure setup code for dummy arguments is generated in the correct
1017 order. */
1018 int dummy_order;
1019
0e9a445b
PT
1020 int entry_id;
1021
6de9cd9a
DN
1022 gfc_namelist *namelist, *namelist_tail;
1023
1024 /* Change management fields. Symbols that might be modified by the
1025 current statement have the mark member nonzero and are kept in a
1026 singly linked list through the tlink field. Of these symbols,
1027 symbols with old_symbol equal to NULL are symbols created within
1028 the current statement. Otherwise, old_symbol points to a copy of
1029 the old symbol. */
1030
1031 struct gfc_symbol *old_symbol, *tlink;
1032 unsigned mark:1, new:1;
5291e69a
PB
1033 /* Nonzero if all equivalences associated with this symbol have been
1034 processed. */
1035 unsigned equiv_built:1;
31708dc6
RS
1036 /* Set if this variable is used as an index name in a FORALL. */
1037 unsigned forall_index:1;
6de9cd9a
DN
1038 int refs;
1039 struct gfc_namespace *ns; /* namespace containing this symbol */
1040
1041 tree backend_decl;
a8b3b0b6
CR
1042
1043 /* Identity of the intrinsic module the symbol comes from, or
1044 INTMOD_NONE if it's not imported from a intrinsic module. */
1045 intmod_id from_intmod;
1046 /* Identity of the symbol from intrinsic modules, from enums maintained
1047 separately by each intrinsic module. Used together with from_intmod,
1048 it uniquely identifies a symbol from an intrinsic module. */
1049 int intmod_sym_id;
1050
1051 /* This may be repetitive, since the typespec now has a binding
1052 label field. */
1053 char binding_label[GFC_MAX_BINDING_LABEL_LEN + 1];
1054 /* Store a reference to the common_block, if this symbol is in one. */
1055 struct gfc_common_head *common_block;
6de9cd9a
DN
1056}
1057gfc_symbol;
1058
1059
9056bd70 1060/* This structure is used to keep track of symbols in common blocks. */
30aabb86 1061typedef struct gfc_common_head
9056bd70
TS
1062{
1063 locus where;
6c7a4dfd 1064 char use_assoc, saved, threadprivate;
53814b8f 1065 char name[GFC_MAX_SYMBOL_LEN + 1];
30aabb86 1066 struct gfc_symbol *head;
a8b3b0b6
CR
1067 char binding_label[GFC_MAX_BINDING_LABEL_LEN + 1];
1068 int is_bind_c;
949446f5 1069}
9056bd70
TS
1070gfc_common_head;
1071
1072#define gfc_get_common_head() gfc_getmem(sizeof(gfc_common_head))
1073
1074
3d79abbd
PB
1075/* A list of all the alternate entry points for a procedure. */
1076
1077typedef struct gfc_entry_list
1078{
1079 /* The symbol for this entry point. */
1080 gfc_symbol *sym;
1081 /* The zero-based id of this entry point. */
1082 int id;
1083 /* The LABEL_EXPR marking this entry point. */
1084 tree label;
1085 /* The nest item in the list. */
1086 struct gfc_entry_list *next;
1087}
1088gfc_entry_list;
1089
1090#define gfc_get_entry_list() \
1091 (gfc_entry_list *) gfc_getmem(sizeof(gfc_entry_list))
9056bd70 1092
6de9cd9a
DN
1093/* Within a namespace, symbols are pointed to by symtree nodes that
1094 are linked together in a balanced binary tree. There can be
1095 several symtrees pointing to the same symbol node via USE
1096 statements. */
1097
6de9cd9a
DN
1098typedef struct gfc_symtree
1099{
1100 BBT_HEADER (gfc_symtree);
cb9e4f55 1101 const char *name;
6de9cd9a
DN
1102 int ambiguous;
1103 union
1104 {
1105 gfc_symbol *sym; /* Symbol associated with this node */
1106 gfc_user_op *uop;
9056bd70 1107 gfc_common_head *common;
6de9cd9a
DN
1108 }
1109 n;
1110
1111}
1112gfc_symtree;
1113
6b887797
PT
1114/* A linked list of derived types in the namespace. */
1115typedef struct gfc_dt_list
1116{
1117 struct gfc_symbol *derived;
1118 struct gfc_dt_list *next;
1119}
1120gfc_dt_list;
1121
1122#define gfc_get_dt_list() gfc_getmem(sizeof(gfc_dt_list))
1123
7453378e
PT
1124 /* A list of all derived types. */
1125 extern gfc_dt_list *gfc_derived_types;
6b887797 1126
3d79abbd
PB
1127/* A namespace describes the contents of procedure, module or
1128 interface block. */
1129/* ??? Anything else use these? */
1130
6de9cd9a
DN
1131typedef struct gfc_namespace
1132{
4f613946
TS
1133 /* Tree containing all the symbols in this namespace. */
1134 gfc_symtree *sym_root;
1135 /* Tree containing all the user-defined operators in the namespace. */
1136 gfc_symtree *uop_root;
1137 /* Tree containing all the common blocks. */
949446f5 1138 gfc_symtree *common_root;
6de9cd9a 1139
4f613946 1140 /* If set_flag[letter] is set, an implicit type has been set for letter. */
6de9cd9a 1141 int set_flag[GFC_LETTERS];
4f613946
TS
1142 /* Keeps track of the implicit types associated with the letters. */
1143 gfc_typespec default_type[GFC_LETTERS];
6de9cd9a 1144
4f613946 1145 /* If this is a namespace of a procedure, this points to the procedure. */
6de9cd9a 1146 struct gfc_symbol *proc_name;
4f613946
TS
1147 /* If this is the namespace of a unit which contains executable
1148 code, this points to it. */
6de9cd9a 1149 struct gfc_code *code;
4f613946
TS
1150
1151 /* Points to the equivalences set up in this namespace. */
6de9cd9a 1152 struct gfc_equiv *equiv;
61321991
PT
1153
1154 /* Points to the equivalence groups produced by trans_common. */
1155 struct gfc_equiv_list *equiv_lists;
1156
4f613946
TS
1157 gfc_interface *operator[GFC_INTRINSIC_OPS];
1158
1159 /* Points to the parent namespace, i.e. the namespace of a module or
1160 procedure in which the procedure belonging to this namespace is
1161 contained. The parent namespace points to this namespace either
1162 directly via CONTAINED, or indirectly via the chain built by
1163 SIBLING. */
1164 struct gfc_namespace *parent;
1165 /* CONTAINED points to the first contained namespace. Sibling
1166 namespaces are chained via SIBLING. */
1167 struct gfc_namespace *contained, *sibling;
1168
1169 gfc_common_head blank_common;
6de9cd9a
DN
1170 gfc_access default_access, operator_access[GFC_INTRINSIC_OPS];
1171
1172 gfc_st_label *st_labels;
294fbfc8
TS
1173 /* This list holds information about all the data initializers in
1174 this namespace. */
6de9cd9a
DN
1175 struct gfc_data *data;
1176
1177 gfc_charlen *cl_list;
1178
4c1f4f52 1179 int save_all, seen_save, seen_implicit_none;
3d79abbd
PB
1180
1181 /* Normally we don't need to refcount namespaces. However when we read
1182 a module containing a function with multiple entry points, this
1183 will appear as several functions with the same formal namespace. */
1184 int refs;
1185
1186 /* A list of all alternate entry points to this procedure (or NULL). */
1187 gfc_entry_list *entries;
0de4325e
TS
1188
1189 /* Set to 1 if namespace is a BLOCK DATA program unit. */
1190 int is_block_data;
8998be20
TB
1191
1192 /* Set to 1 if namespace is an interface body with "IMPORT" used. */
1193 int has_import_set;
6de9cd9a
DN
1194}
1195gfc_namespace;
1196
1197extern gfc_namespace *gfc_current_ns;
1198
c9543002
TS
1199/* Global symbols are symbols of global scope. Currently we only use
1200 this to detect collisions already when parsing.
1201 TODO: Extend to verify procedure calls. */
1202
1203typedef struct gfc_gsymbol
1204{
1205 BBT_HEADER(gfc_gsymbol);
1206
973a384d 1207 const char *name;
a8b3b0b6
CR
1208 const char *sym_name;
1209 const char *mod_name;
1210 const char *binding_label;
c9543002
TS
1211 enum { GSYM_UNKNOWN=1, GSYM_PROGRAM, GSYM_FUNCTION, GSYM_SUBROUTINE,
1212 GSYM_MODULE, GSYM_COMMON, GSYM_BLOCK_DATA } type;
1213
1214 int defined, used;
1215 locus where;
1216}
1217gfc_gsymbol;
1218
1219extern gfc_gsymbol *gfc_gsym_root;
6de9cd9a
DN
1220
1221/* Information on interfaces being built. */
1222typedef struct
1223{
1224 interface_type type;
1225 gfc_symbol *sym;
1226 gfc_namespace *ns;
1227 gfc_user_op *uop;
1228 gfc_intrinsic_op op;
1229}
1230gfc_interface_info;
1231
1232extern gfc_interface_info current_interface;
1233
1234
1235/* Array reference. */
1236typedef struct gfc_array_ref
1237{
1238 ar_type type;
1239 int dimen; /* # of components in the reference */
1240 locus where;
1241 gfc_array_spec *as;
1242
1243 locus c_where[GFC_MAX_DIMENSIONS]; /* All expressions can be NULL */
1244 struct gfc_expr *start[GFC_MAX_DIMENSIONS], *end[GFC_MAX_DIMENSIONS],
1245 *stride[GFC_MAX_DIMENSIONS];
1246
1247 enum
1248 { DIMEN_ELEMENT = 1, DIMEN_RANGE, DIMEN_VECTOR, DIMEN_UNKNOWN }
1249 dimen_type[GFC_MAX_DIMENSIONS];
1250
1251 struct gfc_expr *offset;
1252}
1253gfc_array_ref;
1254
1255#define gfc_get_array_ref() gfc_getmem(sizeof(gfc_array_ref))
1256
1257
1258/* Component reference nodes. A variable is stored as an expression
1259 node that points to the base symbol. After that, a singly linked
1260 list of component reference nodes gives the variable's complete
1261 resolution. The array_ref component may be present and comes
1262 before the component component. */
1263
1264typedef enum
1265 { REF_ARRAY, REF_COMPONENT, REF_SUBSTRING }
1266ref_type;
1267
1268typedef struct gfc_ref
1269{
1270 ref_type type;
1271
1272 union
1273 {
1274 struct gfc_array_ref ar;
1275
1276 struct
1277 {
1278 gfc_component *component;
1279 gfc_symbol *sym;
1280 }
1281 c;
1282
1283 struct
1284 {
1285 struct gfc_expr *start, *end; /* Substring */
1286 gfc_charlen *length;
1287 }
1288 ss;
1289
1290 }
1291 u;
1292
1293 struct gfc_ref *next;
1294}
1295gfc_ref;
1296
1297#define gfc_get_ref() gfc_getmem(sizeof(gfc_ref))
1298
1299
1300/* Structures representing intrinsic symbols and their arguments lists. */
1301typedef struct gfc_intrinsic_arg
1302{
1303 char name[GFC_MAX_SYMBOL_LEN + 1];
1304
1305 gfc_typespec ts;
1306 int optional;
1307 gfc_actual_arglist *actual;
1308
1309 struct gfc_intrinsic_arg *next;
1310
1311}
1312gfc_intrinsic_arg;
1313
1314
4f613946
TS
1315/* Specifies the various kinds of check functions used to verify the
1316 argument lists of intrinsic functions. fX with X an integer refer
1317 to check functions of intrinsics with X arguments. f1m is used for
1318 the MAX and MIN intrinsics which can have an arbitrary number of
1319 arguments, f3ml is used for the MINLOC and MAXLOC intrinsics as
1320 these have special semantics. */
1321
6de9cd9a
DN
1322typedef union
1323{
4c0c6b9f 1324 try (*f0)(void);
6de9cd9a
DN
1325 try (*f1)(struct gfc_expr *);
1326 try (*f1m)(gfc_actual_arglist *);
1327 try (*f2)(struct gfc_expr *, struct gfc_expr *);
1328 try (*f3)(struct gfc_expr *, struct gfc_expr *, struct gfc_expr *);
f3207b37 1329 try (*f3ml)(gfc_actual_arglist *);
7551270e 1330 try (*f3red)(gfc_actual_arglist *);
6de9cd9a
DN
1331 try (*f4)(struct gfc_expr *, struct gfc_expr *, struct gfc_expr *,
1332 struct gfc_expr *);
1333 try (*f5)(struct gfc_expr *, struct gfc_expr *, struct gfc_expr *,
1334 struct gfc_expr *, struct gfc_expr *);
1335}
1336gfc_check_f;
1337
4f613946
TS
1338/* Like gfc_check_f, these specify the type of the simplification
1339 function associated with an intrinsic. The fX are just like in
1340 gfc_check_f. cc is used for type conversion functions. */
6de9cd9a
DN
1341
1342typedef union
1343{
4c0c6b9f 1344 struct gfc_expr *(*f0)(void);
6de9cd9a
DN
1345 struct gfc_expr *(*f1)(struct gfc_expr *);
1346 struct gfc_expr *(*f2)(struct gfc_expr *, struct gfc_expr *);
1347 struct gfc_expr *(*f3)(struct gfc_expr *, struct gfc_expr *,
1348 struct gfc_expr *);
1349 struct gfc_expr *(*f4)(struct gfc_expr *, struct gfc_expr *,
1350 struct gfc_expr *, struct gfc_expr *);
1351 struct gfc_expr *(*f5)(struct gfc_expr *, struct gfc_expr *,
1352 struct gfc_expr *, struct gfc_expr *,
1353 struct gfc_expr *);
1354 struct gfc_expr *(*cc)(struct gfc_expr *, bt, int);
1355}
1356gfc_simplify_f;
1357
4f613946 1358/* Again like gfc_check_f, these specify the type of the resolution
13795658 1359 function associated with an intrinsic. The fX are just like in
66e4ab31 1360 gfc_check_f. f1m is used for MIN and MAX, s1 is used for abort(). */
6de9cd9a
DN
1361
1362typedef union
1363{
1364 void (*f0)(struct gfc_expr *);
1365 void (*f1)(struct gfc_expr *, struct gfc_expr *);
1366 void (*f1m)(struct gfc_expr *, struct gfc_actual_arglist *);
1367 void (*f2)(struct gfc_expr *, struct gfc_expr *, struct gfc_expr *);
1368 void (*f3)(struct gfc_expr *, struct gfc_expr *, struct gfc_expr *,
1369 struct gfc_expr *);
1370 void (*f4)(struct gfc_expr *, struct gfc_expr *, struct gfc_expr *,
1371 struct gfc_expr *, struct gfc_expr *);
1372 void (*f5)(struct gfc_expr *, struct gfc_expr *, struct gfc_expr *,
1373 struct gfc_expr *, struct gfc_expr *, struct gfc_expr *);
1374 void (*s1)(struct gfc_code *);
1375}
1376gfc_resolve_f;
1377
1378
1379typedef struct gfc_intrinsic_sym
1380{
cb9e4f55 1381 const char *name, *lib_name;
6de9cd9a
DN
1382 gfc_intrinsic_arg *formal;
1383 gfc_typespec ts;
e1633d82
DF
1384 unsigned elemental:1, inquiry:1, transformational:1, pure:1,
1385 generic:1, specific:1, actual_ok:1, noreturn:1, conversion:1;
1386
1387 int standard;
6de9cd9a
DN
1388
1389 gfc_simplify_f simplify;
1390 gfc_check_f check;
1391 gfc_resolve_f resolve;
1392 struct gfc_intrinsic_sym *specific_head, *next;
cd5ecab6 1393 gfc_isym_id id;
6de9cd9a
DN
1394
1395}
1396gfc_intrinsic_sym;
1397
1398
1399/* Expression nodes. The expression node types deserve explanations,
1400 since the last couple can be easily misconstrued:
1401
1402 EXPR_OP Operator node pointing to one or two other nodes
1403 EXPR_FUNCTION Function call, symbol points to function's name
1404 EXPR_CONSTANT A scalar constant: Logical, String, Real, Int or Complex
1405 EXPR_VARIABLE An Lvalue with a root symbol and possible reference list
1406 which expresses structure, array and substring refs.
1407 EXPR_NULL The NULL pointer value (which also has a basic type).
1408 EXPR_SUBSTRING A substring of a constant string
1409 EXPR_STRUCTURE A structure constructor
1410 EXPR_ARRAY An array constructor. */
1411
1412#include <gmp.h>
f8e566e5
SK
1413#include <mpfr.h>
1414#define GFC_RND_MODE GMP_RNDN
6de9cd9a
DN
1415
1416typedef struct gfc_expr
1417{
1418 expr_t expr_type;
1419
1420 gfc_typespec ts; /* These two refer to the overall expression */
1421
1422 int rank;
1423 mpz_t *shape; /* Can be NULL if shape is unknown at compile time */
1424
6de9cd9a
DN
1425 /* Nonnull for functions and structure constructors */
1426 gfc_symtree *symtree;
1427
6de9cd9a
DN
1428 gfc_ref *ref;
1429
6de9cd9a
DN
1430 locus where;
1431
1524f80b
RS
1432 /* True if the expression is a call to a function that returns an array,
1433 and if we have decided not to allocate temporary data for that array. */
1434 unsigned int inline_noncopying_intrinsic : 1;
20585ad6
BM
1435
1436 /* Used to quickly find a given constructor by its offset. */
5868cbf9 1437 splay_tree con_by_offset;
d3642f89 1438
20585ad6
BM
1439 /* If an expression comes from a Hollerith constant or compile-time
1440 evaluation of a transfer statement, it may have a prescribed target-
1441 memory representation, and these cannot always be backformed from
1442 the value. */
1443 struct
1444 {
1445 int length;
1446 char *string;
1447 }
1448 representation;
1449
6de9cd9a
DN
1450 union
1451 {
6de9cd9a 1452 int logical;
20585ad6 1453
f8e566e5
SK
1454 mpz_t integer;
1455
1456 mpfr_t real;
6de9cd9a
DN
1457
1458 struct
1459 {
f8e566e5 1460 mpfr_t r, i;
6de9cd9a
DN
1461 }
1462 complex;
1463
58b03ab2
TS
1464 struct
1465 {
1466 gfc_intrinsic_op operator;
1467 gfc_user_op *uop;
1468 struct gfc_expr *op1, *op2;
1469 }
1470 op;
1471
6de9cd9a
DN
1472 struct
1473 {
1474 gfc_actual_arglist *actual;
6b25a558 1475 const char *name; /* Points to the ultimate name of the function */
6de9cd9a
DN
1476 gfc_intrinsic_sym *isym;
1477 gfc_symbol *esym;
1478 }
1479 function;
1480
1481 struct
1482 {
1483 int length;
1484 char *string;
1485 }
1486 character;
1487
1488 struct gfc_constructor *constructor;
1489 }
1490 value;
1491
1492}
1493gfc_expr;
1494
1495
94538bd1 1496#define gfc_get_shape(rank) ((mpz_t *) gfc_getmem((rank)*sizeof(mpz_t)))
6de9cd9a
DN
1497
1498/* Structures for information associated with different kinds of
1499 numbers. The first set of integer parameters define all there is
1500 to know about a particular kind. The rest of the elements are
1501 computed from the first elements. */
1502
1503typedef struct
1504{
e2cad04b 1505 /* Values really representable by the target. */
7bee49dc 1506 mpz_t huge, pedantic_min_int, min_int;
e2cad04b
RH
1507
1508 int kind, radix, digits, bit_size, range;
1509
1510 /* True if the C type of the given name maps to this precision.
1511 Note that more than one bit can be set. */
1512 unsigned int c_char : 1;
1513 unsigned int c_short : 1;
1514 unsigned int c_int : 1;
1515 unsigned int c_long : 1;
1516 unsigned int c_long_long : 1;
6de9cd9a
DN
1517}
1518gfc_integer_info;
1519
1520extern gfc_integer_info gfc_integer_kinds[];
1521
1522
1523typedef struct
1524{
1525 int kind, bit_size;
1526
e2cad04b
RH
1527 /* True if the C++ type bool, C99 type _Bool, maps to this precision. */
1528 unsigned int c_bool : 1;
6de9cd9a
DN
1529}
1530gfc_logical_info;
1531
1532extern gfc_logical_info gfc_logical_kinds[];
1533
1534
1535typedef struct
1536{
2d0aa65f 1537 mpfr_t epsilon, huge, tiny, subnormal;
6de9cd9a 1538 int kind, radix, digits, min_exponent, max_exponent;
6de9cd9a 1539 int range, precision;
e2cad04b
RH
1540
1541 /* The precision of the type as reported by GET_MODE_PRECISION. */
1542 int mode_precision;
1543
1544 /* True if the C type of the given name maps to this precision.
1545 Note that more than one bit can be set. */
1546 unsigned int c_float : 1;
1547 unsigned int c_double : 1;
1548 unsigned int c_long_double : 1;
6de9cd9a
DN
1549}
1550gfc_real_info;
1551
1552extern gfc_real_info gfc_real_kinds[];
1553
1554
1555/* Equivalence structures. Equivalent lvalues are linked along the
1556 *eq pointer, equivalence sets are strung along the *next node. */
1557typedef struct gfc_equiv
1558{
1559 struct gfc_equiv *next, *eq;
1560 gfc_expr *expr;
30aabb86 1561 const char *module;
6de9cd9a
DN
1562 int used;
1563}
1564gfc_equiv;
1565
1566#define gfc_get_equiv() gfc_getmem(sizeof(gfc_equiv))
1567
61321991
PT
1568/* Holds a single equivalence member after processing. */
1569typedef struct gfc_equiv_info
1570{
1571 gfc_symbol *sym;
1572 HOST_WIDE_INT offset;
37311e71 1573 HOST_WIDE_INT length;
61321991
PT
1574 struct gfc_equiv_info *next;
1575} gfc_equiv_info;
1576
1577/* Holds equivalence groups, after they have been processed. */
1578typedef struct gfc_equiv_list
1579{
1580 gfc_equiv_info *equiv;
1581 struct gfc_equiv_list *next;
1582} gfc_equiv_list;
6de9cd9a
DN
1583
1584/* gfc_case stores the selector list of a case statement. The *low
1585 and *high pointers can point to the same expression in the case of
1586 a single value. If *high is NULL, the selection is from *low
1587 upwards, if *low is NULL the selection is *high downwards.
1588
410d1a45
SK
1589 This structure has separate fields to allow single and double linked
1590 lists of CASEs at the same time. The singe linked list along the NEXT
6de9cd9a
DN
1591 field is a list of cases for a single CASE label. The double linked
1592 list along the LEFT/RIGHT fields is used to detect overlap and to
1593 build a table of the cases for SELECT constructs with a CHARACTER
1594 case expression. */
1595
1596typedef struct gfc_case
1597{
1598 /* Where we saw this case. */
1599 locus where;
1600 int n;
1601
1602 /* Case range values. If (low == high), it's a single value. If one of
1603 the labels is NULL, it's an unbounded case. If both are NULL, this
1604 represents the default case. */
1605 gfc_expr *low, *high;
1606
1607 /* Next case label in the list of cases for a single CASE label. */
1608 struct gfc_case *next;
1609
1610 /* Used for detecting overlap, and for code generation. */
1611 struct gfc_case *left, *right;
1612
1613 /* True if this case label can never be matched. */
1614 int unreachable;
1615}
1616gfc_case;
1617
1618#define gfc_get_case() gfc_getmem(sizeof(gfc_case))
1619
1620
1621typedef struct
1622{
1623 gfc_expr *var, *start, *end, *step;
1624}
1625gfc_iterator;
1626
1627#define gfc_get_iterator() gfc_getmem(sizeof(gfc_iterator))
1628
1629
f7b529fa 1630/* Allocation structure for ALLOCATE, DEALLOCATE and NULLIFY statements. */
6de9cd9a
DN
1631
1632typedef struct gfc_alloc
1633{
1634 gfc_expr *expr;
1635 struct gfc_alloc *next;
1636}
1637gfc_alloc;
1638
1639#define gfc_get_alloc() gfc_getmem(sizeof(gfc_alloc))
1640
1641
1642typedef struct
1643{
1644 gfc_expr *unit, *file, *status, *access, *form, *recl,
181c9f4a 1645 *blank, *position, *action, *delim, *pad, *iostat, *iomsg, *convert;
6de9cd9a
DN
1646 gfc_st_label *err;
1647}
1648gfc_open;
1649
1650
1651typedef struct
1652{
7aba8abe 1653 gfc_expr *unit, *status, *iostat, *iomsg;
6de9cd9a
DN
1654 gfc_st_label *err;
1655}
1656gfc_close;
1657
1658
1659typedef struct
1660{
7aba8abe 1661 gfc_expr *unit, *iostat, *iomsg;
6de9cd9a
DN
1662 gfc_st_label *err;
1663}
1664gfc_filepos;
1665
1666
1667typedef struct
1668{
1669 gfc_expr *unit, *file, *iostat, *exist, *opened, *number, *named,
1670 *name, *access, *sequential, *direct, *form, *formatted,
1671 *unformatted, *recl, *nextrec, *blank, *position, *action, *read,
014ec6ee 1672 *write, *readwrite, *delim, *pad, *iolength, *iomsg, *convert, *strm_pos;
6de9cd9a
DN
1673
1674 gfc_st_label *err;
1675
1676}
1677gfc_inquire;
1678
1679
1680typedef struct
1681{
7aba8abe 1682 gfc_expr *io_unit, *format_expr, *rec, *advance, *iostat, *size, *iomsg;
6de9cd9a
DN
1683
1684 gfc_symbol *namelist;
1685 /* A format_label of `format_asterisk' indicates the "*" format */
1686 gfc_st_label *format_label;
1687 gfc_st_label *err, *end, *eor;
1688
e0e85e06 1689 locus eor_where, end_where, err_where;
6de9cd9a
DN
1690}
1691gfc_dt;
1692
1693
1694typedef struct gfc_forall_iterator
1695{
1696 gfc_expr *var, *start, *end, *stride;
1697 struct gfc_forall_iterator *next;
1698}
1699gfc_forall_iterator;
1700
1701
1702/* Executable statements that fill gfc_code structures. */
1703typedef enum
1704{
1705 EXEC_NOP = 1, EXEC_ASSIGN, EXEC_LABEL_ASSIGN, EXEC_POINTER_ASSIGN,
476220e7 1706 EXEC_GOTO, EXEC_CALL, EXEC_ASSIGN_CALL, EXEC_RETURN, EXEC_ENTRY,
6b591ec0 1707 EXEC_PAUSE, EXEC_STOP, EXEC_CONTINUE, EXEC_INIT_ASSIGN,
6de9cd9a
DN
1708 EXEC_IF, EXEC_ARITHMETIC_IF, EXEC_DO, EXEC_DO_WHILE, EXEC_SELECT,
1709 EXEC_FORALL, EXEC_WHERE, EXEC_CYCLE, EXEC_EXIT,
1710 EXEC_ALLOCATE, EXEC_DEALLOCATE,
1711 EXEC_OPEN, EXEC_CLOSE,
1712 EXEC_READ, EXEC_WRITE, EXEC_IOLENGTH, EXEC_TRANSFER, EXEC_DT_END,
6c7a4dfd
JJ
1713 EXEC_BACKSPACE, EXEC_ENDFILE, EXEC_INQUIRE, EXEC_REWIND, EXEC_FLUSH,
1714 EXEC_OMP_CRITICAL, EXEC_OMP_DO, EXEC_OMP_FLUSH, EXEC_OMP_MASTER,
1715 EXEC_OMP_ORDERED, EXEC_OMP_PARALLEL, EXEC_OMP_PARALLEL_DO,
1716 EXEC_OMP_PARALLEL_SECTIONS, EXEC_OMP_PARALLEL_WORKSHARE,
1717 EXEC_OMP_SECTIONS, EXEC_OMP_SINGLE, EXEC_OMP_WORKSHARE,
1718 EXEC_OMP_ATOMIC, EXEC_OMP_BARRIER, EXEC_OMP_END_NOWAIT,
1719 EXEC_OMP_END_SINGLE
6de9cd9a
DN
1720}
1721gfc_exec_op;
1722
1723typedef struct gfc_code
1724{
1725 gfc_exec_op op;
1726
1727 struct gfc_code *block, *next;
1728 locus loc;
1729
1730 gfc_st_label *here, *label, *label2, *label3;
1731 gfc_symtree *symtree;
1732 gfc_expr *expr, *expr2;
1733 /* A name isn't sufficient to identify a subroutine, we need the actual
1734 symbol for the interface definition.
1735 const char *sub_name; */
1736 gfc_symbol *resolved_sym;
1737
1738 union
1739 {
1740 gfc_actual_arglist *actual;
1741 gfc_case *case_list;
1742 gfc_iterator *iterator;
1743 gfc_alloc *alloc_list;
1744 gfc_open *open;
1745 gfc_close *close;
1746 gfc_filepos *filepos;
1747 gfc_inquire *inquire;
1748 gfc_dt *dt;
1749 gfc_forall_iterator *forall_iterator;
1750 struct gfc_code *whichloop;
1751 int stop_code;
3d79abbd 1752 gfc_entry_list *entry;
6c7a4dfd
JJ
1753 gfc_omp_clauses *omp_clauses;
1754 const char *omp_name;
1755 gfc_namelist *omp_namelist;
1756 bool omp_bool;
6de9cd9a
DN
1757 }
1758 ext; /* Points to additional structures required by statement */
1759
1760 /* Backend_decl is used for cycle and break labels in do loops, and
949446f5 1761 probably for other constructs as well, once we translate them. */
6de9cd9a
DN
1762 tree backend_decl;
1763}
1764gfc_code;
1765
1766
1767/* Storage for DATA statements. */
1768typedef struct gfc_data_variable
1769{
1770 gfc_expr *expr;
1771 gfc_iterator iter;
1772 struct gfc_data_variable *list, *next;
1773}
1774gfc_data_variable;
1775
1776
1777typedef struct gfc_data_value
1778{
b8502435 1779 unsigned int repeat;
6de9cd9a 1780 gfc_expr *expr;
6de9cd9a
DN
1781 struct gfc_data_value *next;
1782}
1783gfc_data_value;
1784
1785
1786typedef struct gfc_data
1787{
1788 gfc_data_variable *var;
1789 gfc_data_value *value;
1790 locus where;
1791
1792 struct gfc_data *next;
1793}
1794gfc_data;
1795
1796#define gfc_get_data_variable() gfc_getmem(sizeof(gfc_data_variable))
1797#define gfc_get_data_value() gfc_getmem(sizeof(gfc_data_value))
1798#define gfc_get_data() gfc_getmem(sizeof(gfc_data))
1799
1800
1801/* Structure for holding compile options */
1802typedef struct
1803{
6de9cd9a
DN
1804 char *module_dir;
1805 gfc_source_form source_form;
1dde8683
BM
1806 /* Maximum line lengths in fixed- and free-form source, respectively.
1807 When fixed_line_length or free_line_length are 0, the whole line is used,
1808 regardless of length.
16ab8e74
BF
1809
1810 If the user requests a fixed_line_length <7 then gfc_init_options()
1811 emits a fatal error. */
1dde8683
BM
1812 int fixed_line_length;
1813 int free_line_length;
1814 /* Maximum number of continuation lines in fixed- and free-form source,
1815 respectively. */
5a06474c
JD
1816 int max_continue_fixed;
1817 int max_continue_free;
6de9cd9a
DN
1818 int max_identifier_length;
1819 int verbose;
1820
1821 int warn_aliasing;
3fbab549 1822 int warn_ampersand;
6de9cd9a
DN
1823 int warn_conversion;
1824 int warn_implicit_interface;
1825 int warn_line_truncation;
1826 int warn_surprising;
840bd9f7
SK
1827 int warn_tabs;
1828 int warn_underflow;
2220652d 1829 int warn_character_truncation;
3f139fcf 1830 int max_errors;
6de9cd9a 1831
a23eec13 1832 int flag_all_intrinsics;
3ae9eb27
SK
1833 int flag_default_double;
1834 int flag_default_integer;
1835 int flag_default_real;
6de9cd9a
DN
1836 int flag_dollar_ok;
1837 int flag_underscoring;
1838 int flag_second_underscore;
1839 int flag_implicit_none;
1840 int flag_max_stack_var_size;
54554825 1841 int flag_range_check;
6de9cd9a
DN
1842 int flag_pack_derived;
1843 int flag_repack_arrays;
2d7c7df6 1844 int flag_preprocessed;
973ff4c0 1845 int flag_f2c;
ee5426a4 1846 int flag_automatic;
131c66cd 1847 int flag_backslash;
868d75db 1848 int flag_backtrace;
e6472bce 1849 int flag_allow_leading_underscore;
eedeea04 1850 int flag_dump_core;
5a0aad31
FXC
1851 int flag_external_blas;
1852 int blas_matmul_limit;
83d890b9 1853 int flag_cray_pointer;
e0bcf78c 1854 int flag_d_lines;
6c7a4dfd 1855 int flag_openmp;
68d2e027 1856 int flag_sign_zero;
654b6073 1857 int flag_module_private;
1e7de83b 1858 int flag_recursive;
51b09ce3
AL
1859 int flag_init_local_zero;
1860 int flag_init_integer;
1861 int flag_init_integer_value;
1862 int flag_init_real;
1863 int flag_init_logical;
1864 int flag_init_character;
1865 char flag_init_character_value;
6de9cd9a 1866
944b8b35
FXC
1867 int fpe;
1868
6de9cd9a
DN
1869 int warn_std;
1870 int allow_std;
b7892582 1871 int warn_nonstd_intrinsics;
25d8f0a2 1872 int fshort_enums;
eaa90d25 1873 int convert;
d67ab5ee 1874 int record_marker;
07b3bbf2 1875 int max_subrecord_length;
6de9cd9a
DN
1876}
1877gfc_option_t;
1878
1879extern gfc_option_t gfc_option;
1880
6de9cd9a
DN
1881/* Constructor nodes for array and structure constructors. */
1882typedef struct gfc_constructor
1883{
1884 gfc_expr *expr;
1885 gfc_iterator *iterator;
1886 locus where;
1887 struct gfc_constructor *next;
1888 struct
1889 {
1890 mpz_t offset; /* Record the offset of array element which appears in
1891 data statement like "data a(5)/4/". */
1892 gfc_component *component; /* Record the component being initialized. */
1893 }
1894 n;
1895 mpz_t repeat; /* Record the repeat number of initial values in data
1896 statement like "data a/5*10/". */
1897}
1898gfc_constructor;
1899
1900
1901typedef struct iterator_stack
1902{
1903 gfc_symtree *variable;
1904 mpz_t value;
1905 struct iterator_stack *prev;
1906}
1907iterator_stack;
1908extern iterator_stack *iter_stack;
1909
1910/************************ Function prototypes *************************/
1911
1912/* data.c */
1913void gfc_formalize_init_value (gfc_symbol *);
1914void gfc_get_section_index (gfc_array_ref *, mpz_t *, mpz_t *);
6bc7a4e1 1915try gfc_assign_data_value (gfc_expr *, gfc_expr *, mpz_t);
b8502435 1916void gfc_assign_data_value_range (gfc_expr *, gfc_expr *, mpz_t, mpz_t);
6de9cd9a
DN
1917void gfc_advance_section (mpz_t *, gfc_array_ref *, mpz_t *);
1918
2220652d
PT
1919/* decl.c */
1920bool gfc_in_match_data (void);
1921void gfc_set_in_match_data (bool);
1922
6de9cd9a
DN
1923/* scanner.c */
1924void gfc_scanner_done_1 (void);
1925void gfc_scanner_init_1 (void);
1926
31198773
FXC
1927void gfc_add_include_path (const char *, bool);
1928void gfc_add_intrinsic_modules_path (const char *);
6de9cd9a 1929void gfc_release_include_path (void);
31198773
FXC
1930FILE *gfc_open_included_file (const char *, bool, bool);
1931FILE *gfc_open_intrinsic_module (const char *);
6de9cd9a 1932
6de9cd9a
DN
1933int gfc_at_end (void);
1934int gfc_at_eof (void);
1935int gfc_at_bol (void);
1936int gfc_at_eol (void);
1937void gfc_advance_line (void);
1938int gfc_check_include (void);
9e8a6720 1939int gfc_define_undef_line (void);
6de9cd9a
DN
1940
1941void gfc_skip_comments (void);
1942int gfc_next_char_literal (int);
1943int gfc_next_char (void);
1944int gfc_peek_char (void);
1945void gfc_error_recovery (void);
1946void gfc_gobble_whitespace (void);
e0bcf78c 1947try gfc_new_file (void);
2d7c7df6 1948const char * gfc_read_orig_filename (const char *, const char **);
6de9cd9a 1949
d4fa05b9 1950extern gfc_source_form gfc_current_form;
e0bcf78c 1951extern const char *gfc_source_file;
63645982 1952extern locus gfc_current_locus;
6de9cd9a
DN
1953
1954/* misc.c */
1955void *gfc_getmem (size_t) ATTRIBUTE_MALLOC;
1956void gfc_free (void *);
66e4ab31 1957int gfc_terminal_width (void);
6de9cd9a
DN
1958void gfc_clear_ts (gfc_typespec *);
1959FILE *gfc_open_file (const char *);
6de9cd9a
DN
1960const char *gfc_basic_typename (bt);
1961const char *gfc_typename (gfc_typespec *);
ba3ba492 1962const char *gfc_op2string (gfc_intrinsic_op);
6de9cd9a
DN
1963const char *gfc_code2string (const mstring *, int);
1964int gfc_string2code (const mstring *, const char *);
1965const char *gfc_intent_string (sym_intent);
1966
1967void gfc_init_1 (void);
1968void gfc_init_2 (void);
1969void gfc_done_1 (void);
1970void gfc_done_2 (void);
1971
a8b3b0b6
CR
1972int get_c_kind (const char *, CInteropKind_t *);
1973
6de9cd9a
DN
1974/* options.c */
1975unsigned int gfc_init_options (unsigned int, const char **);
1976int gfc_handle_option (size_t, const char *, int);
1977bool gfc_post_options (const char **);
1978
1979/* iresolve.c */
6b25a558 1980const char * gfc_get_string (const char *, ...) ATTRIBUTE_PRINTF_1;
6de9cd9a
DN
1981
1982/* error.c */
1983
1984typedef struct gfc_error_buf
1985{
1986 int flag;
d71b89ca
JJ
1987 size_t allocated, index;
1988 char *message;
6de9cd9a
DN
1989} gfc_error_buf;
1990
1991void gfc_error_init_1 (void);
1992void gfc_buffer_error (int);
1993
0ce0154c
KG
1994void gfc_warning (const char *, ...) ATTRIBUTE_GCC_GFC(1,2);
1995void gfc_warning_now (const char *, ...) ATTRIBUTE_GCC_GFC(1,2);
6de9cd9a
DN
1996void gfc_clear_warning (void);
1997void gfc_warning_check (void);
1998
0ce0154c
KG
1999void gfc_error (const char *, ...) ATTRIBUTE_GCC_GFC(1,2);
2000void gfc_error_now (const char *, ...) ATTRIBUTE_GCC_GFC(1,2);
2001void gfc_fatal_error (const char *, ...) ATTRIBUTE_NORETURN ATTRIBUTE_GCC_GFC(1,2);
2002void gfc_internal_error (const char *, ...) ATTRIBUTE_NORETURN ATTRIBUTE_GCC_GFC(1,2);
6de9cd9a
DN
2003void gfc_clear_error (void);
2004int gfc_error_check (void);
8f81c3c6 2005int gfc_error_flag_test (void);
6de9cd9a 2006
8f0d39a8 2007notification gfc_notification_std (int);
0ce0154c 2008try gfc_notify_std (int, const char *, ...) ATTRIBUTE_GCC_GFC(2,3);
6de9cd9a
DN
2009
2010/* A general purpose syntax error. */
2011#define gfc_syntax_error(ST) \
2012 gfc_error ("Syntax error in %s statement at %C", gfc_ascii_statement (ST));
2013
2014void gfc_push_error (gfc_error_buf *);
2015void gfc_pop_error (gfc_error_buf *);
d71b89ca 2016void gfc_free_error (gfc_error_buf *);
6de9cd9a
DN
2017
2018void gfc_status (const char *, ...) ATTRIBUTE_PRINTF_1;
2019void gfc_status_char (char);
2020
2021void gfc_get_errors (int *, int *);
2022
2023/* arith.c */
2024void gfc_arith_init_1 (void);
2025void gfc_arith_done_1 (void);
25d8f0a2
TS
2026gfc_expr *gfc_enum_initializer (gfc_expr *, locus);
2027arith gfc_check_integer_range (mpz_t p, int kind);
6de9cd9a 2028
5e8e542f 2029/* trans-types.c */
a8b3b0b6
CR
2030try gfc_validate_c_kind (gfc_typespec *);
2031try gfc_check_any_c_kind (gfc_typespec *);
e7a2d5fb 2032int gfc_validate_kind (bt, int, bool);
6de9cd9a 2033extern int gfc_index_integer_kind;
9d64df18 2034extern int gfc_default_integer_kind;
f4e7375a 2035extern int gfc_max_integer_kind;
9d64df18
TS
2036extern int gfc_default_real_kind;
2037extern int gfc_default_double_kind;
2038extern int gfc_default_character_kind;
2039extern int gfc_default_logical_kind;
2040extern int gfc_default_complex_kind;
e8525382 2041extern int gfc_c_int_kind;
014ec6ee 2042extern int gfc_intio_kind;
f1412ca5 2043extern int gfc_charlen_int_kind;
39f87c03
FXC
2044extern int gfc_numeric_storage_size;
2045extern int gfc_character_storage_size;
6de9cd9a
DN
2046
2047/* symbol.c */
2048void gfc_clear_new_implicit (void);
1107b970
PB
2049try gfc_add_new_implicit_range (int, int);
2050try gfc_merge_new_implicit (gfc_typespec *);
6de9cd9a 2051void gfc_set_implicit_none (void);
e9bd9f7d 2052void gfc_check_function_type (gfc_namespace *);
e9c06563 2053bool gfc_is_intrinsic_typename (const char *);
6de9cd9a
DN
2054
2055gfc_typespec *gfc_get_default_type (gfc_symbol *, gfc_namespace *);
2056try gfc_set_default_type (gfc_symbol *, int, gfc_namespace *);
2057
2058void gfc_set_component_attr (gfc_component *, symbol_attribute *);
2059void gfc_get_component_attr (symbol_attribute *, gfc_component *);
2060
66e4ab31 2061void gfc_set_sym_referenced (gfc_symbol *);
6de9cd9a 2062
7114edca 2063try gfc_add_attribute (symbol_attribute *, locus *);
6de9cd9a 2064try gfc_add_allocatable (symbol_attribute *, locus *);
231b2fcc 2065try gfc_add_dimension (symbol_attribute *, const char *, locus *);
6de9cd9a
DN
2066try gfc_add_external (symbol_attribute *, locus *);
2067try gfc_add_intrinsic (symbol_attribute *, locus *);
2068try gfc_add_optional (symbol_attribute *, locus *);
2069try gfc_add_pointer (symbol_attribute *, locus *);
83d890b9
AL
2070try gfc_add_cray_pointer (symbol_attribute *, locus *);
2071try gfc_add_cray_pointee (symbol_attribute *, locus *);
66e4ab31 2072try gfc_mod_pointee_as (gfc_array_spec *);
ee7e677f 2073try gfc_add_protected (symbol_attribute *, const char *, locus *);
231b2fcc
TS
2074try gfc_add_result (symbol_attribute *, const char *, locus *);
2075try gfc_add_save (symbol_attribute *, const char *, locus *);
6c7a4dfd 2076try gfc_add_threadprivate (symbol_attribute *, const char *, locus *);
6de9cd9a
DN
2077try gfc_add_saved_common (symbol_attribute *, locus *);
2078try gfc_add_target (symbol_attribute *, locus *);
231b2fcc
TS
2079try gfc_add_dummy (symbol_attribute *, const char *, locus *);
2080try gfc_add_generic (symbol_attribute *, const char *, locus *);
6de9cd9a 2081try gfc_add_common (symbol_attribute *, locus *);
231b2fcc 2082try gfc_add_in_common (symbol_attribute *, const char *, locus *);
e8ec07e1 2083try gfc_add_in_equivalence (symbol_attribute *, const char *, locus *);
231b2fcc
TS
2084try gfc_add_data (symbol_attribute *, const char *, locus *);
2085try gfc_add_in_namelist (symbol_attribute *, const char *, locus *);
2086try gfc_add_sequence (symbol_attribute *, const char *, locus *);
6de9cd9a
DN
2087try gfc_add_elemental (symbol_attribute *, locus *);
2088try gfc_add_pure (symbol_attribute *, locus *);
2089try gfc_add_recursive (symbol_attribute *, locus *);
231b2fcc
TS
2090try gfc_add_function (symbol_attribute *, const char *, locus *);
2091try gfc_add_subroutine (symbol_attribute *, const char *, locus *);
775e6c3a 2092try gfc_add_volatile (symbol_attribute *, const char *, locus *);
69773742 2093try gfc_add_proc (symbol_attribute *attr, const char *name, locus *where);
231b2fcc
TS
2094
2095try gfc_add_access (symbol_attribute *, gfc_access, const char *, locus *);
a8b3b0b6
CR
2096try gfc_add_is_bind_c(symbol_attribute *, const char *, locus *, int);
2097try gfc_add_value (symbol_attribute *, const char *, locus *);
231b2fcc
TS
2098try gfc_add_flavor (symbol_attribute *, sym_flavor, const char *, locus *);
2099try gfc_add_entry (symbol_attribute *, const char *, locus *);
2100try gfc_add_procedure (symbol_attribute *, procedure_type,
2101 const char *, locus *);
6de9cd9a
DN
2102try gfc_add_intent (symbol_attribute *, sym_intent, locus *);
2103try gfc_add_explicit_interface (gfc_symbol *, ifsrc,
2104 gfc_formal_arglist *, locus *);
2105try gfc_add_type (gfc_symbol *, gfc_typespec *, locus *);
2106
2107void gfc_clear_attr (symbol_attribute *);
2108try gfc_missing_attr (symbol_attribute *, locus *);
2109try gfc_copy_attr (symbol_attribute *, symbol_attribute *, locus *);
2110
2111try gfc_add_component (gfc_symbol *, const char *, gfc_component **);
2112gfc_symbol *gfc_use_derived (gfc_symbol *);
2113gfc_symtree *gfc_use_derived_tree (gfc_symtree *);
2114gfc_component *gfc_find_component (gfc_symbol *, const char *);
2115
2116gfc_st_label *gfc_get_st_label (int);
2117void gfc_free_st_label (gfc_st_label *);
2118void gfc_define_st_label (gfc_st_label *, gfc_sl_type, locus *);
2119try gfc_reference_st_label (gfc_st_label *, gfc_sl_type);
2120
08113c73
PT
2121gfc_expr * gfc_lval_expr_from_sym (gfc_symbol *);
2122
0366dfe9 2123gfc_namespace *gfc_get_namespace (gfc_namespace *, int);
6de9cd9a
DN
2124gfc_symtree *gfc_new_symtree (gfc_symtree **, const char *);
2125gfc_symtree *gfc_find_symtree (gfc_symtree *, const char *);
aa84a9a5 2126gfc_symtree *gfc_get_unique_symtree (gfc_namespace *);
6de9cd9a
DN
2127gfc_user_op *gfc_get_uop (const char *);
2128gfc_user_op *gfc_find_uop (const char *, gfc_namespace *);
2129void gfc_free_symbol (gfc_symbol *);
2130gfc_symbol *gfc_new_symbol (const char *, gfc_namespace *);
2131int gfc_find_symbol (const char *, gfc_namespace *, int, gfc_symbol **);
2132int gfc_find_sym_tree (const char *, gfc_namespace *, int, gfc_symtree **);
2133int gfc_get_symbol (const char *, gfc_namespace *, gfc_symbol **);
a8b3b0b6
CR
2134try verify_c_interop (gfc_typespec *, const char *name, locus *where);
2135try verify_c_interop_param (gfc_symbol *);
2136try verify_bind_c_sym (gfc_symbol *, gfc_typespec *, int, gfc_common_head *);
2137try verify_bind_c_derived_type (gfc_symbol *);
2138try verify_com_block_vars_c_interop (gfc_common_head *);
741ac903 2139void generate_isocbinding_symbol (const char *, iso_c_binding_symbol, const char *);
a8b3b0b6 2140gfc_symbol *get_iso_c_sym (gfc_symbol *, char *, char *, int);
6de9cd9a
DN
2141int gfc_get_sym_tree (const char *, gfc_namespace *, gfc_symtree **);
2142int gfc_get_ha_symbol (const char *, gfc_symbol **);
2143int gfc_get_ha_sym_tree (const char *, gfc_symtree **);
2144
2145int gfc_symbols_could_alias (gfc_symbol *, gfc_symbol *);
2146
2147void gfc_undo_symbols (void);
2148void gfc_commit_symbols (void);
66e4ab31 2149void gfc_commit_symbol (gfc_symbol *);
6de9cd9a
DN
2150void gfc_free_namespace (gfc_namespace *);
2151
2152void gfc_symbol_init_2 (void);
2153void gfc_symbol_done_2 (void);
2154
9056bd70 2155void gfc_traverse_symtree (gfc_symtree *, void (*)(gfc_symtree *));
6de9cd9a
DN
2156void gfc_traverse_ns (gfc_namespace *, void (*)(gfc_symbol *));
2157void gfc_traverse_user_op (gfc_namespace *, void (*)(gfc_user_op *));
2158void gfc_save_all (gfc_namespace *);
2159
2160void gfc_symbol_state (void);
2161
cb9e4f55
TS
2162gfc_gsymbol *gfc_get_gsymbol (const char *);
2163gfc_gsymbol *gfc_find_gsymbol (gfc_gsymbol *, const char *);
c9543002 2164
69773742
JW
2165void copy_formal_args (gfc_symbol *dest, gfc_symbol *src);
2166
6de9cd9a
DN
2167/* intrinsic.c */
2168extern int gfc_init_expr;
2169
2170/* Given a symbol that we have decided is intrinsic, mark it as such
2171 by placing it into a special module that is otherwise impossible to
2172 read or write. */
2173
cb9e4f55 2174#define gfc_intrinsic_symbol(SYM) SYM->module = gfc_get_string ("(intrinsic)")
6de9cd9a
DN
2175
2176void gfc_intrinsic_init_1 (void);
2177void gfc_intrinsic_done_1 (void);
2178
2179char gfc_type_letter (bt);
2180gfc_symbol * gfc_get_intrinsic_sub_symbol (const char *);
2181try gfc_convert_type (gfc_expr *, gfc_typespec *, int);
2182try gfc_convert_type_warn (gfc_expr *, gfc_typespec *, int, int);
2183int gfc_generic_intrinsic (const char *);
2184int gfc_specific_intrinsic (const char *);
2185int gfc_intrinsic_name (const char *, int);
0e7e7e6e 2186int gfc_intrinsic_actual_ok (const char *, const bool);
6de9cd9a 2187gfc_intrinsic_sym *gfc_find_function (const char *);
cd5ecab6 2188gfc_intrinsic_sym *gfc_find_subroutine (const char *);
6de9cd9a
DN
2189
2190match gfc_intrinsic_func_interface (gfc_expr *, int);
2191match gfc_intrinsic_sub_interface (gfc_code *, int);
2192
6de9cd9a
DN
2193/* match.c -- FIXME */
2194void gfc_free_iterator (gfc_iterator *, int);
2195void gfc_free_forall_iterator (gfc_forall_iterator *);
2196void gfc_free_alloc_list (gfc_alloc *);
2197void gfc_free_namelist (gfc_namelist *);
2198void gfc_free_equiv (gfc_equiv *);
2199void gfc_free_data (gfc_data *);
2200void gfc_free_case_list (gfc_case *);
2201
b6398823
PT
2202/* matchexp.c -- FIXME too? */
2203gfc_expr *gfc_get_parentheses (gfc_expr *);
2204
6c7a4dfd
JJ
2205/* openmp.c */
2206void gfc_free_omp_clauses (gfc_omp_clauses *);
2207void gfc_resolve_omp_directive (gfc_code *, gfc_namespace *);
2208void gfc_resolve_do_iterator (gfc_code *, gfc_symbol *);
2209void gfc_resolve_omp_parallel_blocks (gfc_code *, gfc_namespace *);
2210void gfc_resolve_omp_do_blocks (gfc_code *, gfc_namespace *);
2211
6de9cd9a
DN
2212/* expr.c */
2213void gfc_free_actual_arglist (gfc_actual_arglist *);
2214gfc_actual_arglist *gfc_copy_actual_arglist (gfc_actual_arglist *);
2215const char *gfc_extract_int (gfc_expr *, int *);
5046aff5 2216gfc_expr *gfc_expr_to_initialize (gfc_expr *);
1d6b7f39 2217bool is_subref_array (gfc_expr *);
6de9cd9a
DN
2218
2219gfc_expr *gfc_build_conversion (gfc_expr *);
2220void gfc_free_ref_list (gfc_ref *);
2221void gfc_type_convert_binary (gfc_expr *);
2222int gfc_is_constant_expr (gfc_expr *);
2223try gfc_simplify_expr (gfc_expr *, int);
4075a94e 2224int gfc_has_vector_index (gfc_expr *);
6de9cd9a
DN
2225
2226gfc_expr *gfc_get_expr (void);
2227void gfc_free_expr (gfc_expr *);
2228void gfc_replace_expr (gfc_expr *, gfc_expr *);
2229gfc_expr *gfc_int_expr (int);
2230gfc_expr *gfc_logical_expr (int, locus *);
2231mpz_t *gfc_copy_shape (mpz_t *, int);
94538bd1 2232mpz_t *gfc_copy_shape_excluding (mpz_t *, int, gfc_expr *);
6de9cd9a
DN
2233gfc_expr *gfc_copy_expr (gfc_expr *);
2234
2235try gfc_specification_expr (gfc_expr *);
2236
2237int gfc_numeric_ts (gfc_typespec *);
2238int gfc_kind_max (gfc_expr *, gfc_expr *);
2239
2240try gfc_check_conformance (const char *, gfc_expr *, gfc_expr *);
2241try gfc_check_assign (gfc_expr *, gfc_expr *, int);
2242try gfc_check_pointer_assign (gfc_expr *, gfc_expr *);
2243try gfc_check_assign_symbol (gfc_symbol *, gfc_expr *);
2244
54b4ba60 2245gfc_expr *gfc_default_initializer (gfc_typespec *);
294fbfc8
TS
2246gfc_expr *gfc_get_variable_expr (gfc_symtree *);
2247
66e4ab31 2248void gfc_expr_set_symbols_referenced (gfc_expr *);
54b4ba60 2249
6de9cd9a
DN
2250/* st.c */
2251extern gfc_code new_st;
2252
2253void gfc_clear_new_st (void);
2254gfc_code *gfc_get_code (void);
2255gfc_code *gfc_append_code (gfc_code *, gfc_code *);
2256void gfc_free_statement (gfc_code *);
2257void gfc_free_statements (gfc_code *);
2258
2259/* resolve.c */
2260try gfc_resolve_expr (gfc_expr *);
2261void gfc_resolve (gfc_namespace *);
6c7a4dfd 2262void gfc_resolve_blocks (gfc_code *, gfc_namespace *);
6de9cd9a
DN
2263int gfc_impure_variable (gfc_symbol *);
2264int gfc_pure (gfc_symbol *);
2265int gfc_elemental (gfc_symbol *);
8d5cfa27 2266try gfc_resolve_iterator (gfc_iterator *, bool);
6de9cd9a 2267try gfc_resolve_index (gfc_expr *, int);
bf302220 2268try gfc_resolve_dim_arg (gfc_expr *);
4213f93b 2269int gfc_is_formal_arg (void);
07368af0 2270void gfc_resolve_substring_charlen (gfc_expr *);
a8b3b0b6
CR
2271match gfc_iso_c_sub_interface(gfc_code *, gfc_symbol *);
2272
6de9cd9a
DN
2273
2274/* array.c */
2275void gfc_free_array_spec (gfc_array_spec *);
2276gfc_array_ref *gfc_copy_array_ref (gfc_array_ref *);
2277
2278try gfc_set_array_spec (gfc_symbol *, gfc_array_spec *, locus *);
2279gfc_array_spec *gfc_copy_array_spec (gfc_array_spec *);
2280try gfc_resolve_array_spec (gfc_array_spec *, int);
2281
2282int gfc_compare_array_spec (gfc_array_spec *, gfc_array_spec *);
2283
2284gfc_expr *gfc_start_constructor (bt, int, locus *);
2285void gfc_append_constructor (gfc_expr *, gfc_expr *);
2286void gfc_free_constructor (gfc_constructor *);
2287void gfc_simplify_iterator_var (gfc_expr *);
2288try gfc_expand_constructor (gfc_expr *);
2289int gfc_constant_ac (gfc_expr *);
2290int gfc_expanded_ac (gfc_expr *);
1855915a 2291void gfc_resolve_character_array_constructor (gfc_expr *);
6de9cd9a
DN
2292try gfc_resolve_array_constructor (gfc_expr *);
2293try gfc_check_constructor_type (gfc_expr *);
2294try gfc_check_iter_variable (gfc_expr *);
2295try gfc_check_constructor (gfc_expr *, try (*)(gfc_expr *));
66e4ab31 2296gfc_constructor *gfc_copy_constructor (gfc_constructor *);
6de9cd9a
DN
2297gfc_expr *gfc_get_array_element (gfc_expr *, int);
2298try gfc_array_size (gfc_expr *, mpz_t *);
2299try gfc_array_dimen_size (gfc_expr *, int, mpz_t *);
2300try gfc_array_ref_shape (gfc_array_ref *, mpz_t *);
2301gfc_array_ref *gfc_find_array_ref (gfc_expr *);
2302void gfc_insert_constructor (gfc_expr *, gfc_constructor *);
2303gfc_constructor *gfc_get_constructor (void);
66e4ab31 2304tree gfc_conv_array_initializer (tree type, gfc_expr *);
6de9cd9a 2305try spec_size (gfc_array_spec *, mpz_t *);
a9b43781 2306try spec_dimen_size (gfc_array_spec *, int, mpz_t *);
4077d207 2307int gfc_is_compile_time_shape (gfc_array_spec *);
6de9cd9a
DN
2308
2309/* interface.c -- FIXME: some of these should be in symbol.c */
2310void gfc_free_interface (gfc_interface *);
e0e85e06 2311int gfc_compare_derived_types (gfc_symbol *, gfc_symbol *);
6de9cd9a
DN
2312int gfc_compare_types (gfc_typespec *, gfc_typespec *);
2313void gfc_check_interfaces (gfc_namespace *);
2314void gfc_procedure_use (gfc_symbol *, gfc_actual_arglist **, locus *);
2315gfc_symbol *gfc_search_interface (gfc_interface *, int,
2316 gfc_actual_arglist **);
2317try gfc_extend_expr (gfc_expr *);
2318void gfc_free_formal_arglist (gfc_formal_arglist *);
2319try gfc_extend_assign (gfc_code *, gfc_namespace *);
66e4ab31 2320try gfc_add_interface (gfc_symbol *);
6de9cd9a
DN
2321
2322/* io.c */
2323extern gfc_st_label format_asterisk;
2324
2325void gfc_free_open (gfc_open *);
2326try gfc_resolve_open (gfc_open *);
2327void gfc_free_close (gfc_close *);
2328try gfc_resolve_close (gfc_close *);
2329void gfc_free_filepos (gfc_filepos *);
2330try gfc_resolve_filepos (gfc_filepos *);
2331void gfc_free_inquire (gfc_inquire *);
2332try gfc_resolve_inquire (gfc_inquire *);
2333void gfc_free_dt (gfc_dt *);
2334try gfc_resolve_dt (gfc_dt *);
2335
2336/* module.c */
2337void gfc_module_init_2 (void);
2338void gfc_module_done_2 (void);
2339void gfc_dump_module (const char *, int);
af30f793 2340bool gfc_check_access (gfc_access, gfc_access);
6de9cd9a
DN
2341
2342/* primary.c */
2343symbol_attribute gfc_variable_attr (gfc_expr *, gfc_typespec *);
2344symbol_attribute gfc_expr_attr (gfc_expr *);
eb77cddf 2345match gfc_match_rvalue (gfc_expr **);
6de9cd9a
DN
2346
2347/* trans.c */
2348void gfc_generate_code (gfc_namespace *);
2349void gfc_generate_module_code (gfc_namespace *);
2350
2351/* bbt.c */
2352typedef int (*compare_fn) (void *, void *);
2353void gfc_insert_bbt (void *, void *, compare_fn);
2354void gfc_delete_bbt (void *, void *, compare_fn);
2355
2356/* dump-parse-tree.c */
c4632147
TS
2357void gfc_show_actual_arglist (gfc_actual_arglist *);
2358void gfc_show_array_ref (gfc_array_ref *);
2359void gfc_show_array_spec (gfc_array_spec *);
2360void gfc_show_attr (symbol_attribute *);
2361void gfc_show_code (int, gfc_code *);
2362void gfc_show_components (gfc_symbol *);
2363void gfc_show_constructor (gfc_constructor *);
2364void gfc_show_equiv (gfc_equiv *);
2365void gfc_show_expr (gfc_expr *);
2366void gfc_show_namelist (gfc_namelist *);
6de9cd9a 2367void gfc_show_namespace (gfc_namespace *);
c4632147
TS
2368void gfc_show_ref (gfc_ref *);
2369void gfc_show_symbol (gfc_symbol *);
2370void gfc_show_typespec (gfc_typespec *);
6de9cd9a
DN
2371
2372/* parse.c */
2373try gfc_parse_file (void);
68ea355b 2374void global_used (gfc_gsymbol *, locus *);
6de9cd9a 2375
2990f854
PT
2376/* dependency.c */
2377int gfc_dep_compare_expr (gfc_expr *, gfc_expr *);
2378
53814b8f 2379#endif /* GCC_GFORTRAN_H */