annotate gcc/fortran/gfortran.h @ 143:76e1cf5455ef

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