OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [fortran/] [gfortran.h] - Blame information for rev 712

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 712 jeremybenn
/* gfortran header file
2
   Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
3
   2009, 2010, 2011, 2012
4
   Free Software Foundation, Inc.
5
   Contributed by Andy Vaught
6
 
7
This file is part of GCC.
8
 
9
GCC is free software; you can redistribute it and/or modify it under
10
the terms of the GNU General Public License as published by the Free
11
Software Foundation; either version 3, or (at your option) any later
12
version.
13
 
14
GCC is distributed in the hope that it will be useful, but WITHOUT ANY
15
WARRANTY; without even the implied warranty of MERCHANTABILITY or
16
FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
17
for more details.
18
 
19
You should have received a copy of the GNU General Public License
20
along with GCC; see the file COPYING3.  If not see
21
<http://www.gnu.org/licenses/>.  */
22
 
23
#ifndef GCC_GFORTRAN_H
24
#define GCC_GFORTRAN_H
25
 
26
/* It's probably insane to have this large of a header file, but it
27
   seemed like everything had to be recompiled anyway when a change
28
   was made to a header file, and there were ordering issues with
29
   multiple header files.  Besides, Microsoft's winnt.h was 250k last
30
   time I looked, so by comparison this is perfectly reasonable.  */
31
 
32
/* Declarations common to the front-end and library are put in
33
   libgfortran/libgfortran_frontend.h  */
34
#include "libgfortran.h"
35
 
36
 
37
#include "intl.h"
38
#include "coretypes.h"
39
#include "input.h"
40
#include "splay-tree.h"
41
 
42
/* Major control parameters.  */
43
 
44
#define GFC_MAX_SYMBOL_LEN 63   /* Must be at least 63 for F2003.  */
45
#define GFC_MAX_LINE 132        /* Characters beyond this are not seen.  */
46
#define GFC_LETTERS 26          /* Number of letters in the alphabet.  */
47
 
48
#define MAX_SUBRECORD_LENGTH 2147483639   /* 2**31-9 */
49
 
50
 
51
#define gfc_is_whitespace(c) ((c==' ') || (c=='\t'))
52
 
53
/* Stringization.  */
54
#define stringize(x) expand_macro(x)
55
#define expand_macro(x) # x
56
 
57
/* For the runtime library, a standard prefix is a requirement to
58
   avoid cluttering the namespace with things nobody asked for.  It's
59
   ugly to look at and a pain to type when you add the prefix by hand,
60
   so we hide it behind a macro.  */
61
#define PREFIX(x) "_gfortran_" x
62
#define PREFIX_LEN 10
63
 
64
#define BLANK_COMMON_NAME "__BLNK__"
65
 
66
/* Macro to initialize an mstring structure.  */
67
#define minit(s, t) { s, NULL, t }
68
 
69
/* Structure for storing strings to be matched by gfc_match_string.  */
70
typedef struct
71
{
72
  const char *string;
73
  const char *mp;
74
  int tag;
75
}
76
mstring;
77
 
78
 
79
 
80
/*************************** Enums *****************************/
81
 
82
/* Used when matching and resolving data I/O transfer statements.  */
83
 
84
typedef enum
85
{ M_READ, M_WRITE, M_PRINT, M_INQUIRE }
86
io_kind;
87
 
88
/* The author remains confused to this day about the convention of
89
   returning '0' for 'SUCCESS'... or was it the other way around?  The
90
   following enum makes things much more readable.  We also start
91
   values off at one instead of zero.  */
92
 
93
typedef enum
94
{ SUCCESS = 1, FAILURE }
95
gfc_try;
96
 
97
/* These are flags for identifying whether we are reading a character literal
98
   between quotes or normal source code.  */
99
 
100
typedef enum
101
{ NONSTRING = 0, INSTRING_WARN, INSTRING_NOWARN }
102
gfc_instring;
103
 
104
/* This is returned by gfc_notification_std to know if, given the flags
105
   that were given (-std=, -pedantic) we should issue an error, a warning
106
   or nothing.  */
107
 
108
typedef enum
109
{ SILENT, WARNING, ERROR }
110
notification;
111
 
112
/* Matchers return one of these three values.  The difference between
113
   MATCH_NO and MATCH_ERROR is that MATCH_ERROR means that a match was
114
   successful, but that something non-syntactic is wrong and an error
115
   has already been issued.  */
116
 
117
typedef enum
118
{ MATCH_NO = 1, MATCH_YES, MATCH_ERROR }
119
match;
120
 
121
/* Used for different Fortran source forms in places like scanner.c.  */
122
typedef enum
123
{ FORM_FREE, FORM_FIXED, FORM_UNKNOWN }
124
gfc_source_form;
125
 
126
/* Expression node types.  */
127
typedef enum
128
{ EXPR_OP = 1, EXPR_FUNCTION, EXPR_CONSTANT, EXPR_VARIABLE,
129
  EXPR_SUBSTRING, EXPR_STRUCTURE, EXPR_ARRAY, EXPR_NULL, EXPR_COMPCALL, EXPR_PPC
130
}
131
expr_t;
132
 
133
/* Array types.  */
134
typedef enum
135
{ AS_EXPLICIT = 1, AS_ASSUMED_SHAPE, AS_DEFERRED,
136
  AS_ASSUMED_SIZE, AS_IMPLIED_SHAPE, AS_UNKNOWN
137
}
138
array_type;
139
 
140
typedef enum
141
{ AR_FULL = 1, AR_ELEMENT, AR_SECTION, AR_UNKNOWN }
142
ar_type;
143
 
144
/* Statement label types.  */
145
typedef enum
146
{ ST_LABEL_UNKNOWN = 1, ST_LABEL_TARGET,
147
  ST_LABEL_BAD_TARGET, ST_LABEL_FORMAT
148
}
149
gfc_sl_type;
150
 
151
/* Intrinsic operators.  */
152
typedef enum
153
{ GFC_INTRINSIC_BEGIN = 0,
154
  INTRINSIC_NONE = -1, INTRINSIC_UPLUS = GFC_INTRINSIC_BEGIN,
155
  INTRINSIC_UMINUS, INTRINSIC_PLUS, INTRINSIC_MINUS, INTRINSIC_TIMES,
156
  INTRINSIC_DIVIDE, INTRINSIC_POWER, INTRINSIC_CONCAT,
157
  INTRINSIC_AND, INTRINSIC_OR, INTRINSIC_EQV, INTRINSIC_NEQV,
158
  /* ==, /=, >, >=, <, <=  */
159
  INTRINSIC_EQ, INTRINSIC_NE, INTRINSIC_GT, INTRINSIC_GE,
160
  INTRINSIC_LT, INTRINSIC_LE,
161
  /* .EQ., .NE., .GT., .GE., .LT., .LE. (OS = Old-Style)  */
162
  INTRINSIC_EQ_OS, INTRINSIC_NE_OS, INTRINSIC_GT_OS, INTRINSIC_GE_OS,
163
  INTRINSIC_LT_OS, INTRINSIC_LE_OS,
164
  INTRINSIC_NOT, INTRINSIC_USER, INTRINSIC_ASSIGN,
165
  INTRINSIC_PARENTHESES, GFC_INTRINSIC_END /* Sentinel */
166
}
167
gfc_intrinsic_op;
168
 
169
/* This macro is the number of intrinsic operators that exist.
170
   Assumptions are made about the numbering of the interface_op enums.  */
171
#define GFC_INTRINSIC_OPS GFC_INTRINSIC_END
172
 
173
/* Arithmetic results.  */
174
typedef enum
175
{ ARITH_OK = 1, ARITH_OVERFLOW, ARITH_UNDERFLOW, ARITH_NAN,
176
  ARITH_DIV0, ARITH_INCOMMENSURATE, ARITH_ASYMMETRIC, ARITH_PROHIBIT
177
}
178
arith;
179
 
180
/* Statements.  */
181
typedef enum
182
{
183
  ST_ARITHMETIC_IF, ST_ALLOCATE, ST_ATTR_DECL, ST_ASSOCIATE,
184
  ST_BACKSPACE, ST_BLOCK, ST_BLOCK_DATA,
185
  ST_CALL, ST_CASE, ST_CLOSE, ST_COMMON, ST_CONTINUE, ST_CONTAINS, ST_CYCLE,
186
  ST_DATA, ST_DATA_DECL, ST_DEALLOCATE, ST_DO, ST_ELSE, ST_ELSEIF,
187
  ST_ELSEWHERE, ST_END_ASSOCIATE, ST_END_BLOCK, ST_END_BLOCK_DATA,
188
  ST_ENDDO, ST_IMPLIED_ENDDO,
189
  ST_END_FILE, ST_FINAL, ST_FLUSH, ST_END_FORALL, ST_END_FUNCTION, ST_ENDIF,
190
  ST_END_INTERFACE, ST_END_MODULE, ST_END_PROGRAM, ST_END_SELECT,
191
  ST_END_SUBROUTINE, ST_END_WHERE, ST_END_TYPE, ST_ENTRY, ST_EQUIVALENCE,
192
  ST_ERROR_STOP, ST_EXIT, ST_FORALL, ST_FORALL_BLOCK, ST_FORMAT, ST_FUNCTION,
193
  ST_GOTO, ST_IF_BLOCK, ST_IMPLICIT, ST_IMPLICIT_NONE, ST_IMPORT,
194
  ST_INQUIRE, ST_INTERFACE, ST_SYNC_ALL, ST_SYNC_MEMORY, ST_SYNC_IMAGES,
195
  ST_PARAMETER, ST_MODULE, ST_MODULE_PROC, ST_NAMELIST, ST_NULLIFY, ST_OPEN,
196
  ST_PAUSE, ST_PRIVATE, ST_PROGRAM, ST_PUBLIC, ST_READ, ST_RETURN, ST_REWIND,
197
  ST_STOP, ST_SUBROUTINE, ST_TYPE, ST_USE, ST_WHERE_BLOCK, ST_WHERE, ST_WAIT,
198
  ST_WRITE, ST_ASSIGNMENT, ST_POINTER_ASSIGNMENT, ST_SELECT_CASE, ST_SEQUENCE,
199
  ST_SIMPLE_IF, ST_STATEMENT_FUNCTION, ST_DERIVED_DECL, ST_LABEL_ASSIGNMENT,
200
  ST_ENUM, ST_ENUMERATOR, ST_END_ENUM, ST_SELECT_TYPE, ST_TYPE_IS, ST_CLASS_IS,
201
  ST_OMP_ATOMIC, ST_OMP_BARRIER, ST_OMP_CRITICAL, ST_OMP_END_ATOMIC,
202
  ST_OMP_END_CRITICAL, ST_OMP_END_DO, ST_OMP_END_MASTER, ST_OMP_END_ORDERED,
203
  ST_OMP_END_PARALLEL, ST_OMP_END_PARALLEL_DO, ST_OMP_END_PARALLEL_SECTIONS,
204
  ST_OMP_END_PARALLEL_WORKSHARE, ST_OMP_END_SECTIONS, ST_OMP_END_SINGLE,
205
  ST_OMP_END_WORKSHARE, ST_OMP_DO, ST_OMP_FLUSH, ST_OMP_MASTER, ST_OMP_ORDERED,
206
  ST_OMP_PARALLEL, ST_OMP_PARALLEL_DO, ST_OMP_PARALLEL_SECTIONS,
207
  ST_OMP_PARALLEL_WORKSHARE, ST_OMP_SECTIONS, ST_OMP_SECTION, ST_OMP_SINGLE,
208
  ST_OMP_THREADPRIVATE, ST_OMP_WORKSHARE, ST_OMP_TASK, ST_OMP_END_TASK,
209
  ST_OMP_TASKWAIT, ST_OMP_TASKYIELD, ST_PROCEDURE, ST_GENERIC, ST_CRITICAL,
210
  ST_END_CRITICAL, ST_GET_FCN_CHARACTERISTICS, ST_LOCK, ST_UNLOCK, ST_NONE
211
}
212
gfc_statement;
213
 
214
/* Types of interfaces that we can have.  Assignment interfaces are
215
   considered to be intrinsic operators.  */
216
typedef enum
217
{
218
  INTERFACE_NAMELESS = 1, INTERFACE_GENERIC,
219
  INTERFACE_INTRINSIC_OP, INTERFACE_USER_OP, INTERFACE_ABSTRACT
220
}
221
interface_type;
222
 
223
/* Symbol flavors: these are all mutually exclusive.
224
   10 elements = 4 bits.  */
225
typedef enum sym_flavor
226
{
227
  FL_UNKNOWN = 0, FL_PROGRAM, FL_BLOCK_DATA, FL_MODULE, FL_VARIABLE,
228
  FL_PARAMETER, FL_LABEL, FL_PROCEDURE, FL_DERIVED, FL_NAMELIST,
229
  FL_VOID
230
}
231
sym_flavor;
232
 
233
/* Procedure types.  7 elements = 3 bits.  */
234
typedef enum procedure_type
235
{ PROC_UNKNOWN, PROC_MODULE, PROC_INTERNAL, PROC_DUMMY,
236
  PROC_INTRINSIC, PROC_ST_FUNCTION, PROC_EXTERNAL
237
}
238
procedure_type;
239
 
240
/* Intent types.  */
241
typedef enum sym_intent
242
{ INTENT_UNKNOWN = 0, INTENT_IN, INTENT_OUT, INTENT_INOUT
243
}
244
sym_intent;
245
 
246
/* Access types.  */
247
typedef enum gfc_access
248
{ ACCESS_UNKNOWN = 0, ACCESS_PUBLIC, ACCESS_PRIVATE
249
}
250
gfc_access;
251
 
252
/* Flags to keep track of where an interface came from.
253
   3 elements = 2 bits.  */
254
typedef enum ifsrc
255
{ IFSRC_UNKNOWN = 0,     /* Interface unknown, only return type may be known.  */
256
  IFSRC_DECL,           /* FUNCTION or SUBROUTINE declaration.  */
257
  IFSRC_IFBODY          /* INTERFACE statement or PROCEDURE statement
258
                           with explicit interface.  */
259
}
260
ifsrc;
261
 
262
/* Whether a SAVE attribute was set explicitly or implicitly.  */
263
typedef enum save_state
264
{ SAVE_NONE = 0, SAVE_EXPLICIT, SAVE_IMPLICIT
265
}
266
save_state;
267
 
268
/* Strings for all symbol attributes.  We use these for dumping the
269
   parse tree, in error messages, and also when reading and writing
270
   modules.  In symbol.c.  */
271
extern const mstring flavors[];
272
extern const mstring procedures[];
273
extern const mstring intents[];
274
extern const mstring access_types[];
275
extern const mstring ifsrc_types[];
276
extern const mstring save_status[];
277
 
278
/* Enumeration of all the generic intrinsic functions.  Used by the
279
   backend for identification of a function.  */
280
 
281
enum gfc_isym_id
282
{
283
  /* GFC_ISYM_NONE is used for intrinsics which will never be seen by
284
     the backend (e.g. KIND).  */
285
  GFC_ISYM_NONE = 0,
286
  GFC_ISYM_ABORT,
287
  GFC_ISYM_ABS,
288
  GFC_ISYM_ACCESS,
289
  GFC_ISYM_ACHAR,
290
  GFC_ISYM_ACOS,
291
  GFC_ISYM_ACOSH,
292
  GFC_ISYM_ADJUSTL,
293
  GFC_ISYM_ADJUSTR,
294
  GFC_ISYM_AIMAG,
295
  GFC_ISYM_AINT,
296
  GFC_ISYM_ALARM,
297
  GFC_ISYM_ALL,
298
  GFC_ISYM_ALLOCATED,
299
  GFC_ISYM_AND,
300
  GFC_ISYM_ANINT,
301
  GFC_ISYM_ANY,
302
  GFC_ISYM_ASIN,
303
  GFC_ISYM_ASINH,
304
  GFC_ISYM_ASSOCIATED,
305
  GFC_ISYM_ATAN,
306
  GFC_ISYM_ATAN2,
307
  GFC_ISYM_ATANH,
308
  GFC_ISYM_ATOMIC_DEF,
309
  GFC_ISYM_ATOMIC_REF,
310
  GFC_ISYM_BGE,
311
  GFC_ISYM_BGT,
312
  GFC_ISYM_BIT_SIZE,
313
  GFC_ISYM_BLE,
314
  GFC_ISYM_BLT,
315
  GFC_ISYM_BTEST,
316
  GFC_ISYM_CEILING,
317
  GFC_ISYM_CHAR,
318
  GFC_ISYM_CHDIR,
319
  GFC_ISYM_CHMOD,
320
  GFC_ISYM_CMPLX,
321
  GFC_ISYM_COMMAND_ARGUMENT_COUNT,
322
  GFC_ISYM_COMPILER_OPTIONS,
323
  GFC_ISYM_COMPILER_VERSION,
324
  GFC_ISYM_COMPLEX,
325
  GFC_ISYM_CONJG,
326
  GFC_ISYM_CONVERSION,
327
  GFC_ISYM_COS,
328
  GFC_ISYM_COSH,
329
  GFC_ISYM_COUNT,
330
  GFC_ISYM_CPU_TIME,
331
  GFC_ISYM_CSHIFT,
332
  GFC_ISYM_CTIME,
333
  GFC_ISYM_C_SIZEOF,
334
  GFC_ISYM_DATE_AND_TIME,
335
  GFC_ISYM_DBLE,
336
  GFC_ISYM_DIGITS,
337
  GFC_ISYM_DIM,
338
  GFC_ISYM_DOT_PRODUCT,
339
  GFC_ISYM_DPROD,
340
  GFC_ISYM_DSHIFTL,
341
  GFC_ISYM_DSHIFTR,
342
  GFC_ISYM_DTIME,
343
  GFC_ISYM_EOSHIFT,
344
  GFC_ISYM_EPSILON,
345
  GFC_ISYM_ERF,
346
  GFC_ISYM_ERFC,
347
  GFC_ISYM_ERFC_SCALED,
348
  GFC_ISYM_ETIME,
349
  GFC_ISYM_EXECUTE_COMMAND_LINE,
350
  GFC_ISYM_EXIT,
351
  GFC_ISYM_EXP,
352
  GFC_ISYM_EXPONENT,
353
  GFC_ISYM_EXTENDS_TYPE_OF,
354
  GFC_ISYM_FDATE,
355
  GFC_ISYM_FGET,
356
  GFC_ISYM_FGETC,
357
  GFC_ISYM_FLOOR,
358
  GFC_ISYM_FLUSH,
359
  GFC_ISYM_FNUM,
360
  GFC_ISYM_FPUT,
361
  GFC_ISYM_FPUTC,
362
  GFC_ISYM_FRACTION,
363
  GFC_ISYM_FREE,
364
  GFC_ISYM_FSEEK,
365
  GFC_ISYM_FSTAT,
366
  GFC_ISYM_FTELL,
367
  GFC_ISYM_TGAMMA,
368
  GFC_ISYM_GERROR,
369
  GFC_ISYM_GETARG,
370
  GFC_ISYM_GET_COMMAND,
371
  GFC_ISYM_GET_COMMAND_ARGUMENT,
372
  GFC_ISYM_GETCWD,
373
  GFC_ISYM_GETENV,
374
  GFC_ISYM_GET_ENVIRONMENT_VARIABLE,
375
  GFC_ISYM_GETGID,
376
  GFC_ISYM_GETLOG,
377
  GFC_ISYM_GETPID,
378
  GFC_ISYM_GETUID,
379
  GFC_ISYM_GMTIME,
380
  GFC_ISYM_HOSTNM,
381
  GFC_ISYM_HUGE,
382
  GFC_ISYM_HYPOT,
383
  GFC_ISYM_IACHAR,
384
  GFC_ISYM_IALL,
385
  GFC_ISYM_IAND,
386
  GFC_ISYM_IANY,
387
  GFC_ISYM_IARGC,
388
  GFC_ISYM_IBCLR,
389
  GFC_ISYM_IBITS,
390
  GFC_ISYM_IBSET,
391
  GFC_ISYM_ICHAR,
392
  GFC_ISYM_IDATE,
393
  GFC_ISYM_IEOR,
394
  GFC_ISYM_IERRNO,
395
  GFC_ISYM_IMAGE_INDEX,
396
  GFC_ISYM_INDEX,
397
  GFC_ISYM_INT,
398
  GFC_ISYM_INT2,
399
  GFC_ISYM_INT8,
400
  GFC_ISYM_IOR,
401
  GFC_ISYM_IPARITY,
402
  GFC_ISYM_IRAND,
403
  GFC_ISYM_ISATTY,
404
  GFC_ISYM_IS_IOSTAT_END,
405
  GFC_ISYM_IS_IOSTAT_EOR,
406
  GFC_ISYM_ISNAN,
407
  GFC_ISYM_ISHFT,
408
  GFC_ISYM_ISHFTC,
409
  GFC_ISYM_ITIME,
410
  GFC_ISYM_J0,
411
  GFC_ISYM_J1,
412
  GFC_ISYM_JN,
413
  GFC_ISYM_JN2,
414
  GFC_ISYM_KILL,
415
  GFC_ISYM_KIND,
416
  GFC_ISYM_LBOUND,
417
  GFC_ISYM_LCOBOUND,
418
  GFC_ISYM_LEADZ,
419
  GFC_ISYM_LEN,
420
  GFC_ISYM_LEN_TRIM,
421
  GFC_ISYM_LGAMMA,
422
  GFC_ISYM_LGE,
423
  GFC_ISYM_LGT,
424
  GFC_ISYM_LINK,
425
  GFC_ISYM_LLE,
426
  GFC_ISYM_LLT,
427
  GFC_ISYM_LOC,
428
  GFC_ISYM_LOG,
429
  GFC_ISYM_LOG10,
430
  GFC_ISYM_LOGICAL,
431
  GFC_ISYM_LONG,
432
  GFC_ISYM_LSHIFT,
433
  GFC_ISYM_LSTAT,
434
  GFC_ISYM_LTIME,
435
  GFC_ISYM_MALLOC,
436
  GFC_ISYM_MASKL,
437
  GFC_ISYM_MASKR,
438
  GFC_ISYM_MATMUL,
439
  GFC_ISYM_MAX,
440
  GFC_ISYM_MAXEXPONENT,
441
  GFC_ISYM_MAXLOC,
442
  GFC_ISYM_MAXVAL,
443
  GFC_ISYM_MCLOCK,
444
  GFC_ISYM_MCLOCK8,
445
  GFC_ISYM_MERGE,
446
  GFC_ISYM_MERGE_BITS,
447
  GFC_ISYM_MIN,
448
  GFC_ISYM_MINEXPONENT,
449
  GFC_ISYM_MINLOC,
450
  GFC_ISYM_MINVAL,
451
  GFC_ISYM_MOD,
452
  GFC_ISYM_MODULO,
453
  GFC_ISYM_MOVE_ALLOC,
454
  GFC_ISYM_MVBITS,
455
  GFC_ISYM_NEAREST,
456
  GFC_ISYM_NEW_LINE,
457
  GFC_ISYM_NINT,
458
  GFC_ISYM_NORM2,
459
  GFC_ISYM_NOT,
460
  GFC_ISYM_NULL,
461
  GFC_ISYM_NUM_IMAGES,
462
  GFC_ISYM_OR,
463
  GFC_ISYM_PACK,
464
  GFC_ISYM_PARITY,
465
  GFC_ISYM_PERROR,
466
  GFC_ISYM_POPCNT,
467
  GFC_ISYM_POPPAR,
468
  GFC_ISYM_PRECISION,
469
  GFC_ISYM_PRESENT,
470
  GFC_ISYM_PRODUCT,
471
  GFC_ISYM_RADIX,
472
  GFC_ISYM_RAND,
473
  GFC_ISYM_RANDOM_NUMBER,
474
  GFC_ISYM_RANDOM_SEED,
475
  GFC_ISYM_RANGE,
476
  GFC_ISYM_RANK,
477
  GFC_ISYM_REAL,
478
  GFC_ISYM_RENAME,
479
  GFC_ISYM_REPEAT,
480
  GFC_ISYM_RESHAPE,
481
  GFC_ISYM_RRSPACING,
482
  GFC_ISYM_RSHIFT,
483
  GFC_ISYM_SAME_TYPE_AS,
484
  GFC_ISYM_SC_KIND,
485
  GFC_ISYM_SCALE,
486
  GFC_ISYM_SCAN,
487
  GFC_ISYM_SECNDS,
488
  GFC_ISYM_SECOND,
489
  GFC_ISYM_SET_EXPONENT,
490
  GFC_ISYM_SHAPE,
491
  GFC_ISYM_SHIFTA,
492
  GFC_ISYM_SHIFTL,
493
  GFC_ISYM_SHIFTR,
494
  GFC_ISYM_SIGN,
495
  GFC_ISYM_SIGNAL,
496
  GFC_ISYM_SI_KIND,
497
  GFC_ISYM_SIN,
498
  GFC_ISYM_SINH,
499
  GFC_ISYM_SIZE,
500
  GFC_ISYM_SLEEP,
501
  GFC_ISYM_SIZEOF,
502
  GFC_ISYM_SPACING,
503
  GFC_ISYM_SPREAD,
504
  GFC_ISYM_SQRT,
505
  GFC_ISYM_SRAND,
506
  GFC_ISYM_SR_KIND,
507
  GFC_ISYM_STAT,
508
  GFC_ISYM_STORAGE_SIZE,
509
  GFC_ISYM_SUM,
510
  GFC_ISYM_SYMLINK,
511
  GFC_ISYM_SYMLNK,
512
  GFC_ISYM_SYSTEM,
513
  GFC_ISYM_SYSTEM_CLOCK,
514
  GFC_ISYM_TAN,
515
  GFC_ISYM_TANH,
516
  GFC_ISYM_THIS_IMAGE,
517
  GFC_ISYM_TIME,
518
  GFC_ISYM_TIME8,
519
  GFC_ISYM_TINY,
520
  GFC_ISYM_TRAILZ,
521
  GFC_ISYM_TRANSFER,
522
  GFC_ISYM_TRANSPOSE,
523
  GFC_ISYM_TRIM,
524
  GFC_ISYM_TTYNAM,
525
  GFC_ISYM_UBOUND,
526
  GFC_ISYM_UCOBOUND,
527
  GFC_ISYM_UMASK,
528
  GFC_ISYM_UNLINK,
529
  GFC_ISYM_UNPACK,
530
  GFC_ISYM_VERIFY,
531
  GFC_ISYM_XOR,
532
  GFC_ISYM_Y0,
533
  GFC_ISYM_Y1,
534
  GFC_ISYM_YN,
535
  GFC_ISYM_YN2
536
};
537
typedef enum gfc_isym_id gfc_isym_id;
538
 
539
 
540
typedef enum
541
{
542
  GFC_INIT_REAL_OFF = 0,
543
  GFC_INIT_REAL_ZERO,
544
  GFC_INIT_REAL_NAN,
545
  GFC_INIT_REAL_SNAN,
546
  GFC_INIT_REAL_INF,
547
  GFC_INIT_REAL_NEG_INF
548
}
549
init_local_real;
550
 
551
typedef enum
552
{
553
  GFC_INIT_LOGICAL_OFF = 0,
554
  GFC_INIT_LOGICAL_FALSE,
555
  GFC_INIT_LOGICAL_TRUE
556
}
557
init_local_logical;
558
 
559
typedef enum
560
{
561
  GFC_INIT_CHARACTER_OFF = 0,
562
  GFC_INIT_CHARACTER_ON
563
}
564
init_local_character;
565
 
566
typedef enum
567
{
568
  GFC_INIT_INTEGER_OFF = 0,
569
  GFC_INIT_INTEGER_ON
570
}
571
init_local_integer;
572
 
573
typedef enum
574
{
575
  GFC_FCOARRAY_NONE = 0,
576
  GFC_FCOARRAY_SINGLE,
577
  GFC_FCOARRAY_LIB
578
}
579
gfc_fcoarray;
580
 
581
typedef enum
582
{
583
  GFC_ENABLE_REVERSE,
584
  GFC_FORWARD_SET,
585
  GFC_REVERSE_SET,
586
  GFC_INHIBIT_REVERSE
587
}
588
gfc_reverse;
589
 
590
/************************* Structures *****************************/
591
 
592
/* Used for keeping things in balanced binary trees.  */
593
#define BBT_HEADER(self) int priority; struct self *left, *right
594
 
595
#define NAMED_INTCST(a,b,c,d) a,
596
#define NAMED_KINDARRAY(a,b,c,d) a,
597
#define NAMED_FUNCTION(a,b,c,d) a,
598
#define NAMED_DERIVED_TYPE(a,b,c,d) a,
599
typedef enum
600
{
601
  ISOFORTRANENV_INVALID = -1,
602
#include "iso-fortran-env.def"
603
  ISOFORTRANENV_LAST, ISOFORTRANENV_NUMBER = ISOFORTRANENV_LAST
604
}
605
iso_fortran_env_symbol;
606
#undef NAMED_INTCST
607
#undef NAMED_KINDARRAY
608
#undef NAMED_FUNCTION
609
#undef NAMED_DERIVED_TYPE
610
 
611
#define NAMED_INTCST(a,b,c,d) a,
612
#define NAMED_REALCST(a,b,c,d) a,
613
#define NAMED_CMPXCST(a,b,c,d) a,
614
#define NAMED_LOGCST(a,b,c) a,
615
#define NAMED_CHARKNDCST(a,b,c) a,
616
#define NAMED_CHARCST(a,b,c) a,
617
#define DERIVED_TYPE(a,b,c) a,
618
#define PROCEDURE(a,b) a,
619
#define NAMED_FUNCTION(a,b,c,d) a,
620
typedef enum
621
{
622
  ISOCBINDING_INVALID = -1,
623
#include "iso-c-binding.def"
624
  ISOCBINDING_LAST,
625
  ISOCBINDING_NUMBER = ISOCBINDING_LAST
626
}
627
iso_c_binding_symbol;
628
#undef NAMED_INTCST
629
#undef NAMED_REALCST
630
#undef NAMED_CMPXCST
631
#undef NAMED_LOGCST
632
#undef NAMED_CHARKNDCST
633
#undef NAMED_CHARCST
634
#undef DERIVED_TYPE
635
#undef PROCEDURE
636
#undef NAMED_FUNCTION
637
 
638
typedef enum
639
{
640
  INTMOD_NONE = 0, INTMOD_ISO_FORTRAN_ENV, INTMOD_ISO_C_BINDING
641
}
642
intmod_id;
643
 
644
typedef struct
645
{
646
  char name[GFC_MAX_SYMBOL_LEN + 1];
647
  int value;  /* Used for both integer and character values.  */
648
  bt f90_type;
649
}
650
CInteropKind_t;
651
 
652
/* Array of structs, where the structs represent the C interop kinds.
653
   The list will be implemented based on a hash of the kind name since
654
   these could be accessed multiple times.
655
   Declared in trans-types.c as a global, since it's in that file
656
   that the list is initialized.  */
657
extern CInteropKind_t c_interop_kinds_table[];
658
 
659
 
660
/* Structure and list of supported extension attributes.  */
661
typedef enum
662
{
663
  EXT_ATTR_DLLIMPORT = 0,
664
  EXT_ATTR_DLLEXPORT,
665
  EXT_ATTR_STDCALL,
666
  EXT_ATTR_CDECL,
667
  EXT_ATTR_FASTCALL,
668
  EXT_ATTR_LAST, EXT_ATTR_NUM = EXT_ATTR_LAST
669
}
670
ext_attr_id_t;
671
 
672
typedef struct
673
{
674
  const char *name;
675
  unsigned id;
676
  const char *middle_end_name;
677
}
678
ext_attr_t;
679
 
680
extern const ext_attr_t ext_attr_list[];
681
 
682
/* Symbol attribute structure.  */
683
typedef struct
684
{
685
  /* Variable attributes.  */
686
  unsigned allocatable:1, dimension:1, codimension:1, external:1, intrinsic:1,
687
    optional:1, pointer:1, target:1, value:1, volatile_:1, temporary:1,
688
    dummy:1, result:1, assign:1, threadprivate:1, not_always_present:1,
689
    implied_index:1, subref_array_pointer:1, proc_pointer:1, asynchronous:1,
690
    contiguous:1;
691
 
692
  /* For CLASS containers, the pointer attribute is sometimes set internally
693
     even though it was not directly specified.  In this case, keep the
694
     "real" (original) value here.  */
695
  unsigned class_pointer:1;
696
 
697
  ENUM_BITFIELD (save_state) save:2;
698
 
699
  unsigned data:1,              /* Symbol is named in a DATA statement.  */
700
    is_protected:1,             /* Symbol has been marked as protected.  */
701
    use_assoc:1,                /* Symbol has been use-associated.  */
702
    use_only:1,                 /* Symbol has been use-associated, with ONLY.  */
703
    use_rename:1,               /* Symbol has been use-associated and renamed.  */
704
    imported:1,                 /* Symbol has been associated by IMPORT.  */
705
    host_assoc:1;               /* Symbol has been host associated.  */
706
 
707
  unsigned in_namelist:1, in_common:1, in_equivalence:1;
708
  unsigned function:1, subroutine:1, procedure:1;
709
  unsigned generic:1, generic_copy:1;
710
  unsigned implicit_type:1;     /* Type defined via implicit rules.  */
711
  unsigned untyped:1;           /* No implicit type could be found.  */
712
 
713
  unsigned is_bind_c:1;         /* say if is bound to C.  */
714
  unsigned extension:8;         /* extension level of a derived type.  */
715
  unsigned is_class:1;          /* is a CLASS container.  */
716
  unsigned class_ok:1;          /* is a CLASS object with correct attributes.  */
717
  unsigned vtab:1;              /* is a derived type vtab, pointed to by CLASS objects.  */
718
  unsigned vtype:1;             /* is a derived type of a vtab.  */
719
 
720
  /* These flags are both in the typespec and attribute.  The attribute
721
     list is what gets read from/written to a module file.  The typespec
722
     is created from a decl being processed.  */
723
  unsigned is_c_interop:1;      /* It's c interoperable.  */
724
  unsigned is_iso_c:1;          /* Symbol is from iso_c_binding.  */
725
 
726
  /* Function/subroutine attributes */
727
  unsigned sequence:1, elemental:1, pure:1, recursive:1;
728
  unsigned unmaskable:1, masked:1, contained:1, mod_proc:1, abstract:1;
729
 
730
  /* This is set if a contained procedure could be declared pure.  This is
731
     used for certain optimizations that require the result or arguments
732
     cannot alias.  Note that this is zero for PURE procedures.  */
733
  unsigned implicit_pure:1;
734
 
735
  /* This is set if the subroutine doesn't return.  Currently, this
736
     is only possible for intrinsic subroutines.  */
737
  unsigned noreturn:1;
738
 
739
  /* Set if this procedure is an alternate entry point.  These procedures
740
     don't have any code associated, and the backend will turn them into
741
     thunks to the master function.  */
742
  unsigned entry:1;
743
 
744
  /* Set if this is the master function for a procedure with multiple
745
     entry points.  */
746
  unsigned entry_master:1;
747
 
748
  /* Set if this is the master function for a function with multiple
749
     entry points where characteristics of the entry points differ.  */
750
  unsigned mixed_entry_master:1;
751
 
752
  /* Set if a function must always be referenced by an explicit interface.  */
753
  unsigned always_explicit:1;
754
 
755
  /* Set if the symbol has been referenced in an expression.  No further
756
     modification of type or type parameters is permitted.  */
757
  unsigned referenced:1;
758
 
759
  /* Set if this is the symbol for the main program.  */
760
  unsigned is_main_program:1;
761
 
762
  /* Mutually exclusive multibit attributes.  */
763
  ENUM_BITFIELD (gfc_access) access:2;
764
  ENUM_BITFIELD (sym_intent) intent:2;
765
  ENUM_BITFIELD (sym_flavor) flavor:4;
766
  ENUM_BITFIELD (ifsrc) if_source:2;
767
 
768
  ENUM_BITFIELD (procedure_type) proc:3;
769
 
770
  /* Special attributes for Cray pointers, pointees.  */
771
  unsigned cray_pointer:1, cray_pointee:1;
772
 
773
  /* The symbol is a derived type with allocatable components, pointer
774
     components or private components, procedure pointer components,
775
     possibly nested.  zero_comp is true if the derived type has no
776
     component at all.  */
777
  unsigned alloc_comp:1, pointer_comp:1, proc_pointer_comp:1,
778
           private_comp:1, zero_comp:1, coarray_comp:1, lock_comp:1;
779
 
780
  /* This is a temporary selector for SELECT TYPE.  */
781
  unsigned select_type_temporary:1;
782
 
783
  /* Attributes set by compiler extensions (!GCC$ ATTRIBUTES).  */
784
  unsigned ext_attr:EXT_ATTR_NUM;
785
 
786
  /* The namespace where the attribute has been set.  */
787
  struct gfc_namespace *volatile_ns, *asynchronous_ns;
788
}
789
symbol_attribute;
790
 
791
 
792
/* We need to store source lines as sequences of multibyte source
793
   characters. We define here a type wide enough to hold any multibyte
794
   source character, just like libcpp does.  A 32-bit type is enough.  */
795
 
796
#if HOST_BITS_PER_INT >= 32
797
typedef unsigned int gfc_char_t;
798
#elif HOST_BITS_PER_LONG >= 32
799
typedef unsigned long gfc_char_t;
800
#elif defined(HAVE_LONG_LONG) && (HOST_BITS_PER_LONGLONG >= 32)
801
typedef unsigned long long gfc_char_t;
802
#else
803
# error "Cannot find an integer type with at least 32 bits"
804
#endif
805
 
806
 
807
/* The following three structures are used to identify a location in
808
   the sources.
809
 
810
   gfc_file is used to maintain a tree of the source files and how
811
   they include each other
812
 
813
   gfc_linebuf holds a single line of source code and information
814
   which file it resides in
815
 
816
   locus point to the sourceline and the character in the source
817
   line.
818
*/
819
 
820
typedef struct gfc_file
821
{
822
  struct gfc_file *next, *up;
823
  int inclusion_line, line;
824
  char *filename;
825
} gfc_file;
826
 
827
typedef struct gfc_linebuf
828
{
829
  source_location location;
830
  struct gfc_file *file;
831
  struct gfc_linebuf *next;
832
 
833
  int truncated;
834
  bool dbg_emitted;
835
 
836
  gfc_char_t line[1];
837
} gfc_linebuf;
838
 
839
#define gfc_linebuf_header_size (offsetof (gfc_linebuf, line))
840
 
841
#define gfc_linebuf_linenum(LBUF) (LOCATION_LINE ((LBUF)->location))
842
 
843
typedef struct
844
{
845
  gfc_char_t *nextc;
846
  gfc_linebuf *lb;
847
} locus;
848
 
849
/* In order for the "gfc" format checking to work correctly, you must
850
   have declared a typedef locus first.  */
851
#if GCC_VERSION >= 4001
852
#define ATTRIBUTE_GCC_GFC(m, n) __attribute__ ((__format__ (__gcc_gfc__, m, n))) ATTRIBUTE_NONNULL(m)
853
#else
854
#define ATTRIBUTE_GCC_GFC(m, n) ATTRIBUTE_NONNULL(m)
855
#endif
856
 
857
 
858
/* Suppress error messages or re-enable them.  */
859
 
860
void gfc_push_suppress_errors (void);
861
void gfc_pop_suppress_errors (void);
862
 
863
 
864
/* Character length structures hold the expression that gives the
865
   length of a character variable.  We avoid putting these into
866
   gfc_typespec because doing so prevents us from doing structure
867
   copies and forces us to deallocate any typespecs we create, as well
868
   as structures that contain typespecs.  They also can have multiple
869
   character typespecs pointing to them.
870
 
871
   These structures form a singly linked list within the current
872
   namespace and are deallocated with the namespace.  It is possible to
873
   end up with gfc_charlen structures that have nothing pointing to them.  */
874
 
875
typedef struct gfc_charlen
876
{
877
  struct gfc_expr *length;
878
  struct gfc_charlen *next;
879
  bool length_from_typespec; /* Length from explicit array ctor typespec?  */
880
  tree backend_decl;
881
  tree passed_length; /* Length argument explicitly passed.  */
882
 
883
  int resolved;
884
}
885
gfc_charlen;
886
 
887
#define gfc_get_charlen() XCNEW (gfc_charlen)
888
 
889
/* Type specification structure.  */
890
typedef struct
891
{
892
  bt type;
893
  int kind;
894
 
895
  union
896
  {
897
    struct gfc_symbol *derived; /* For derived types only.  */
898
    gfc_charlen *cl;            /* For character types only.  */
899
    int pad;                    /* For hollerith types only.  */
900
  }
901
  u;
902
 
903
  struct gfc_symbol *interface; /* For PROCEDURE declarations.  */
904
  int is_c_interop;
905
  int is_iso_c;
906
  bt f90_type;
907
  bool deferred;
908
}
909
gfc_typespec;
910
 
911
/* Array specification.  */
912
typedef struct
913
{
914
  int rank;     /* A rank of zero means that a variable is a scalar.  */
915
  int corank;
916
  array_type type, cotype;
917
  struct gfc_expr *lower[GFC_MAX_DIMENSIONS], *upper[GFC_MAX_DIMENSIONS];
918
 
919
  /* These two fields are used with the Cray Pointer extension.  */
920
  bool cray_pointee; /* True iff this spec belongs to a cray pointee.  */
921
  bool cp_was_assumed; /* AS_ASSUMED_SIZE cp arrays are converted to
922
                        AS_EXPLICIT, but we want to remember that we
923
                        did this.  */
924
 
925
}
926
gfc_array_spec;
927
 
928
#define gfc_get_array_spec() XCNEW (gfc_array_spec)
929
 
930
 
931
/* Components of derived types.  */
932
typedef struct gfc_component
933
{
934
  const char *name;
935
  gfc_typespec ts;
936
 
937
  symbol_attribute attr;
938
  gfc_array_spec *as;
939
 
940
  tree backend_decl;
941
  /* Used to cache a FIELD_DECL matching this same component
942
     but applied to a different backend containing type that was
943
     generated by gfc_nonrestricted_type.  */
944
  tree norestrict_decl;
945
  locus loc;
946
  struct gfc_expr *initializer;
947
  struct gfc_component *next;
948
 
949
  /* Needed for procedure pointer components.  */
950
  struct gfc_formal_arglist *formal;
951
  struct gfc_namespace *formal_ns;
952
  struct gfc_typebound_proc *tb;
953
}
954
gfc_component;
955
 
956
#define gfc_get_component() XCNEW (gfc_component)
957
 
958
/* Formal argument lists are lists of symbols.  */
959
typedef struct gfc_formal_arglist
960
{
961
  /* Symbol representing the argument at this position in the arglist.  */
962
  struct gfc_symbol *sym;
963
  /* Points to the next formal argument.  */
964
  struct gfc_formal_arglist *next;
965
}
966
gfc_formal_arglist;
967
 
968
#define gfc_get_formal_arglist() XCNEW (gfc_formal_arglist)
969
 
970
 
971
/* The gfc_actual_arglist structure is for actual arguments.  */
972
typedef struct gfc_actual_arglist
973
{
974
  const char *name;
975
  /* Alternate return label when the expr member is null.  */
976
  struct gfc_st_label *label;
977
 
978
  /* This is set to the type of an eventual omitted optional
979
     argument. This is used to determine if a hidden string length
980
     argument has to be added to a function call.  */
981
  bt missing_arg_type;
982
 
983
  struct gfc_expr *expr;
984
  struct gfc_actual_arglist *next;
985
}
986
gfc_actual_arglist;
987
 
988
#define gfc_get_actual_arglist() XCNEW (gfc_actual_arglist)
989
 
990
 
991
/* Because a symbol can belong to multiple namelists, they must be
992
   linked externally to the symbol itself.  */
993
typedef struct gfc_namelist
994
{
995
  struct gfc_symbol *sym;
996
  struct gfc_namelist *next;
997
}
998
gfc_namelist;
999
 
1000
#define gfc_get_namelist() XCNEW (gfc_namelist)
1001
 
1002
enum
1003
{
1004
  OMP_LIST_PRIVATE,
1005
  OMP_LIST_FIRSTPRIVATE,
1006
  OMP_LIST_LASTPRIVATE,
1007
  OMP_LIST_COPYPRIVATE,
1008
  OMP_LIST_SHARED,
1009
  OMP_LIST_COPYIN,
1010
  OMP_LIST_PLUS,
1011
  OMP_LIST_REDUCTION_FIRST = OMP_LIST_PLUS,
1012
  OMP_LIST_MULT,
1013
  OMP_LIST_SUB,
1014
  OMP_LIST_AND,
1015
  OMP_LIST_OR,
1016
  OMP_LIST_EQV,
1017
  OMP_LIST_NEQV,
1018
  OMP_LIST_MAX,
1019
  OMP_LIST_MIN,
1020
  OMP_LIST_IAND,
1021
  OMP_LIST_IOR,
1022
  OMP_LIST_IEOR,
1023
  OMP_LIST_REDUCTION_LAST = OMP_LIST_IEOR,
1024
  OMP_LIST_NUM
1025
};
1026
 
1027
/* Because a symbol can belong to multiple namelists, they must be
1028
   linked externally to the symbol itself.  */
1029
 
1030
enum gfc_omp_sched_kind
1031
{
1032
  OMP_SCHED_NONE,
1033
  OMP_SCHED_STATIC,
1034
  OMP_SCHED_DYNAMIC,
1035
  OMP_SCHED_GUIDED,
1036
  OMP_SCHED_RUNTIME,
1037
  OMP_SCHED_AUTO
1038
};
1039
 
1040
enum gfc_omp_default_sharing
1041
{
1042
  OMP_DEFAULT_UNKNOWN,
1043
  OMP_DEFAULT_NONE,
1044
  OMP_DEFAULT_PRIVATE,
1045
  OMP_DEFAULT_SHARED,
1046
  OMP_DEFAULT_FIRSTPRIVATE
1047
};
1048
 
1049
typedef struct gfc_omp_clauses
1050
{
1051
  struct gfc_expr *if_expr;
1052
  struct gfc_expr *final_expr;
1053
  struct gfc_expr *num_threads;
1054
  gfc_namelist *lists[OMP_LIST_NUM];
1055
  enum gfc_omp_sched_kind sched_kind;
1056
  struct gfc_expr *chunk_size;
1057
  enum gfc_omp_default_sharing default_sharing;
1058
  int collapse;
1059
  bool nowait, ordered, untied, mergeable;
1060
}
1061
gfc_omp_clauses;
1062
 
1063
#define gfc_get_omp_clauses() XCNEW (gfc_omp_clauses)
1064
 
1065
 
1066
/* The gfc_st_label structure is a BBT attached to a namespace that
1067
   records the usage of statement labels within that space.  */
1068
 
1069
typedef struct gfc_st_label
1070
{
1071
  BBT_HEADER(gfc_st_label);
1072
 
1073
  int value;
1074
 
1075
  gfc_sl_type defined, referenced;
1076
 
1077
  struct gfc_expr *format;
1078
 
1079
  tree backend_decl;
1080
 
1081
  locus where;
1082
}
1083
gfc_st_label;
1084
 
1085
 
1086
/* gfc_interface()-- Interfaces are lists of symbols strung together.  */
1087
typedef struct gfc_interface
1088
{
1089
  struct gfc_symbol *sym;
1090
  locus where;
1091
  struct gfc_interface *next;
1092
}
1093
gfc_interface;
1094
 
1095
#define gfc_get_interface() XCNEW (gfc_interface)
1096
 
1097
/* User operator nodes.  These are like stripped down symbols.  */
1098
typedef struct
1099
{
1100
  const char *name;
1101
 
1102
  gfc_interface *op;
1103
  struct gfc_namespace *ns;
1104
  gfc_access access;
1105
}
1106
gfc_user_op;
1107
 
1108
 
1109
/* A list of specific bindings that are associated with a generic spec.  */
1110
typedef struct gfc_tbp_generic
1111
{
1112
  /* The parser sets specific_st, upon resolution we look for the corresponding
1113
     gfc_typebound_proc and set specific for further use.  */
1114
  struct gfc_symtree* specific_st;
1115
  struct gfc_typebound_proc* specific;
1116
 
1117
  struct gfc_tbp_generic* next;
1118
  bool is_operator;
1119
}
1120
gfc_tbp_generic;
1121
 
1122
#define gfc_get_tbp_generic() XCNEW (gfc_tbp_generic)
1123
 
1124
 
1125
/* Data needed for type-bound procedures.  */
1126
typedef struct gfc_typebound_proc
1127
{
1128
  locus where; /* Where the PROCEDURE/GENERIC definition was.  */
1129
 
1130
  union
1131
  {
1132
    struct gfc_symtree* specific; /* The interface if DEFERRED.  */
1133
    gfc_tbp_generic* generic;
1134
  }
1135
  u;
1136
 
1137
  gfc_access access;
1138
  const char* pass_arg; /* Argument-name for PASS.  NULL if not specified.  */
1139
 
1140
  /* The overridden type-bound proc (or GENERIC with this name in the
1141
     parent-type) or NULL if non.  */
1142
  struct gfc_typebound_proc* overridden;
1143
 
1144
  /* Once resolved, we use the position of pass_arg in the formal arglist of
1145
     the binding-target procedure to identify it.  The first argument has
1146
     number 1 here, the second 2, and so on.  */
1147
  unsigned pass_arg_num;
1148
 
1149
  unsigned nopass:1; /* Whether we have NOPASS (PASS otherwise).  */
1150
  unsigned non_overridable:1;
1151
  unsigned deferred:1;
1152
  unsigned is_generic:1;
1153
  unsigned function:1, subroutine:1;
1154
  unsigned error:1; /* Ignore it, when an error occurred during resolution.  */
1155
  unsigned ppc:1;
1156
}
1157
gfc_typebound_proc;
1158
 
1159
 
1160
/* Symbol nodes.  These are important things.  They are what the
1161
   standard refers to as "entities".  The possibly multiple names that
1162
   refer to the same entity are accomplished by a binary tree of
1163
   symtree structures that is balanced by the red-black method-- more
1164
   than one symtree node can point to any given symbol.  */
1165
 
1166
typedef struct gfc_symbol
1167
{
1168
  const char *name;     /* Primary name, before renaming */
1169
  const char *module;   /* Module this symbol came from */
1170
  locus declared_at;
1171
 
1172
  gfc_typespec ts;
1173
  symbol_attribute attr;
1174
 
1175
  /* The formal member points to the formal argument list if the
1176
     symbol is a function or subroutine name.  If the symbol is a
1177
     generic name, the generic member points to the list of
1178
     interfaces.  */
1179
 
1180
  gfc_interface *generic;
1181
  gfc_access component_access;
1182
 
1183
  gfc_formal_arglist *formal;
1184
  struct gfc_namespace *formal_ns;
1185
  struct gfc_namespace *f2k_derived;
1186
 
1187
  struct gfc_expr *value;       /* Parameter/Initializer value */
1188
  gfc_array_spec *as;
1189
  struct gfc_symbol *result;    /* function result symbol */
1190
  gfc_component *components;    /* Derived type components */
1191
 
1192
  /* Defined only for Cray pointees; points to their pointer.  */
1193
  struct gfc_symbol *cp_pointer;
1194
 
1195
  int entry_id;                 /* Used in resolve.c for entries.  */
1196
 
1197
  /* CLASS hashed name for declared and dynamic types in the class.  */
1198
  int hash_value;
1199
 
1200
  struct gfc_symbol *common_next;       /* Links for COMMON syms */
1201
 
1202
  /* This is in fact a gfc_common_head but it is only used for pointer
1203
     comparisons to check if symbols are in the same common block.  */
1204
  struct gfc_common_head* common_head;
1205
 
1206
  /* Make sure setup code for dummy arguments is generated in the correct
1207
     order.  */
1208
  int dummy_order;
1209
 
1210
  gfc_namelist *namelist, *namelist_tail;
1211
 
1212
  /* Change management fields.  Symbols that might be modified by the
1213
     current statement have the mark member nonzero and are kept in a
1214
     singly linked list through the tlink field.  Of these symbols,
1215
     symbols with old_symbol equal to NULL are symbols created within
1216
     the current statement.  Otherwise, old_symbol points to a copy of
1217
     the old symbol.  */
1218
 
1219
  struct gfc_symbol *old_symbol, *tlink;
1220
  unsigned mark:1, gfc_new:1;
1221
  /* Nonzero if all equivalences associated with this symbol have been
1222
     processed.  */
1223
  unsigned equiv_built:1;
1224
  /* Set if this variable is used as an index name in a FORALL.  */
1225
  unsigned forall_index:1;
1226
  int refs;
1227
  struct gfc_namespace *ns;     /* namespace containing this symbol */
1228
 
1229
  tree backend_decl;
1230
 
1231
  /* Identity of the intrinsic module the symbol comes from, or
1232
     INTMOD_NONE if it's not imported from a intrinsic module.  */
1233
  intmod_id from_intmod;
1234
  /* Identity of the symbol from intrinsic modules, from enums maintained
1235
     separately by each intrinsic module.  Used together with from_intmod,
1236
     it uniquely identifies a symbol from an intrinsic module.  */
1237
  int intmod_sym_id;
1238
 
1239
  /* This may be repetitive, since the typespec now has a binding
1240
     label field.  */
1241
  const char* binding_label;
1242
  /* Store a reference to the common_block, if this symbol is in one.  */
1243
  struct gfc_common_head *common_block;
1244
 
1245
  /* Link to corresponding association-list if this is an associate name.  */
1246
  struct gfc_association_list *assoc;
1247
}
1248
gfc_symbol;
1249
 
1250
 
1251
/* This structure is used to keep track of symbols in common blocks.  */
1252
typedef struct gfc_common_head
1253
{
1254
  locus where;
1255
  char use_assoc, saved, threadprivate;
1256
  char name[GFC_MAX_SYMBOL_LEN + 1];
1257
  struct gfc_symbol *head;
1258
  const char* binding_label;
1259
  int is_bind_c;
1260
}
1261
gfc_common_head;
1262
 
1263
#define gfc_get_common_head() XCNEW (gfc_common_head)
1264
 
1265
 
1266
/* A list of all the alternate entry points for a procedure.  */
1267
 
1268
typedef struct gfc_entry_list
1269
{
1270
  /* The symbol for this entry point.  */
1271
  gfc_symbol *sym;
1272
  /* The zero-based id of this entry point.  */
1273
  int id;
1274
  /* The LABEL_EXPR marking this entry point.  */
1275
  tree label;
1276
  /* The next item in the list.  */
1277
  struct gfc_entry_list *next;
1278
}
1279
gfc_entry_list;
1280
 
1281
#define gfc_get_entry_list() XCNEW (gfc_entry_list)
1282
 
1283
/* Lists of rename info for the USE statement.  */
1284
 
1285
typedef struct gfc_use_rename
1286
{
1287
  char local_name[GFC_MAX_SYMBOL_LEN + 1], use_name[GFC_MAX_SYMBOL_LEN + 1];
1288
  struct gfc_use_rename *next;
1289
  int found;
1290
  gfc_intrinsic_op op;
1291
  locus where;
1292
}
1293
gfc_use_rename;
1294
 
1295
#define gfc_get_use_rename() XCNEW (gfc_use_rename);
1296
 
1297
/* A list of all USE statements in a namespace.  */
1298
 
1299
typedef struct gfc_use_list
1300
{
1301
  const char *module_name;
1302
  bool intrinsic;
1303
  bool non_intrinsic;
1304
  bool only_flag;
1305
  struct gfc_use_rename *rename;
1306
  locus where;
1307
  /* Next USE statement.  */
1308
  struct gfc_use_list *next;
1309
}
1310
gfc_use_list;
1311
 
1312
#define gfc_get_use_list() XCNEW (gfc_use_list)
1313
 
1314
/* Within a namespace, symbols are pointed to by symtree nodes that
1315
   are linked together in a balanced binary tree.  There can be
1316
   several symtrees pointing to the same symbol node via USE
1317
   statements.  */
1318
 
1319
typedef struct gfc_symtree
1320
{
1321
  BBT_HEADER (gfc_symtree);
1322
  const char *name;
1323
  int ambiguous;
1324
  union
1325
  {
1326
    gfc_symbol *sym;            /* Symbol associated with this node */
1327
    gfc_user_op *uop;
1328
    gfc_common_head *common;
1329
    gfc_typebound_proc *tb;
1330
  }
1331
  n;
1332
}
1333
gfc_symtree;
1334
 
1335
/* A linked list of derived types in the namespace.  */
1336
typedef struct gfc_dt_list
1337
{
1338
  struct gfc_symbol *derived;
1339
  struct gfc_dt_list *next;
1340
}
1341
gfc_dt_list;
1342
 
1343
#define gfc_get_dt_list() XCNEW (gfc_dt_list)
1344
 
1345
  /* A list of all derived types.  */
1346
  extern gfc_dt_list *gfc_derived_types;
1347
 
1348
/* A namespace describes the contents of procedure, module, interface block
1349
   or BLOCK construct.  */
1350
/* ??? Anything else use these?  */
1351
 
1352
typedef struct gfc_namespace
1353
{
1354
  /* Tree containing all the symbols in this namespace.  */
1355
  gfc_symtree *sym_root;
1356
  /* Tree containing all the user-defined operators in the namespace.  */
1357
  gfc_symtree *uop_root;
1358
  /* Tree containing all the common blocks.  */
1359
  gfc_symtree *common_root;
1360
 
1361
  /* Tree containing type-bound procedures.  */
1362
  gfc_symtree *tb_sym_root;
1363
  /* Type-bound user operators.  */
1364
  gfc_symtree *tb_uop_root;
1365
  /* For derived-types, store type-bound intrinsic operators here.  */
1366
  gfc_typebound_proc *tb_op[GFC_INTRINSIC_OPS];
1367
  /* Linked list of finalizer procedures.  */
1368
  struct gfc_finalizer *finalizers;
1369
 
1370
  /* If set_flag[letter] is set, an implicit type has been set for letter.  */
1371
  int set_flag[GFC_LETTERS];
1372
  /* Keeps track of the implicit types associated with the letters.  */
1373
  gfc_typespec default_type[GFC_LETTERS];
1374
  /* Store the positions of IMPLICIT statements.  */
1375
  locus implicit_loc[GFC_LETTERS];
1376
 
1377
  /* If this is a namespace of a procedure, this points to the procedure.  */
1378
  struct gfc_symbol *proc_name;
1379
  /* If this is the namespace of a unit which contains executable
1380
     code, this points to it.  */
1381
  struct gfc_code *code;
1382
 
1383
  /* Points to the equivalences set up in this namespace.  */
1384
  struct gfc_equiv *equiv, *old_equiv;
1385
 
1386
  /* Points to the equivalence groups produced by trans_common.  */
1387
  struct gfc_equiv_list *equiv_lists;
1388
 
1389
  gfc_interface *op[GFC_INTRINSIC_OPS];
1390
 
1391
  /* Points to the parent namespace, i.e. the namespace of a module or
1392
     procedure in which the procedure belonging to this namespace is
1393
     contained. The parent namespace points to this namespace either
1394
     directly via CONTAINED, or indirectly via the chain built by
1395
     SIBLING.  */
1396
  struct gfc_namespace *parent;
1397
  /* CONTAINED points to the first contained namespace. Sibling
1398
     namespaces are chained via SIBLING.  */
1399
  struct gfc_namespace  *contained, *sibling;
1400
 
1401
  gfc_common_head blank_common;
1402
  gfc_access default_access, operator_access[GFC_INTRINSIC_OPS];
1403
 
1404
  gfc_st_label *st_labels;
1405
  /* This list holds information about all the data initializers in
1406
     this namespace.  */
1407
  struct gfc_data *data;
1408
 
1409
  gfc_charlen *cl_list, *old_cl_list;
1410
 
1411
  gfc_dt_list *derived_types;
1412
 
1413
  int save_all, seen_save, seen_implicit_none;
1414
 
1415
  /* Normally we don't need to refcount namespaces.  However when we read
1416
     a module containing a function with multiple entry points, this
1417
     will appear as several functions with the same formal namespace.  */
1418
  int refs;
1419
 
1420
  /* A list of all alternate entry points to this procedure (or NULL).  */
1421
  gfc_entry_list *entries;
1422
 
1423
  /* A list of USE statements in this namespace.  */
1424
  gfc_use_list *use_stmts;
1425
 
1426
  /* Set to 1 if namespace is a BLOCK DATA program unit.  */
1427
  unsigned is_block_data:1;
1428
 
1429
  /* Set to 1 if namespace is an interface body with "IMPORT" used.  */
1430
  unsigned has_import_set:1;
1431
 
1432
  /* Set to 1 if resolved has been called for this namespace.
1433
     Holds -1 during resolution.  */
1434
  signed resolved:2;
1435
 
1436
  /* Set to 1 if code has been generated for this namespace.  */
1437
  unsigned translated:1;
1438
 
1439
  /* Set to 1 if symbols in this namespace should be 'construct entities',
1440
     i.e. for BLOCK local variables.  */
1441
  unsigned construct_entities:1;
1442
}
1443
gfc_namespace;
1444
 
1445
extern gfc_namespace *gfc_current_ns;
1446
extern gfc_namespace *gfc_global_ns_list;
1447
 
1448
/* Global symbols are symbols of global scope. Currently we only use
1449
   this to detect collisions already when parsing.
1450
   TODO: Extend to verify procedure calls.  */
1451
 
1452
enum gfc_symbol_type
1453
{
1454
  GSYM_UNKNOWN=1, GSYM_PROGRAM, GSYM_FUNCTION, GSYM_SUBROUTINE,
1455
  GSYM_MODULE, GSYM_COMMON, GSYM_BLOCK_DATA
1456
};
1457
 
1458
typedef struct gfc_gsymbol
1459
{
1460
  BBT_HEADER(gfc_gsymbol);
1461
 
1462
  const char *name;
1463
  const char *sym_name;
1464
  const char *mod_name;
1465
  const char *binding_label;
1466
  enum gfc_symbol_type type;
1467
 
1468
  int defined, used;
1469
  locus where;
1470
  gfc_namespace *ns;
1471
}
1472
gfc_gsymbol;
1473
 
1474
extern gfc_gsymbol *gfc_gsym_root;
1475
 
1476
/* Information on interfaces being built.  */
1477
typedef struct
1478
{
1479
  interface_type type;
1480
  gfc_symbol *sym;
1481
  gfc_namespace *ns;
1482
  gfc_user_op *uop;
1483
  gfc_intrinsic_op op;
1484
}
1485
gfc_interface_info;
1486
 
1487
extern gfc_interface_info current_interface;
1488
 
1489
 
1490
/* Array reference.  */
1491
 
1492
enum gfc_array_ref_dimen_type
1493
{
1494
  DIMEN_ELEMENT = 1, DIMEN_RANGE, DIMEN_VECTOR, DIMEN_STAR, DIMEN_THIS_IMAGE, DIMEN_UNKNOWN
1495
};
1496
 
1497
typedef struct gfc_array_ref
1498
{
1499
  ar_type type;
1500
  int dimen;                    /* # of components in the reference */
1501
  int codimen;
1502
  bool in_allocate;             /* For coarray checks. */
1503
  locus where;
1504
  gfc_array_spec *as;
1505
 
1506
  locus c_where[GFC_MAX_DIMENSIONS];    /* All expressions can be NULL */
1507
  struct gfc_expr *start[GFC_MAX_DIMENSIONS], *end[GFC_MAX_DIMENSIONS],
1508
    *stride[GFC_MAX_DIMENSIONS];
1509
 
1510
  enum gfc_array_ref_dimen_type dimen_type[GFC_MAX_DIMENSIONS];
1511
 
1512
  struct gfc_expr *offset;
1513
}
1514
gfc_array_ref;
1515
 
1516
#define gfc_get_array_ref() XCNEW (gfc_array_ref)
1517
 
1518
 
1519
/* Component reference nodes.  A variable is stored as an expression
1520
   node that points to the base symbol.  After that, a singly linked
1521
   list of component reference nodes gives the variable's complete
1522
   resolution.  The array_ref component may be present and comes
1523
   before the component component.  */
1524
 
1525
typedef enum
1526
  { REF_ARRAY, REF_COMPONENT, REF_SUBSTRING }
1527
ref_type;
1528
 
1529
typedef struct gfc_ref
1530
{
1531
  ref_type type;
1532
 
1533
  union
1534
  {
1535
    struct gfc_array_ref ar;
1536
 
1537
    struct
1538
    {
1539
      gfc_component *component;
1540
      gfc_symbol *sym;
1541
    }
1542
    c;
1543
 
1544
    struct
1545
    {
1546
      struct gfc_expr *start, *end;     /* Substring */
1547
      gfc_charlen *length;
1548
    }
1549
    ss;
1550
 
1551
  }
1552
  u;
1553
 
1554
  struct gfc_ref *next;
1555
}
1556
gfc_ref;
1557
 
1558
#define gfc_get_ref() XCNEW (gfc_ref)
1559
 
1560
 
1561
/* Structures representing intrinsic symbols and their arguments lists.  */
1562
typedef struct gfc_intrinsic_arg
1563
{
1564
  char name[GFC_MAX_SYMBOL_LEN + 1];
1565
 
1566
  gfc_typespec ts;
1567
  unsigned optional:1, value:1;
1568
  ENUM_BITFIELD (sym_intent) intent:2;
1569
  gfc_actual_arglist *actual;
1570
 
1571
  struct gfc_intrinsic_arg *next;
1572
 
1573
}
1574
gfc_intrinsic_arg;
1575
 
1576
 
1577
/* Specifies the various kinds of check functions used to verify the
1578
   argument lists of intrinsic functions. fX with X an integer refer
1579
   to check functions of intrinsics with X arguments. f1m is used for
1580
   the MAX and MIN intrinsics which can have an arbitrary number of
1581
   arguments, f3ml is used for the MINLOC and MAXLOC intrinsics as
1582
   these have special semantics.  */
1583
 
1584
typedef union
1585
{
1586
  gfc_try (*f0)(void);
1587
  gfc_try (*f1)(struct gfc_expr *);
1588
  gfc_try (*f1m)(gfc_actual_arglist *);
1589
  gfc_try (*f2)(struct gfc_expr *, struct gfc_expr *);
1590
  gfc_try (*f3)(struct gfc_expr *, struct gfc_expr *, struct gfc_expr *);
1591
  gfc_try (*f3ml)(gfc_actual_arglist *);
1592
  gfc_try (*f3red)(gfc_actual_arglist *);
1593
  gfc_try (*f4)(struct gfc_expr *, struct gfc_expr *, struct gfc_expr *,
1594
            struct gfc_expr *);
1595
  gfc_try (*f5)(struct gfc_expr *, struct gfc_expr *, struct gfc_expr *,
1596
            struct gfc_expr *, struct gfc_expr *);
1597
}
1598
gfc_check_f;
1599
 
1600
/* Like gfc_check_f, these specify the type of the simplification
1601
   function associated with an intrinsic. The fX are just like in
1602
   gfc_check_f. cc is used for type conversion functions.  */
1603
 
1604
typedef union
1605
{
1606
  struct gfc_expr *(*f0)(void);
1607
  struct gfc_expr *(*f1)(struct gfc_expr *);
1608
  struct gfc_expr *(*f2)(struct gfc_expr *, struct gfc_expr *);
1609
  struct gfc_expr *(*f3)(struct gfc_expr *, struct gfc_expr *,
1610
                         struct gfc_expr *);
1611
  struct gfc_expr *(*f4)(struct gfc_expr *, struct gfc_expr *,
1612
                         struct gfc_expr *, struct gfc_expr *);
1613
  struct gfc_expr *(*f5)(struct gfc_expr *, struct gfc_expr *,
1614
                         struct gfc_expr *, struct gfc_expr *,
1615
                         struct gfc_expr *);
1616
  struct gfc_expr *(*cc)(struct gfc_expr *, bt, int);
1617
}
1618
gfc_simplify_f;
1619
 
1620
/* Again like gfc_check_f, these specify the type of the resolution
1621
   function associated with an intrinsic. The fX are just like in
1622
   gfc_check_f. f1m is used for MIN and MAX, s1 is used for abort().  */
1623
 
1624
typedef union
1625
{
1626
  void (*f0)(struct gfc_expr *);
1627
  void (*f1)(struct gfc_expr *, struct gfc_expr *);
1628
  void (*f1m)(struct gfc_expr *, struct gfc_actual_arglist *);
1629
  void (*f2)(struct gfc_expr *, struct gfc_expr *, struct gfc_expr *);
1630
  void (*f3)(struct gfc_expr *, struct gfc_expr *, struct gfc_expr *,
1631
             struct gfc_expr *);
1632
  void (*f4)(struct gfc_expr *, struct gfc_expr *, struct gfc_expr *,
1633
             struct gfc_expr *, struct gfc_expr *);
1634
  void (*f5)(struct gfc_expr *, struct gfc_expr *, struct gfc_expr *,
1635
             struct gfc_expr *, struct gfc_expr *, struct gfc_expr *);
1636
  void (*s1)(struct gfc_code *);
1637
}
1638
gfc_resolve_f;
1639
 
1640
 
1641
typedef struct gfc_intrinsic_sym
1642
{
1643
  const char *name, *lib_name;
1644
  gfc_intrinsic_arg *formal;
1645
  gfc_typespec ts;
1646
  unsigned elemental:1, inquiry:1, transformational:1, pure:1,
1647
    generic:1, specific:1, actual_ok:1, noreturn:1, conversion:1,
1648
    from_module:1;
1649
 
1650
  int standard;
1651
 
1652
  gfc_simplify_f simplify;
1653
  gfc_check_f check;
1654
  gfc_resolve_f resolve;
1655
  struct gfc_intrinsic_sym *specific_head, *next;
1656
  gfc_isym_id id;
1657
 
1658
}
1659
gfc_intrinsic_sym;
1660
 
1661
 
1662
/* Expression nodes.  The expression node types deserve explanations,
1663
   since the last couple can be easily misconstrued:
1664
 
1665
   EXPR_OP         Operator node pointing to one or two other nodes
1666
   EXPR_FUNCTION   Function call, symbol points to function's name
1667
   EXPR_CONSTANT   A scalar constant: Logical, String, Real, Int or Complex
1668
   EXPR_VARIABLE   An Lvalue with a root symbol and possible reference list
1669
                   which expresses structure, array and substring refs.
1670
   EXPR_NULL       The NULL pointer value (which also has a basic type).
1671
   EXPR_SUBSTRING  A substring of a constant string
1672
   EXPR_STRUCTURE  A structure constructor
1673
   EXPR_ARRAY      An array constructor.
1674
   EXPR_COMPCALL   Function (or subroutine) call of a procedure pointer
1675
                   component or type-bound procedure.  */
1676
 
1677
#include <gmp.h>
1678
#include <mpfr.h>
1679
#include <mpc.h>
1680
#define GFC_RND_MODE GMP_RNDN
1681
#define GFC_MPC_RND_MODE MPC_RNDNN
1682
 
1683
typedef splay_tree gfc_constructor_base;
1684
 
1685
typedef struct gfc_expr
1686
{
1687
  expr_t expr_type;
1688
 
1689
  gfc_typespec ts;      /* These two refer to the overall expression */
1690
 
1691
  int rank;
1692
  mpz_t *shape;         /* Can be NULL if shape is unknown at compile time */
1693
 
1694
  /* Nonnull for functions and structure constructors, may also used to hold the
1695
     base-object for component calls.  */
1696
  gfc_symtree *symtree;
1697
 
1698
  gfc_ref *ref;
1699
 
1700
  locus where;
1701
 
1702
  /* Used to store the base expression in component calls, when the expression
1703
     is not a variable.  */
1704
  struct gfc_expr *base_expr;
1705
 
1706
  /* is_boz is true if the integer is regarded as BOZ bitpatten and is_snan
1707
     denotes a signalling not-a-number.  */
1708
  unsigned int is_boz : 1, is_snan : 1;
1709
 
1710
  /* Sometimes, when an error has been emitted, it is necessary to prevent
1711
      it from recurring.  */
1712
  unsigned int error : 1;
1713
 
1714
  /* Mark an expression where a user operator has been substituted by
1715
     a function call in interface.c(gfc_extend_expr).  */
1716
  unsigned int user_operator : 1;
1717
 
1718
  /* Mark an expression as being a MOLD argument of ALLOCATE.  */
1719
  unsigned int mold : 1;
1720
 
1721
  /* If an expression comes from a Hollerith constant or compile-time
1722
     evaluation of a transfer statement, it may have a prescribed target-
1723
     memory representation, and these cannot always be backformed from
1724
     the value.  */
1725
  struct
1726
  {
1727
    int length;
1728
    char *string;
1729
  }
1730
  representation;
1731
 
1732
  union
1733
  {
1734
    int logical;
1735
 
1736
    io_kind iokind;
1737
 
1738
    mpz_t integer;
1739
 
1740
    mpfr_t real;
1741
 
1742
    mpc_t complex;
1743
 
1744
    struct
1745
    {
1746
      gfc_intrinsic_op op;
1747
      gfc_user_op *uop;
1748
      struct gfc_expr *op1, *op2;
1749
    }
1750
    op;
1751
 
1752
    struct
1753
    {
1754
      gfc_actual_arglist *actual;
1755
      const char *name; /* Points to the ultimate name of the function */
1756
      gfc_intrinsic_sym *isym;
1757
      gfc_symbol *esym;
1758
    }
1759
    function;
1760
 
1761
    struct
1762
    {
1763
      gfc_actual_arglist* actual;
1764
      const char* name;
1765
      /* Base-object, whose component was called.  NULL means that it should
1766
         be taken from symtree/ref.  */
1767
      struct gfc_expr* base_object;
1768
      gfc_typebound_proc* tbp; /* Should overlap with esym.  */
1769
 
1770
      /* For type-bound operators, we want to call PASS procedures but already
1771
         have the full arglist; mark this, so that it is not extended by the
1772
         PASS argument.  */
1773
      unsigned ignore_pass:1;
1774
 
1775
      /* Do assign-calls rather than calls, that is appropriate dependency
1776
         checking.  */
1777
      unsigned assign:1;
1778
    }
1779
    compcall;
1780
 
1781
    struct
1782
    {
1783
      int length;
1784
      gfc_char_t *string;
1785
    }
1786
    character;
1787
 
1788
    gfc_constructor_base constructor;
1789
  }
1790
  value;
1791
 
1792
}
1793
gfc_expr;
1794
 
1795
 
1796
#define gfc_get_shape(rank) (XCNEWVEC (mpz_t, (rank)))
1797
 
1798
/* Structures for information associated with different kinds of
1799
   numbers.  The first set of integer parameters define all there is
1800
   to know about a particular kind.  The rest of the elements are
1801
   computed from the first elements.  */
1802
 
1803
typedef struct
1804
{
1805
  /* Values really representable by the target.  */
1806
  mpz_t huge, pedantic_min_int, min_int;
1807
 
1808
  int kind, radix, digits, bit_size, range;
1809
 
1810
  /* True if the C type of the given name maps to this precision.
1811
     Note that more than one bit can be set.  */
1812
  unsigned int c_char : 1;
1813
  unsigned int c_short : 1;
1814
  unsigned int c_int : 1;
1815
  unsigned int c_long : 1;
1816
  unsigned int c_long_long : 1;
1817
}
1818
gfc_integer_info;
1819
 
1820
extern gfc_integer_info gfc_integer_kinds[];
1821
 
1822
 
1823
typedef struct
1824
{
1825
  int kind, bit_size;
1826
 
1827
  /* True if the C++ type bool, C99 type _Bool, maps to this precision.  */
1828
  unsigned int c_bool : 1;
1829
}
1830
gfc_logical_info;
1831
 
1832
extern gfc_logical_info gfc_logical_kinds[];
1833
 
1834
 
1835
typedef struct
1836
{
1837
  mpfr_t epsilon, huge, tiny, subnormal;
1838
  int kind, radix, digits, min_exponent, max_exponent;
1839
  int range, precision;
1840
 
1841
  /* The precision of the type as reported by GET_MODE_PRECISION.  */
1842
  int mode_precision;
1843
 
1844
  /* True if the C type of the given name maps to this precision.
1845
     Note that more than one bit can be set.  */
1846
  unsigned int c_float : 1;
1847
  unsigned int c_double : 1;
1848
  unsigned int c_long_double : 1;
1849
  unsigned int c_float128 : 1;
1850
}
1851
gfc_real_info;
1852
 
1853
extern gfc_real_info gfc_real_kinds[];
1854
 
1855
typedef struct
1856
{
1857
  int kind, bit_size;
1858
  const char *name;
1859
}
1860
gfc_character_info;
1861
 
1862
extern gfc_character_info gfc_character_kinds[];
1863
 
1864
 
1865
/* Equivalence structures.  Equivalent lvalues are linked along the
1866
   *eq pointer, equivalence sets are strung along the *next node.  */
1867
typedef struct gfc_equiv
1868
{
1869
  struct gfc_equiv *next, *eq;
1870
  gfc_expr *expr;
1871
  const char *module;
1872
  int used;
1873
}
1874
gfc_equiv;
1875
 
1876
#define gfc_get_equiv() XCNEW (gfc_equiv)
1877
 
1878
/* Holds a single equivalence member after processing.  */
1879
typedef struct gfc_equiv_info
1880
{
1881
  gfc_symbol *sym;
1882
  HOST_WIDE_INT offset;
1883
  HOST_WIDE_INT length;
1884
  struct gfc_equiv_info *next;
1885
} gfc_equiv_info;
1886
 
1887
/* Holds equivalence groups, after they have been processed.  */
1888
typedef struct gfc_equiv_list
1889
{
1890
  gfc_equiv_info *equiv;
1891
  struct gfc_equiv_list *next;
1892
} gfc_equiv_list;
1893
 
1894
/* gfc_case stores the selector list of a case statement.  The *low
1895
   and *high pointers can point to the same expression in the case of
1896
   a single value.  If *high is NULL, the selection is from *low
1897
   upwards, if *low is NULL the selection is *high downwards.
1898
 
1899
   This structure has separate fields to allow single and double linked
1900
   lists of CASEs at the same time.  The singe linked list along the NEXT
1901
   field is a list of cases for a single CASE label.  The double linked
1902
   list along the LEFT/RIGHT fields is used to detect overlap and to
1903
   build a table of the cases for SELECT constructs with a CHARACTER
1904
   case expression.  */
1905
 
1906
typedef struct gfc_case
1907
{
1908
  /* Where we saw this case.  */
1909
  locus where;
1910
  int n;
1911
 
1912
  /* Case range values.  If (low == high), it's a single value.  If one of
1913
     the labels is NULL, it's an unbounded case.  If both are NULL, this
1914
     represents the default case.  */
1915
  gfc_expr *low, *high;
1916
 
1917
  /* Only used for SELECT TYPE.  */
1918
  gfc_typespec ts;
1919
 
1920
  /* Next case label in the list of cases for a single CASE label.  */
1921
  struct gfc_case *next;
1922
 
1923
  /* Used for detecting overlap, and for code generation.  */
1924
  struct gfc_case *left, *right;
1925
 
1926
  /* True if this case label can never be matched.  */
1927
  int unreachable;
1928
}
1929
gfc_case;
1930
 
1931
#define gfc_get_case() XCNEW (gfc_case)
1932
 
1933
 
1934
typedef struct
1935
{
1936
  gfc_expr *var, *start, *end, *step;
1937
}
1938
gfc_iterator;
1939
 
1940
#define gfc_get_iterator() XCNEW (gfc_iterator)
1941
 
1942
 
1943
/* Allocation structure for ALLOCATE, DEALLOCATE and NULLIFY statements.  */
1944
 
1945
typedef struct gfc_alloc
1946
{
1947
  gfc_expr *expr;
1948
  struct gfc_alloc *next;
1949
}
1950
gfc_alloc;
1951
 
1952
#define gfc_get_alloc() XCNEW (gfc_alloc)
1953
 
1954
 
1955
typedef struct
1956
{
1957
  gfc_expr *unit, *file, *status, *access, *form, *recl,
1958
    *blank, *position, *action, *delim, *pad, *iostat, *iomsg, *convert,
1959
    *decimal, *encoding, *round, *sign, *asynchronous, *id, *newunit;
1960
  gfc_st_label *err;
1961
}
1962
gfc_open;
1963
 
1964
 
1965
typedef struct
1966
{
1967
  gfc_expr *unit, *status, *iostat, *iomsg;
1968
  gfc_st_label *err;
1969
}
1970
gfc_close;
1971
 
1972
 
1973
typedef struct
1974
{
1975
  gfc_expr *unit, *iostat, *iomsg;
1976
  gfc_st_label *err;
1977
}
1978
gfc_filepos;
1979
 
1980
 
1981
typedef struct
1982
{
1983
  gfc_expr *unit, *file, *iostat, *exist, *opened, *number, *named,
1984
    *name, *access, *sequential, *direct, *form, *formatted,
1985
    *unformatted, *recl, *nextrec, *blank, *position, *action, *read,
1986
    *write, *readwrite, *delim, *pad, *iolength, *iomsg, *convert, *strm_pos,
1987
    *asynchronous, *decimal, *encoding, *pending, *round, *sign, *size, *id;
1988
 
1989
  gfc_st_label *err;
1990
 
1991
}
1992
gfc_inquire;
1993
 
1994
 
1995
typedef struct
1996
{
1997
  gfc_expr *unit, *iostat, *iomsg, *id;
1998
  gfc_st_label *err, *end, *eor;
1999
}
2000
gfc_wait;
2001
 
2002
 
2003
typedef struct
2004
{
2005
  gfc_expr *io_unit, *format_expr, *rec, *advance, *iostat, *size, *iomsg,
2006
           *id, *pos, *asynchronous, *blank, *decimal, *delim, *pad, *round,
2007
           *sign, *extra_comma, *dt_io_kind;
2008
 
2009
  gfc_symbol *namelist;
2010
  /* A format_label of `format_asterisk' indicates the "*" format */
2011
  gfc_st_label *format_label;
2012
  gfc_st_label *err, *end, *eor;
2013
 
2014
  locus eor_where, end_where, err_where;
2015
}
2016
gfc_dt;
2017
 
2018
 
2019
typedef struct gfc_forall_iterator
2020
{
2021
  gfc_expr *var, *start, *end, *stride;
2022
  struct gfc_forall_iterator *next;
2023
}
2024
gfc_forall_iterator;
2025
 
2026
 
2027
/* Linked list to store associations in an ASSOCIATE statement.  */
2028
 
2029
typedef struct gfc_association_list
2030
{
2031
  struct gfc_association_list *next;
2032
 
2033
  /* Whether this is association to a variable that can be changed; otherwise,
2034
     it's association to an expression and the name may not be used as
2035
     lvalue.  */
2036
  unsigned variable:1;
2037
 
2038
  /* True if this struct is currently only linked to from a gfc_symbol rather
2039
     than as part of a real list in gfc_code->ext.block.assoc.  This may
2040
     happen for SELECT TYPE temporaries and must be considered
2041
     for memory handling.  */
2042
  unsigned dangling:1;
2043
 
2044
  char name[GFC_MAX_SYMBOL_LEN + 1];
2045
  gfc_symtree *st; /* Symtree corresponding to name.  */
2046
  locus where;
2047
 
2048
  gfc_expr *target;
2049
}
2050
gfc_association_list;
2051
#define gfc_get_association_list() XCNEW (gfc_association_list)
2052
 
2053
 
2054
/* Executable statements that fill gfc_code structures.  */
2055
typedef enum
2056
{
2057
  EXEC_NOP = 1, EXEC_END_NESTED_BLOCK, EXEC_END_BLOCK, EXEC_ASSIGN,
2058
  EXEC_LABEL_ASSIGN, EXEC_POINTER_ASSIGN, EXEC_CRITICAL, EXEC_ERROR_STOP,
2059
  EXEC_GOTO, EXEC_CALL, EXEC_COMPCALL, EXEC_ASSIGN_CALL, EXEC_RETURN,
2060
  EXEC_ENTRY, EXEC_PAUSE, EXEC_STOP, EXEC_CONTINUE, EXEC_INIT_ASSIGN,
2061
  EXEC_IF, EXEC_ARITHMETIC_IF, EXEC_DO, EXEC_DO_CONCURRENT, EXEC_DO_WHILE,
2062
  EXEC_SELECT, EXEC_BLOCK, EXEC_FORALL, EXEC_WHERE, EXEC_CYCLE, EXEC_EXIT,
2063
  EXEC_CALL_PPC, EXEC_ALLOCATE, EXEC_DEALLOCATE, EXEC_END_PROCEDURE,
2064
  EXEC_SELECT_TYPE, EXEC_SYNC_ALL, EXEC_SYNC_MEMORY, EXEC_SYNC_IMAGES,
2065
  EXEC_OPEN, EXEC_CLOSE, EXEC_WAIT,
2066
  EXEC_READ, EXEC_WRITE, EXEC_IOLENGTH, EXEC_TRANSFER, EXEC_DT_END,
2067
  EXEC_BACKSPACE, EXEC_ENDFILE, EXEC_INQUIRE, EXEC_REWIND, EXEC_FLUSH,
2068
  EXEC_LOCK, EXEC_UNLOCK,
2069
  EXEC_OMP_CRITICAL, EXEC_OMP_DO, EXEC_OMP_FLUSH, EXEC_OMP_MASTER,
2070
  EXEC_OMP_ORDERED, EXEC_OMP_PARALLEL, EXEC_OMP_PARALLEL_DO,
2071
  EXEC_OMP_PARALLEL_SECTIONS, EXEC_OMP_PARALLEL_WORKSHARE,
2072
  EXEC_OMP_SECTIONS, EXEC_OMP_SINGLE, EXEC_OMP_WORKSHARE,
2073
  EXEC_OMP_ATOMIC, EXEC_OMP_BARRIER, EXEC_OMP_END_NOWAIT,
2074
  EXEC_OMP_END_SINGLE, EXEC_OMP_TASK, EXEC_OMP_TASKWAIT,
2075
  EXEC_OMP_TASKYIELD
2076
}
2077
gfc_exec_op;
2078
 
2079
typedef enum
2080
{
2081
  GFC_OMP_ATOMIC_UPDATE,
2082
  GFC_OMP_ATOMIC_READ,
2083
  GFC_OMP_ATOMIC_WRITE,
2084
  GFC_OMP_ATOMIC_CAPTURE
2085
}
2086
gfc_omp_atomic_op;
2087
 
2088
typedef struct gfc_code
2089
{
2090
  gfc_exec_op op;
2091
 
2092
  struct gfc_code *block, *next;
2093
  locus loc;
2094
 
2095
  gfc_st_label *here, *label1, *label2, *label3;
2096
  gfc_symtree *symtree;
2097
  gfc_expr *expr1, *expr2, *expr3, *expr4;
2098
  /* A name isn't sufficient to identify a subroutine, we need the actual
2099
     symbol for the interface definition.
2100
  const char *sub_name;  */
2101
  gfc_symbol *resolved_sym;
2102
  gfc_intrinsic_sym *resolved_isym;
2103
 
2104
  union
2105
  {
2106
    gfc_actual_arglist *actual;
2107
    gfc_iterator *iterator;
2108
 
2109
    struct
2110
    {
2111
      gfc_typespec ts;
2112
      gfc_alloc *list;
2113
    }
2114
    alloc;
2115
 
2116
    struct
2117
    {
2118
      gfc_namespace *ns;
2119
      gfc_association_list *assoc;
2120
      gfc_case *case_list;
2121
    }
2122
    block;
2123
 
2124
    gfc_open *open;
2125
    gfc_close *close;
2126
    gfc_filepos *filepos;
2127
    gfc_inquire *inquire;
2128
    gfc_wait *wait;
2129
    gfc_dt *dt;
2130
    gfc_forall_iterator *forall_iterator;
2131
    struct gfc_code *which_construct;
2132
    int stop_code;
2133
    gfc_entry_list *entry;
2134
    gfc_omp_clauses *omp_clauses;
2135
    const char *omp_name;
2136
    gfc_namelist *omp_namelist;
2137
    bool omp_bool;
2138
    gfc_omp_atomic_op omp_atomic;
2139
  }
2140
  ext;          /* Points to additional structures required by statement */
2141
 
2142
  /* Cycle and break labels in constructs.  */
2143
  tree cycle_label;
2144
  tree exit_label;
2145
}
2146
gfc_code;
2147
 
2148
 
2149
/* Storage for DATA statements.  */
2150
typedef struct gfc_data_variable
2151
{
2152
  gfc_expr *expr;
2153
  gfc_iterator iter;
2154
  struct gfc_data_variable *list, *next;
2155
}
2156
gfc_data_variable;
2157
 
2158
 
2159
typedef struct gfc_data_value
2160
{
2161
  mpz_t repeat;
2162
  gfc_expr *expr;
2163
  struct gfc_data_value *next;
2164
}
2165
gfc_data_value;
2166
 
2167
 
2168
typedef struct gfc_data
2169
{
2170
  gfc_data_variable *var;
2171
  gfc_data_value *value;
2172
  locus where;
2173
 
2174
  struct gfc_data *next;
2175
}
2176
gfc_data;
2177
 
2178
 
2179
/* Structure for holding compile options */
2180
typedef struct
2181
{
2182
  char *module_dir;
2183
  gfc_source_form source_form;
2184
  /* Maximum line lengths in fixed- and free-form source, respectively.
2185
     When fixed_line_length or free_line_length are 0, the whole line is used,
2186
     regardless of length.
2187
 
2188
     If the user requests a fixed_line_length <7 then gfc_init_options()
2189
     emits a fatal error.  */
2190
  int fixed_line_length;
2191
  int free_line_length;
2192
  /* Maximum number of continuation lines in fixed- and free-form source,
2193
     respectively.  */
2194
  int max_continue_fixed;
2195
  int max_continue_free;
2196
  int max_identifier_length;
2197
  int dump_fortran_original;
2198
  int dump_fortran_optimized;
2199
 
2200
  int warn_aliasing;
2201
  int warn_ampersand;
2202
  int gfc_warn_conversion;
2203
  int warn_conversion_extra;
2204
  int warn_function_elimination;
2205
  int warn_implicit_interface;
2206
  int warn_implicit_procedure;
2207
  int warn_line_truncation;
2208
  int warn_surprising;
2209
  int warn_tabs;
2210
  int warn_underflow;
2211
  int warn_intrinsic_shadow;
2212
  int warn_intrinsics_std;
2213
  int warn_character_truncation;
2214
  int warn_array_temp;
2215
  int warn_align_commons;
2216
  int warn_real_q_constant;
2217
  int warn_unused_dummy_argument;
2218
  int max_errors;
2219
 
2220
  int flag_all_intrinsics;
2221
  int flag_default_double;
2222
  int flag_default_integer;
2223
  int flag_default_real;
2224
  int flag_integer4_kind;
2225
  int flag_real4_kind;
2226
  int flag_real8_kind;
2227
  int flag_dollar_ok;
2228
  int flag_underscoring;
2229
  int flag_second_underscore;
2230
  int flag_implicit_none;
2231
  int flag_max_stack_var_size;
2232
  int flag_max_array_constructor;
2233
  int flag_range_check;
2234
  int flag_pack_derived;
2235
  int flag_repack_arrays;
2236
  int flag_preprocessed;
2237
  int flag_f2c;
2238
  int flag_automatic;
2239
  int flag_backslash;
2240
  int flag_backtrace;
2241
  int flag_allow_leading_underscore;
2242
  int flag_external_blas;
2243
  int blas_matmul_limit;
2244
  int flag_cray_pointer;
2245
  int flag_d_lines;
2246
  int gfc_flag_openmp;
2247
  int flag_sign_zero;
2248
  int flag_stack_arrays;
2249
  int flag_module_private;
2250
  int flag_recursive;
2251
  int flag_init_local_zero;
2252
  int flag_init_integer;
2253
  int flag_init_integer_value;
2254
  int flag_init_real;
2255
  int flag_init_logical;
2256
  int flag_init_character;
2257
  char flag_init_character_value;
2258
  int flag_align_commons;
2259
  int flag_whole_file;
2260
  int flag_protect_parens;
2261
  int flag_realloc_lhs;
2262
  int flag_aggressive_function_elimination;
2263
  int flag_frontend_optimize;
2264
 
2265
  int fpe;
2266
  int rtcheck;
2267
  gfc_fcoarray coarray;
2268
 
2269
  int warn_std;
2270
  int allow_std;
2271
  int convert;
2272
  int record_marker;
2273
  int max_subrecord_length;
2274
}
2275
gfc_option_t;
2276
 
2277
extern gfc_option_t gfc_option;
2278
 
2279
/* Constructor nodes for array and structure constructors.  */
2280
typedef struct gfc_constructor
2281
{
2282
  gfc_constructor_base base;
2283
  mpz_t offset;               /* Offset within a constructor, used as
2284
                                 key within base. */
2285
 
2286
  gfc_expr *expr;
2287
  gfc_iterator *iterator;
2288
  locus where;
2289
 
2290
  union
2291
  {
2292
     gfc_component *component; /* Record the component being initialized.  */
2293
  }
2294
  n;
2295
  mpz_t repeat; /* Record the repeat number of initial values in data
2296
                  statement like "data a/5*10/".  */
2297
}
2298
gfc_constructor;
2299
 
2300
 
2301
typedef struct iterator_stack
2302
{
2303
  gfc_symtree *variable;
2304
  mpz_t value;
2305
  struct iterator_stack *prev;
2306
}
2307
iterator_stack;
2308
extern iterator_stack *iter_stack;
2309
 
2310
 
2311
/* Used for (possibly nested) SELECT TYPE statements.  */
2312
typedef struct gfc_select_type_stack
2313
{
2314
  gfc_symbol *selector;                 /* Current selector variable.  */
2315
  gfc_symtree *tmp;                     /* Current temporary variable.  */
2316
  struct gfc_select_type_stack *prev;   /* Previous element on stack.  */
2317
}
2318
gfc_select_type_stack;
2319
extern gfc_select_type_stack *select_type_stack;
2320
#define gfc_get_select_type_stack() XCNEW (gfc_select_type_stack)
2321
 
2322
 
2323
/* Node in the linked list used for storing finalizer procedures.  */
2324
 
2325
typedef struct gfc_finalizer
2326
{
2327
  struct gfc_finalizer* next;
2328
  locus where; /* Where the FINAL declaration occurred.  */
2329
 
2330
  /* Up to resolution, we want the gfc_symbol, there we lookup the corresponding
2331
     symtree and later need only that.  This way, we can access and call the
2332
     finalizers from every context as they should be "always accessible".  I
2333
     don't make this a union because we need the information whether proc_sym is
2334
     still referenced or not for dereferencing it on deleting a gfc_finalizer
2335
     structure.  */
2336
  gfc_symbol*  proc_sym;
2337
  gfc_symtree* proc_tree;
2338
}
2339
gfc_finalizer;
2340
#define gfc_get_finalizer() XCNEW (gfc_finalizer)
2341
 
2342
 
2343
/************************ Function prototypes *************************/
2344
 
2345
/* decl.c */
2346
bool gfc_in_match_data (void);
2347
match gfc_match_char_spec (gfc_typespec *);
2348
 
2349
/* scanner.c */
2350
void gfc_scanner_done_1 (void);
2351
void gfc_scanner_init_1 (void);
2352
 
2353
void gfc_add_include_path (const char *, bool, bool);
2354
void gfc_add_intrinsic_modules_path (const char *);
2355
void gfc_release_include_path (void);
2356
FILE *gfc_open_included_file (const char *, bool, bool);
2357
FILE *gfc_open_intrinsic_module (const char *);
2358
 
2359
int gfc_at_end (void);
2360
int gfc_at_eof (void);
2361
int gfc_at_bol (void);
2362
int gfc_at_eol (void);
2363
void gfc_advance_line (void);
2364
int gfc_check_include (void);
2365
int gfc_define_undef_line (void);
2366
 
2367
int gfc_wide_is_printable (gfc_char_t);
2368
int gfc_wide_is_digit (gfc_char_t);
2369
int gfc_wide_fits_in_byte (gfc_char_t);
2370
gfc_char_t gfc_wide_tolower (gfc_char_t);
2371
gfc_char_t gfc_wide_toupper (gfc_char_t);
2372
size_t gfc_wide_strlen (const gfc_char_t *);
2373
int gfc_wide_strncasecmp (const gfc_char_t *, const char *, size_t);
2374
gfc_char_t *gfc_wide_memset (gfc_char_t *, gfc_char_t, size_t);
2375
char *gfc_widechar_to_char (const gfc_char_t *, int);
2376
gfc_char_t *gfc_char_to_widechar (const char *);
2377
 
2378
#define gfc_get_wide_string(n) XCNEWVEC (gfc_char_t, n)
2379
 
2380
void gfc_skip_comments (void);
2381
gfc_char_t gfc_next_char_literal (gfc_instring);
2382
gfc_char_t gfc_next_char (void);
2383
char gfc_next_ascii_char (void);
2384
gfc_char_t gfc_peek_char (void);
2385
char gfc_peek_ascii_char (void);
2386
void gfc_error_recovery (void);
2387
void gfc_gobble_whitespace (void);
2388
gfc_try gfc_new_file (void);
2389
const char * gfc_read_orig_filename (const char *, const char **);
2390
 
2391
extern gfc_source_form gfc_current_form;
2392
extern const char *gfc_source_file;
2393
extern locus gfc_current_locus;
2394
 
2395
void gfc_start_source_files (void);
2396
void gfc_end_source_files (void);
2397
 
2398
/* misc.c */
2399
int gfc_terminal_width (void);
2400
void gfc_clear_ts (gfc_typespec *);
2401
FILE *gfc_open_file (const char *);
2402
const char *gfc_basic_typename (bt);
2403
const char *gfc_typename (gfc_typespec *);
2404
const char *gfc_op2string (gfc_intrinsic_op);
2405
const char *gfc_code2string (const mstring *, int);
2406
int gfc_string2code (const mstring *, const char *);
2407
const char *gfc_intent_string (sym_intent);
2408
 
2409
void gfc_init_1 (void);
2410
void gfc_init_2 (void);
2411
void gfc_done_1 (void);
2412
void gfc_done_2 (void);
2413
 
2414
int get_c_kind (const char *, CInteropKind_t *);
2415
 
2416
/* options.c */
2417
unsigned int gfc_option_lang_mask (void);
2418
void gfc_init_options_struct (struct gcc_options *);
2419
void gfc_init_options (unsigned int,
2420
                       struct cl_decoded_option *);
2421
bool gfc_handle_option (size_t, const char *, int, int, location_t,
2422
                        const struct cl_option_handlers *);
2423
bool gfc_post_options (const char **);
2424
char *gfc_get_option_string (void);
2425
 
2426
/* f95-lang.c */
2427
void gfc_maybe_initialize_eh (void);
2428
 
2429
/* iresolve.c */
2430
const char * gfc_get_string (const char *, ...) ATTRIBUTE_PRINTF_1;
2431
bool gfc_find_sym_in_expr (gfc_symbol *, gfc_expr *);
2432
 
2433
/* error.c */
2434
 
2435
typedef struct gfc_error_buf
2436
{
2437
  int flag;
2438
  size_t allocated, index;
2439
  char *message;
2440
} gfc_error_buf;
2441
 
2442
void gfc_error_init_1 (void);
2443
void gfc_buffer_error (int);
2444
 
2445
const char *gfc_print_wide_char (gfc_char_t);
2446
 
2447
void gfc_warning (const char *, ...) ATTRIBUTE_GCC_GFC(1,2);
2448
void gfc_warning_now (const char *, ...) ATTRIBUTE_GCC_GFC(1,2);
2449
void gfc_clear_warning (void);
2450
void gfc_warning_check (void);
2451
 
2452
void gfc_error (const char *, ...) ATTRIBUTE_GCC_GFC(1,2);
2453
void gfc_error_now (const char *, ...) ATTRIBUTE_GCC_GFC(1,2);
2454
void gfc_fatal_error (const char *, ...) ATTRIBUTE_NORETURN ATTRIBUTE_GCC_GFC(1,2);
2455
void gfc_internal_error (const char *, ...) ATTRIBUTE_NORETURN ATTRIBUTE_GCC_GFC(1,2);
2456
void gfc_clear_error (void);
2457
int gfc_error_check (void);
2458
int gfc_error_flag_test (void);
2459
 
2460
notification gfc_notification_std (int);
2461
gfc_try gfc_notify_std (int, const char *, ...) ATTRIBUTE_GCC_GFC(2,3);
2462
 
2463
/* A general purpose syntax error.  */
2464
#define gfc_syntax_error(ST)    \
2465
  gfc_error ("Syntax error in %s statement at %C", gfc_ascii_statement (ST));
2466
 
2467
void gfc_push_error (gfc_error_buf *);
2468
void gfc_pop_error (gfc_error_buf *);
2469
void gfc_free_error (gfc_error_buf *);
2470
 
2471
void gfc_get_errors (int *, int *);
2472
void gfc_errors_to_warnings (int);
2473
 
2474
/* arith.c */
2475
void gfc_arith_init_1 (void);
2476
void gfc_arith_done_1 (void);
2477
arith gfc_check_integer_range (mpz_t p, int kind);
2478
bool gfc_check_character_range (gfc_char_t, int);
2479
 
2480
/* trans-types.c */
2481
gfc_try gfc_check_any_c_kind (gfc_typespec *);
2482
int gfc_validate_kind (bt, int, bool);
2483
int gfc_get_int_kind_from_width_isofortranenv (int size);
2484
int gfc_get_real_kind_from_width_isofortranenv (int size);
2485
tree gfc_get_derived_type (gfc_symbol * derived);
2486
extern int gfc_index_integer_kind;
2487
extern int gfc_default_integer_kind;
2488
extern int gfc_max_integer_kind;
2489
extern int gfc_default_real_kind;
2490
extern int gfc_default_double_kind;
2491
extern int gfc_default_character_kind;
2492
extern int gfc_default_logical_kind;
2493
extern int gfc_default_complex_kind;
2494
extern int gfc_c_int_kind;
2495
extern int gfc_atomic_int_kind;
2496
extern int gfc_atomic_logical_kind;
2497
extern int gfc_intio_kind;
2498
extern int gfc_charlen_int_kind;
2499
extern int gfc_numeric_storage_size;
2500
extern int gfc_character_storage_size;
2501
 
2502
/* symbol.c */
2503
void gfc_clear_new_implicit (void);
2504
gfc_try gfc_add_new_implicit_range (int, int);
2505
gfc_try gfc_merge_new_implicit (gfc_typespec *);
2506
void gfc_set_implicit_none (void);
2507
void gfc_check_function_type (gfc_namespace *);
2508
bool gfc_is_intrinsic_typename (const char *);
2509
 
2510
gfc_typespec *gfc_get_default_type (const char *, gfc_namespace *);
2511
gfc_try gfc_set_default_type (gfc_symbol *, int, gfc_namespace *);
2512
 
2513
void gfc_set_sym_referenced (gfc_symbol *);
2514
 
2515
gfc_try gfc_add_attribute (symbol_attribute *, locus *);
2516
gfc_try gfc_add_ext_attribute (symbol_attribute *, ext_attr_id_t, locus *);
2517
gfc_try gfc_add_allocatable (symbol_attribute *, locus *);
2518
gfc_try gfc_add_codimension (symbol_attribute *, const char *, locus *);
2519
gfc_try gfc_add_contiguous (symbol_attribute *, const char *, locus *);
2520
gfc_try gfc_add_dimension (symbol_attribute *, const char *, locus *);
2521
gfc_try gfc_add_external (symbol_attribute *, locus *);
2522
gfc_try gfc_add_intrinsic (symbol_attribute *, locus *);
2523
gfc_try gfc_add_optional (symbol_attribute *, locus *);
2524
gfc_try gfc_add_pointer (symbol_attribute *, locus *);
2525
gfc_try gfc_add_cray_pointer (symbol_attribute *, locus *);
2526
gfc_try gfc_add_cray_pointee (symbol_attribute *, locus *);
2527
match gfc_mod_pointee_as (gfc_array_spec *);
2528
gfc_try gfc_add_protected (symbol_attribute *, const char *, locus *);
2529
gfc_try gfc_add_result (symbol_attribute *, const char *, locus *);
2530
gfc_try gfc_add_save (symbol_attribute *, save_state, const char *, locus *);
2531
gfc_try gfc_add_threadprivate (symbol_attribute *, const char *, locus *);
2532
gfc_try gfc_add_saved_common (symbol_attribute *, locus *);
2533
gfc_try gfc_add_target (symbol_attribute *, locus *);
2534
gfc_try gfc_add_dummy (symbol_attribute *, const char *, locus *);
2535
gfc_try gfc_add_generic (symbol_attribute *, const char *, locus *);
2536
gfc_try gfc_add_common (symbol_attribute *, locus *);
2537
gfc_try gfc_add_in_common (symbol_attribute *, const char *, locus *);
2538
gfc_try gfc_add_in_equivalence (symbol_attribute *, const char *, locus *);
2539
gfc_try gfc_add_data (symbol_attribute *, const char *, locus *);
2540
gfc_try gfc_add_in_namelist (symbol_attribute *, const char *, locus *);
2541
gfc_try gfc_add_sequence (symbol_attribute *, const char *, locus *);
2542
gfc_try gfc_add_elemental (symbol_attribute *, locus *);
2543
gfc_try gfc_add_pure (symbol_attribute *, locus *);
2544
gfc_try gfc_add_recursive (symbol_attribute *, locus *);
2545
gfc_try gfc_add_function (symbol_attribute *, const char *, locus *);
2546
gfc_try gfc_add_subroutine (symbol_attribute *, const char *, locus *);
2547
gfc_try gfc_add_volatile (symbol_attribute *, const char *, locus *);
2548
gfc_try gfc_add_asynchronous (symbol_attribute *, const char *, locus *);
2549
gfc_try gfc_add_proc (symbol_attribute *attr, const char *name, locus *where);
2550
gfc_try gfc_add_abstract (symbol_attribute* attr, locus* where);
2551
 
2552
gfc_try gfc_add_access (symbol_attribute *, gfc_access, const char *, locus *);
2553
gfc_try gfc_add_is_bind_c (symbol_attribute *, const char *, locus *, int);
2554
gfc_try gfc_add_extension (symbol_attribute *, locus *);
2555
gfc_try gfc_add_value (symbol_attribute *, const char *, locus *);
2556
gfc_try gfc_add_flavor (symbol_attribute *, sym_flavor, const char *, locus *);
2557
gfc_try gfc_add_entry (symbol_attribute *, const char *, locus *);
2558
gfc_try gfc_add_procedure (symbol_attribute *, procedure_type,
2559
                       const char *, locus *);
2560
gfc_try gfc_add_intent (symbol_attribute *, sym_intent, locus *);
2561
gfc_try gfc_add_explicit_interface (gfc_symbol *, ifsrc,
2562
                                gfc_formal_arglist *, locus *);
2563
gfc_try gfc_add_type (gfc_symbol *, gfc_typespec *, locus *);
2564
 
2565
void gfc_clear_attr (symbol_attribute *);
2566
gfc_try gfc_missing_attr (symbol_attribute *, locus *);
2567
gfc_try gfc_copy_attr (symbol_attribute *, symbol_attribute *, locus *);
2568
 
2569
gfc_try gfc_add_component (gfc_symbol *, const char *, gfc_component **);
2570
gfc_symbol *gfc_use_derived (gfc_symbol *);
2571
gfc_symtree *gfc_use_derived_tree (gfc_symtree *);
2572
gfc_component *gfc_find_component (gfc_symbol *, const char *, bool, bool);
2573
 
2574
gfc_st_label *gfc_get_st_label (int);
2575
void gfc_free_st_label (gfc_st_label *);
2576
void gfc_define_st_label (gfc_st_label *, gfc_sl_type, locus *);
2577
gfc_try gfc_reference_st_label (gfc_st_label *, gfc_sl_type);
2578
 
2579
gfc_namespace *gfc_get_namespace (gfc_namespace *, int);
2580
gfc_symtree *gfc_new_symtree (gfc_symtree **, const char *);
2581
gfc_symtree *gfc_find_symtree (gfc_symtree *, const char *);
2582
void gfc_delete_symtree (gfc_symtree **, const char *);
2583
gfc_symtree *gfc_get_unique_symtree (gfc_namespace *);
2584
gfc_user_op *gfc_get_uop (const char *);
2585
gfc_user_op *gfc_find_uop (const char *, gfc_namespace *);
2586
void gfc_free_symbol (gfc_symbol *);
2587
void gfc_release_symbol (gfc_symbol *);
2588
gfc_symbol *gfc_new_symbol (const char *, gfc_namespace *);
2589
gfc_symtree* gfc_find_symtree_in_proc (const char *, gfc_namespace *);
2590
int gfc_find_symbol (const char *, gfc_namespace *, int, gfc_symbol **);
2591
int gfc_find_sym_tree (const char *, gfc_namespace *, int, gfc_symtree **);
2592
int gfc_get_symbol (const char *, gfc_namespace *, gfc_symbol **);
2593
gfc_try gfc_verify_c_interop (gfc_typespec *);
2594
gfc_try gfc_verify_c_interop_param (gfc_symbol *);
2595
gfc_try verify_bind_c_sym (gfc_symbol *, gfc_typespec *, int, gfc_common_head *);
2596
gfc_try verify_bind_c_derived_type (gfc_symbol *);
2597
gfc_try verify_com_block_vars_c_interop (gfc_common_head *);
2598
void generate_isocbinding_symbol (const char *, iso_c_binding_symbol, const char *);
2599
gfc_symbol *get_iso_c_sym (gfc_symbol *, char *, const char *, int);
2600
int gfc_get_sym_tree (const char *, gfc_namespace *, gfc_symtree **, bool);
2601
int gfc_get_ha_symbol (const char *, gfc_symbol **);
2602
int gfc_get_ha_sym_tree (const char *, gfc_symtree **);
2603
 
2604
void gfc_undo_symbols (void);
2605
void gfc_commit_symbols (void);
2606
void gfc_commit_symbol (gfc_symbol *);
2607
gfc_charlen *gfc_new_charlen (gfc_namespace *, gfc_charlen *);
2608
void gfc_free_charlen (gfc_charlen *, gfc_charlen *);
2609
void gfc_free_namespace (gfc_namespace *);
2610
 
2611
void gfc_symbol_init_2 (void);
2612
void gfc_symbol_done_2 (void);
2613
 
2614
void gfc_traverse_symtree (gfc_symtree *, void (*)(gfc_symtree *));
2615
void gfc_traverse_ns (gfc_namespace *, void (*)(gfc_symbol *));
2616
void gfc_traverse_user_op (gfc_namespace *, void (*)(gfc_user_op *));
2617
void gfc_save_all (gfc_namespace *);
2618
 
2619
void gfc_enforce_clean_symbol_state (void);
2620
void gfc_free_dt_list (void);
2621
 
2622
 
2623
gfc_gsymbol *gfc_get_gsymbol (const char *);
2624
gfc_gsymbol *gfc_find_gsymbol (gfc_gsymbol *, const char *);
2625
 
2626
gfc_typebound_proc* gfc_get_typebound_proc (gfc_typebound_proc*);
2627
gfc_symbol* gfc_get_derived_super_type (gfc_symbol*);
2628
gfc_symbol* gfc_get_ultimate_derived_super_type (gfc_symbol*);
2629
bool gfc_type_is_extension_of (gfc_symbol *, gfc_symbol *);
2630
bool gfc_type_compatible (gfc_typespec *, gfc_typespec *);
2631
 
2632
void gfc_copy_formal_args (gfc_symbol *, gfc_symbol *);
2633
void gfc_copy_formal_args_intr (gfc_symbol *, gfc_intrinsic_sym *);
2634
void gfc_copy_formal_args_ppc (gfc_component *, gfc_symbol *);
2635
 
2636
void gfc_free_finalizer (gfc_finalizer *el); /* Needed in resolve.c, too  */
2637
 
2638
gfc_try gfc_check_symbol_typed (gfc_symbol*, gfc_namespace*, bool, locus);
2639
gfc_namespace* gfc_find_proc_namespace (gfc_namespace*);
2640
 
2641
bool gfc_is_associate_pointer (gfc_symbol*);
2642
gfc_symbol * gfc_find_dt_in_generic (gfc_symbol *);
2643
 
2644
/* intrinsic.c -- true if working in an init-expr, false otherwise.  */
2645
extern bool gfc_init_expr_flag;
2646
 
2647
/* Given a symbol that we have decided is intrinsic, mark it as such
2648
   by placing it into a special module that is otherwise impossible to
2649
   read or write.  */
2650
 
2651
#define gfc_intrinsic_symbol(SYM) SYM->module = gfc_get_string ("(intrinsic)")
2652
 
2653
void gfc_intrinsic_init_1 (void);
2654
void gfc_intrinsic_done_1 (void);
2655
 
2656
char gfc_type_letter (bt);
2657
gfc_symbol * gfc_get_intrinsic_sub_symbol (const char *);
2658
gfc_try gfc_convert_type (gfc_expr *, gfc_typespec *, int);
2659
gfc_try gfc_convert_type_warn (gfc_expr *, gfc_typespec *, int, int);
2660
gfc_try gfc_convert_chartype (gfc_expr *, gfc_typespec *);
2661
int gfc_generic_intrinsic (const char *);
2662
int gfc_specific_intrinsic (const char *);
2663
bool gfc_is_intrinsic (gfc_symbol*, int, locus);
2664
int gfc_intrinsic_actual_ok (const char *, const bool);
2665
gfc_intrinsic_sym *gfc_find_function (const char *);
2666
gfc_intrinsic_sym *gfc_find_subroutine (const char *);
2667
gfc_intrinsic_sym *gfc_intrinsic_function_by_id (gfc_isym_id);
2668
 
2669
match gfc_intrinsic_func_interface (gfc_expr *, int);
2670
match gfc_intrinsic_sub_interface (gfc_code *, int);
2671
 
2672
void gfc_warn_intrinsic_shadow (const gfc_symbol*, bool, bool);
2673
gfc_try gfc_check_intrinsic_standard (const gfc_intrinsic_sym*, const char**,
2674
                                      bool, locus);
2675
 
2676
/* match.c -- FIXME */
2677
void gfc_free_iterator (gfc_iterator *, int);
2678
void gfc_free_forall_iterator (gfc_forall_iterator *);
2679
void gfc_free_alloc_list (gfc_alloc *);
2680
void gfc_free_namelist (gfc_namelist *);
2681
void gfc_free_equiv (gfc_equiv *);
2682
void gfc_free_equiv_until (gfc_equiv *, gfc_equiv *);
2683
void gfc_free_data (gfc_data *);
2684
void gfc_free_case_list (gfc_case *);
2685
 
2686
/* matchexp.c -- FIXME too?  */
2687
gfc_expr *gfc_get_parentheses (gfc_expr *);
2688
 
2689
/* openmp.c */
2690
struct gfc_omp_saved_state { void *ptrs[2]; int ints[1]; };
2691
void gfc_free_omp_clauses (gfc_omp_clauses *);
2692
void gfc_resolve_omp_directive (gfc_code *, gfc_namespace *);
2693
void gfc_resolve_do_iterator (gfc_code *, gfc_symbol *);
2694
void gfc_resolve_omp_parallel_blocks (gfc_code *, gfc_namespace *);
2695
void gfc_resolve_omp_do_blocks (gfc_code *, gfc_namespace *);
2696
void gfc_omp_save_and_clear_state (struct gfc_omp_saved_state *);
2697
void gfc_omp_restore_state (struct gfc_omp_saved_state *);
2698
 
2699
/* expr.c */
2700
void gfc_free_actual_arglist (gfc_actual_arglist *);
2701
gfc_actual_arglist *gfc_copy_actual_arglist (gfc_actual_arglist *);
2702
const char *gfc_extract_int (gfc_expr *, int *);
2703
bool is_subref_array (gfc_expr *);
2704
bool gfc_is_simply_contiguous (gfc_expr *, bool);
2705
 
2706
gfc_expr *gfc_build_conversion (gfc_expr *);
2707
void gfc_free_ref_list (gfc_ref *);
2708
void gfc_type_convert_binary (gfc_expr *, int);
2709
int gfc_is_constant_expr (gfc_expr *);
2710
gfc_try gfc_simplify_expr (gfc_expr *, int);
2711
int gfc_has_vector_index (gfc_expr *);
2712
 
2713
gfc_expr *gfc_get_expr (void);
2714
gfc_expr *gfc_get_array_expr (bt type, int kind, locus *);
2715
gfc_expr *gfc_get_null_expr (locus *);
2716
gfc_expr *gfc_get_operator_expr (locus *, gfc_intrinsic_op,gfc_expr *, gfc_expr *);
2717
gfc_expr *gfc_get_structure_constructor_expr (bt, int, locus *);
2718
gfc_expr *gfc_get_constant_expr (bt, int, locus *);
2719
gfc_expr *gfc_get_character_expr (int, locus *, const char *, int len);
2720
gfc_expr *gfc_get_int_expr (int, locus *, int);
2721
gfc_expr *gfc_get_logical_expr (int, locus *, bool);
2722
gfc_expr *gfc_get_iokind_expr (locus *, io_kind);
2723
 
2724
void gfc_clear_shape (mpz_t *shape, int rank);
2725
void gfc_free_shape (mpz_t **shape, int rank);
2726
void gfc_free_expr (gfc_expr *);
2727
void gfc_replace_expr (gfc_expr *, gfc_expr *);
2728
mpz_t *gfc_copy_shape (mpz_t *, int);
2729
mpz_t *gfc_copy_shape_excluding (mpz_t *, int, gfc_expr *);
2730
gfc_expr *gfc_copy_expr (gfc_expr *);
2731
gfc_ref* gfc_copy_ref (gfc_ref*);
2732
 
2733
gfc_try gfc_specification_expr (gfc_expr *);
2734
 
2735
int gfc_numeric_ts (gfc_typespec *);
2736
int gfc_kind_max (gfc_expr *, gfc_expr *);
2737
 
2738
gfc_try gfc_check_conformance (gfc_expr *, gfc_expr *, const char *, ...) ATTRIBUTE_PRINTF_3;
2739
gfc_try gfc_check_assign (gfc_expr *, gfc_expr *, int);
2740
gfc_try gfc_check_pointer_assign (gfc_expr *, gfc_expr *);
2741
gfc_try gfc_check_assign_symbol (gfc_symbol *, gfc_expr *);
2742
 
2743
bool gfc_has_default_initializer (gfc_symbol *);
2744
gfc_expr *gfc_default_initializer (gfc_typespec *);
2745
gfc_expr *gfc_get_variable_expr (gfc_symtree *);
2746
gfc_expr * gfc_lval_expr_from_sym (gfc_symbol *);
2747
 
2748
gfc_array_spec *gfc_get_full_arrayspec_from_expr (gfc_expr *expr);
2749
 
2750
bool gfc_traverse_expr (gfc_expr *, gfc_symbol *,
2751
                        bool (*)(gfc_expr *, gfc_symbol *, int*),
2752
                        int);
2753
void gfc_expr_set_symbols_referenced (gfc_expr *);
2754
gfc_try gfc_expr_check_typed (gfc_expr*, gfc_namespace*, bool);
2755
void gfc_expr_replace_symbols (gfc_expr *, gfc_symbol *);
2756
void gfc_expr_replace_comp (gfc_expr *, gfc_component *);
2757
 
2758
bool gfc_is_proc_ptr_comp (gfc_expr *, gfc_component **);
2759
 
2760
bool gfc_ref_this_image (gfc_ref *ref);
2761
bool gfc_is_coindexed (gfc_expr *);
2762
bool gfc_is_coarray (gfc_expr *);
2763
int gfc_get_corank (gfc_expr *);
2764
bool gfc_has_ultimate_allocatable (gfc_expr *);
2765
bool gfc_has_ultimate_pointer (gfc_expr *);
2766
 
2767
gfc_expr* gfc_build_intrinsic_call (const char*, locus, unsigned, ...);
2768
gfc_try gfc_check_vardef_context (gfc_expr*, bool, bool, const char*);
2769
 
2770
 
2771
/* st.c */
2772
extern gfc_code new_st;
2773
 
2774
void gfc_clear_new_st (void);
2775
gfc_code *gfc_get_code (void);
2776
gfc_code *gfc_append_code (gfc_code *, gfc_code *);
2777
void gfc_free_statement (gfc_code *);
2778
void gfc_free_statements (gfc_code *);
2779
void gfc_free_association_list (gfc_association_list *);
2780
 
2781
/* resolve.c */
2782
gfc_try gfc_resolve_expr (gfc_expr *);
2783
void gfc_resolve (gfc_namespace *);
2784
void gfc_resolve_blocks (gfc_code *, gfc_namespace *);
2785
int gfc_impure_variable (gfc_symbol *);
2786
int gfc_pure (gfc_symbol *);
2787
int gfc_implicit_pure (gfc_symbol *);
2788
int gfc_elemental (gfc_symbol *);
2789
gfc_try gfc_resolve_iterator (gfc_iterator *, bool);
2790
gfc_try find_forall_index (gfc_expr *, gfc_symbol *, int);
2791
gfc_try gfc_resolve_index (gfc_expr *, int);
2792
gfc_try gfc_resolve_dim_arg (gfc_expr *);
2793
int gfc_is_formal_arg (void);
2794
void gfc_resolve_substring_charlen (gfc_expr *);
2795
match gfc_iso_c_sub_interface(gfc_code *, gfc_symbol *);
2796
gfc_expr *gfc_expr_to_initialize (gfc_expr *);
2797
bool gfc_type_is_extensible (gfc_symbol *sym);
2798
 
2799
 
2800
/* array.c */
2801
gfc_iterator *gfc_copy_iterator (gfc_iterator *);
2802
 
2803
void gfc_free_array_spec (gfc_array_spec *);
2804
gfc_array_ref *gfc_copy_array_ref (gfc_array_ref *);
2805
 
2806
gfc_try gfc_set_array_spec (gfc_symbol *, gfc_array_spec *, locus *);
2807
gfc_array_spec *gfc_copy_array_spec (gfc_array_spec *);
2808
gfc_try gfc_resolve_array_spec (gfc_array_spec *, int);
2809
 
2810
int gfc_compare_array_spec (gfc_array_spec *, gfc_array_spec *);
2811
 
2812
void gfc_simplify_iterator_var (gfc_expr *);
2813
gfc_try gfc_expand_constructor (gfc_expr *, bool);
2814
int gfc_constant_ac (gfc_expr *);
2815
int gfc_expanded_ac (gfc_expr *);
2816
gfc_try gfc_resolve_character_array_constructor (gfc_expr *);
2817
gfc_try gfc_resolve_array_constructor (gfc_expr *);
2818
gfc_try gfc_check_constructor_type (gfc_expr *);
2819
gfc_try gfc_check_iter_variable (gfc_expr *);
2820
gfc_try gfc_check_constructor (gfc_expr *, gfc_try (*)(gfc_expr *));
2821
gfc_try gfc_array_size (gfc_expr *, mpz_t *);
2822
gfc_try gfc_array_dimen_size (gfc_expr *, int, mpz_t *);
2823
gfc_try gfc_array_ref_shape (gfc_array_ref *, mpz_t *);
2824
gfc_array_ref *gfc_find_array_ref (gfc_expr *);
2825
tree gfc_conv_array_initializer (tree type, gfc_expr *);
2826
gfc_try spec_size (gfc_array_spec *, mpz_t *);
2827
gfc_try spec_dimen_size (gfc_array_spec *, int, mpz_t *);
2828
int gfc_is_compile_time_shape (gfc_array_spec *);
2829
 
2830
gfc_try gfc_ref_dimen_size (gfc_array_ref *, int dimen, mpz_t *, mpz_t *);
2831
 
2832
 
2833
/* interface.c -- FIXME: some of these should be in symbol.c */
2834
void gfc_free_interface (gfc_interface *);
2835
int gfc_compare_derived_types (gfc_symbol *, gfc_symbol *);
2836
int gfc_compare_types (gfc_typespec *, gfc_typespec *);
2837
int gfc_compare_interfaces (gfc_symbol*, gfc_symbol*, const char *, int, int,
2838
                            char *, int);
2839
void gfc_check_interfaces (gfc_namespace *);
2840
void gfc_procedure_use (gfc_symbol *, gfc_actual_arglist **, locus *);
2841
void gfc_ppc_use (gfc_component *, gfc_actual_arglist **, locus *);
2842
gfc_symbol *gfc_search_interface (gfc_interface *, int,
2843
                                  gfc_actual_arglist **);
2844
match gfc_extend_expr (gfc_expr *);
2845
void gfc_free_formal_arglist (gfc_formal_arglist *);
2846
gfc_try gfc_extend_assign (gfc_code *, gfc_namespace *);
2847
gfc_try gfc_add_interface (gfc_symbol *);
2848
gfc_interface *gfc_current_interface_head (void);
2849
void gfc_set_current_interface_head (gfc_interface *);
2850
gfc_symtree* gfc_find_sym_in_symtree (gfc_symbol*);
2851
bool gfc_arglist_matches_symbol (gfc_actual_arglist**, gfc_symbol*);
2852
bool gfc_check_operator_interface (gfc_symbol*, gfc_intrinsic_op, locus);
2853
int gfc_has_vector_subscript (gfc_expr*);
2854
gfc_intrinsic_op gfc_equivalent_op (gfc_intrinsic_op);
2855
gfc_try gfc_check_typebound_override (gfc_symtree*, gfc_symtree*);
2856
 
2857
/* io.c */
2858
extern gfc_st_label format_asterisk;
2859
 
2860
void gfc_free_open (gfc_open *);
2861
gfc_try gfc_resolve_open (gfc_open *);
2862
void gfc_free_close (gfc_close *);
2863
gfc_try gfc_resolve_close (gfc_close *);
2864
void gfc_free_filepos (gfc_filepos *);
2865
gfc_try gfc_resolve_filepos (gfc_filepos *);
2866
void gfc_free_inquire (gfc_inquire *);
2867
gfc_try gfc_resolve_inquire (gfc_inquire *);
2868
void gfc_free_dt (gfc_dt *);
2869
gfc_try gfc_resolve_dt (gfc_dt *, locus *);
2870
void gfc_free_wait (gfc_wait *);
2871
gfc_try gfc_resolve_wait (gfc_wait *);
2872
 
2873
/* module.c */
2874
void gfc_module_init_2 (void);
2875
void gfc_module_done_2 (void);
2876
void gfc_dump_module (const char *, int);
2877
bool gfc_check_symbol_access (gfc_symbol *);
2878
void gfc_free_use_stmts (gfc_use_list *);
2879
 
2880
/* primary.c */
2881
symbol_attribute gfc_variable_attr (gfc_expr *, gfc_typespec *);
2882
symbol_attribute gfc_expr_attr (gfc_expr *);
2883
match gfc_match_rvalue (gfc_expr **);
2884
match gfc_match_varspec (gfc_expr*, int, bool, bool);
2885
int gfc_check_digit (char, int);
2886
bool gfc_is_function_return_value (gfc_symbol *, gfc_namespace *);
2887
gfc_try gfc_convert_to_structure_constructor (gfc_expr *, gfc_symbol *,
2888
                                              gfc_expr **,
2889
                                              gfc_actual_arglist **, bool);
2890
 
2891
/* trans.c */
2892
void gfc_generate_code (gfc_namespace *);
2893
void gfc_generate_module_code (gfc_namespace *);
2894
void gfc_init_coarray_decl (bool);
2895
 
2896
/* trans-intrinsic.c */
2897
bool gfc_inline_intrinsic_function_p (gfc_expr *);
2898
 
2899
/* bbt.c */
2900
typedef int (*compare_fn) (void *, void *);
2901
void gfc_insert_bbt (void *, void *, compare_fn);
2902
void gfc_delete_bbt (void *, void *, compare_fn);
2903
 
2904
/* dump-parse-tree.c */
2905
void gfc_dump_parse_tree (gfc_namespace *, FILE *);
2906
 
2907
/* parse.c */
2908
gfc_try gfc_parse_file (void);
2909
void gfc_global_used (gfc_gsymbol *, locus *);
2910
gfc_namespace* gfc_build_block_ns (gfc_namespace *);
2911
 
2912
/* dependency.c */
2913
int gfc_dep_compare_functions (gfc_expr *, gfc_expr *, bool);
2914
int gfc_dep_compare_expr (gfc_expr *, gfc_expr *);
2915
 
2916
/* check.c */
2917
gfc_try gfc_check_same_strlen (const gfc_expr*, const gfc_expr*, const char*);
2918
gfc_try gfc_calculate_transfer_sizes (gfc_expr*, gfc_expr*, gfc_expr*,
2919
                                      size_t*, size_t*, size_t*);
2920
 
2921
/* class.c */
2922
void gfc_fix_class_refs (gfc_expr *e);
2923
void gfc_add_component_ref (gfc_expr *, const char *);
2924
void gfc_add_class_array_ref (gfc_expr *);
2925
#define gfc_add_data_component(e)     gfc_add_component_ref(e,"_data")
2926
#define gfc_add_vptr_component(e)     gfc_add_component_ref(e,"_vptr")
2927
#define gfc_add_hash_component(e)     gfc_add_component_ref(e,"_hash")
2928
#define gfc_add_size_component(e)     gfc_add_component_ref(e,"_size")
2929
#define gfc_add_def_init_component(e) gfc_add_component_ref(e,"_def_init")
2930
bool gfc_is_class_array_ref (gfc_expr *, bool *);
2931
bool gfc_is_class_scalar_expr (gfc_expr *);
2932
gfc_expr *gfc_class_null_initializer (gfc_typespec *);
2933
unsigned int gfc_hash_value (gfc_symbol *);
2934
gfc_try gfc_build_class_symbol (gfc_typespec *, symbol_attribute *,
2935
                                gfc_array_spec **, bool);
2936
gfc_symbol *gfc_find_derived_vtab (gfc_symbol *);
2937
gfc_symtree* gfc_find_typebound_proc (gfc_symbol*, gfc_try*,
2938
                                      const char*, bool, locus*);
2939
gfc_symtree* gfc_find_typebound_user_op (gfc_symbol*, gfc_try*,
2940
                                         const char*, bool, locus*);
2941
gfc_typebound_proc* gfc_find_typebound_intrinsic_op (gfc_symbol*, gfc_try*,
2942
                                                     gfc_intrinsic_op, bool,
2943
                                                     locus*);
2944
gfc_symtree* gfc_get_tbp_symtree (gfc_symtree**, const char*);
2945
 
2946
#define CLASS_DATA(sym) sym->ts.u.derived->components
2947
 
2948
/* frontend-passes.c */
2949
 
2950
void gfc_run_passes (gfc_namespace *);
2951
 
2952
typedef int (*walk_code_fn_t) (gfc_code **, int *, void *);
2953
typedef int (*walk_expr_fn_t) (gfc_expr **, int *, void *);
2954
 
2955
int gfc_expr_walker (gfc_expr **, walk_expr_fn_t, void *);
2956
int gfc_code_walker (gfc_code **, walk_code_fn_t, walk_expr_fn_t, void *);
2957
 
2958
#endif /* GCC_GFORTRAN_H  */

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.