xref: /openbsd/gnu/usr.bin/gcc/gcc/f/symbol.def (revision c87b03e5)
1/* Definitions and documentations for attributes used in GNU F77 compiler
2   Copyright (C) 1995, 1996 Free Software Foundation, Inc.
3   Contributed by James Craig Burley.
4
5This file is part of GNU Fortran.
6
7GNU Fortran is free software; you can redistribute it and/or modify
8it under the terms of the GNU General Public License as published by
9the Free Software Foundation; either version 2, or (at your option)
10any later version.
11
12GNU Fortran is distributed in the hope that it will be useful,
13but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15GNU General Public License for more details.
16
17You should have received a copy of the GNU General Public License
18along with GNU Fortran; see the file COPYING.  If not, write to
19the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
2002111-1307, USA.  */
21
22/* "How g77 learns about symbols"
23
24   There are three primary things in a symbol that g77 uses to keep
25   track of what it has learned about that symbol:
26
27   1.  The state
28   2.  The attributes
29   3.  The info
30
31   State, attributes, and info (see f-info* files) all start out with
32   "NONE" fields when a symbol is first created.
33
34   In a PROGRAM or BLOCK DATA program unit, info where cannot be DUMMY
35   or RESULT.  Any combinations including those possibilities are not
36   considered possible in such program units.
37
38   As soon as a symbol is created, it _must_ have its state changed to
39   SEEN, UNCERTAIN, or UNDERSTOOD.
40
41   If SEEN, some info might be set, such as the type info (as in when
42   the TYPE attribute is present) or kind/where info.
43
44   If UNCERTAIN, the permitted combinations of attributes and info are
45   listed below.  Only the attributes ACTUALARG, ADJUSTABLE, ANYLEN, ARRAY,
46   DUMMY, EXTERNAL, SFARG, and TYPE are permitted.  (All these attributes
47   are contrasted to each attribute below, even though some combinations
48   wouldn't be permitted in SEEN state either.)  Note that DUMMY and
49   RESULT are not permitted in a PROGRAM/BLOCKDATA program unit, which
50   results in some of the combinations below not occurring (not UNCERTAIN,
51   but UNDERSTOOD).
52
53   ANYLEN|TYPE & ~(ACTUALARG|ADJUSTABLE|ARRAY|DUMMY|EXTERNAL|SFARG):
54	ENTITY/DUMMY, ENTITY/RESULT, FUNCTION/INTRINSIC.
55
56   ARRAY & ~(ACTUALARG|ANYLEN|DUMMY|EXTERNAL|SFARG|TYPE):
57	ENTITY/DUMMY, ENTITY/LOCAL.
58
59   ARRAY|TYPE & ~(ACTUALARG|ANYLEN|DUMMY|EXTERNAL|SFARG):
60	ENTITY/DUMMY, ENTITY/LOCAL.
61
62   DUMMY & ~(ACTUALARG|ADJUSTABLE|ANYLEN|ARRAY|EXTERNAL|SFARG|TYPE):
63	ENTITY/DUMMY, FUNCTION/DUMMY, SUBROUTINE/DUMMY.
64
65   DUMMY|TYPE & ~(ACTUALARG|ADJUSTABLE|ANYLEN|ARRAY|EXTERNAL|SFARG):
66	ENTITY/DUMMY, FUNCTION/DUMMY.
67
68   EXTERNAL & ~(ACTUALARG|ADJUSTABLE|ANYLEN|ARRAY|DUMMY|SFARG|TYPE):
69	FUNCTION/DUMMY, FUNCTION/GLOBAL, SUBROUTINE/DUMMY,
70	SUBROUTINE/GLOBAL, BLOCKDATA/GLOBAL.
71
72   EXTERNAL|ACTUALARG & ~(ADJUSTABLE|ANYLEN|ARRAY|DUMMY|SFARG|TYPE):
73	FUNCTION/GLOBAL, SUBROUTINE/GLOBAL.
74
75   EXTERNAL|DUMMY & ~(ACTUALARG|ADJUSTABLE|ANYLEN|ARRAY|SFARG|TYPE):
76	FUNCTION/DUMMY, SUBROUTINE/DUMMY.
77
78   EXTERNAL|TYPE & ~(ACTUALARG|ADJUSTABLE|ANYLEN|ARRAY|DUMMY|SFARG):
79	FUNCTION/DUMMY, FUNCTION/GLOBAL.
80
81   SFARG & ~(ACTUALARG|ADJUSTABLE|ANYLEN|ARRAY|DUMMY|EXTERNAL|TYPE):
82	ENTITY/DUMMY, ENTITY/LOCAL.
83
84   SFARG|TYPE & ~(ACTUALARG|ADJUSTABLE|ANYLEN|ARRAY|DUMMY|EXTERNAL):
85	ENTITY/DUMMY, ENTITY/LOCAL.
86
87   TYPE & ~(ACTUALARG|ANYLEN|ARRAY|DUMMY|EXTERNAL|SFARG):
88	ENTITY/DUMMY, ENTITY/LOCAL, ENTITY/RESULT, FUNCTION/DUMMY,
89	FUNCTION/GLOBAL, FUNCTION/INTRINSIC.
90
91   If UNDERSTOOD, the attributes are no longer considered, and the info
92   field is considered to be as fully filled in as possible by analyzing
93   a single program unit.
94
95   Each of the attributes (used only for SEEN/UNCERTAIN states) is
96   defined and described below.  In many cases, a symbol starts out as
97   SEEN and has attributes set as it is seen in various contexts prior
98   to the first executable statement being seen (the "exec transition").
99   Once that happens, either it becomes immediately UNDERSTOOD and all
100   its info filled in, or it becomes UNCERTAIN and its info only partially
101   filled in until it becomes UNDERSTOOD.  While UNCERTAIN, only a
102   subset of attributes are possible/important.
103
104   Not all symbols reach the UNDERSTOOD state, and in some cases symbols
105   go immediately from NONE to the UNDERSTOOD or even UNCERTAIN state.
106   For example, given "PROGRAM FOO", everything is known about the name
107   "FOO", so it becomes immediately UNDERSTOOD.
108
109   Also, there are multiple name spaces, and not all attributes are
110   possible/permitted in all name spaces.
111
112   The only attributes permitted in the global name space are:
113
114   ANY, CBLOCK, SAVECBLOCK.
115
116   The only attributes permitted in the local name space are:
117
118   ANY, ACTUALARG, ADJUSTABLE, ADJUSTS, ANYLEN, ANYSIZE, ARRAY, COMMON,
119   DUMMY, EQUIV, EXTERNAL, INIT, INTRINSIC, NAMELIST, RESULT, SAVE, SFARG,
120   SFUNC, TYPE.
121
122   In the stmt-func name space, no attributes are used, just the states.
123
124*/
125
126
127/* Actual argument.  Always accompanied by EXTERNAL.
128
129   Context is a name used as an actual argument passed to a procedure
130   other than a statement function.
131
132   Valid in UNCERTAIN state and local name space only.
133
134   This attribute is used only to flag the fact that an EXTERNAL'ed name
135   has been seen as an actual argument, and therefore cannot be
136   discovered later to be a DUMMY argument (via an ENTRY statement).
137
138   If DUMMY + EXTERNAL already, it is permitted to see the name
139   as an actual argument, but ACTUALARG is not added as an attribute since
140   that fact does not improve knowledge about the name.  Hence it is not
141   permitted to transition ACTUALARG + EXTERNAL += DUMMY, and the
142   transition DUMMY + EXTERNAL += ACTUALARG is not actually done.
143
144   Cannot be combined with: ANYLEN, ARRAY, DUMMY, SFARG, TYPE.
145
146   Can be combined with: ACTUALARG, ANY, EXTERNAL.
147
148   Unrelated: ADJUSTABLE, ADJUSTS, ANYSIZE, CBLOCK, COMMON, EQUIV, INIT,
149   INTRINSIC, NAMELIST, RESULT, SAVE, SAVECBLOCK, SFUNC.
150
151*/
152
153DEFATTR (FFESYMBOL_attrACTUALARG, FFESYMBOL_attrsACTUALARG, "ACTUALARG")
154#ifndef FFESYMBOL_attrsACTUALARG
155#define FFESYMBOL_attrsACTUALARG ((ffesymbolAttrs) 1 << FFESYMBOL_attrACTUALARG)
156#endif
157
158/* Has adjustable dimension(s).  Always accompanied by ARRAY.
159
160   Context is an ARRAY-attributed name with an adjustable dimension (at
161   least one dimension containing a variable reference).
162
163   Valid in SEEN state and local name space only.
164
165   Cannot be combined with: ADJUSTABLE, ADJUSTS, COMMON, EQUIV, EXTERNAL,
166   NAMELIST, INIT, INTRINSIC, RESULT, SAVE, SFARG, SFUNC.
167
168   Can be combined with: ANY, ANYLEN, ANYSIZE, ARRAY, TYPE.
169
170   Must be combined with: DUMMY.
171
172   Unrelated: ACTUALARG, CBLOCK, SAVECBLOCK.
173
174*/
175
176DEFATTR (FFESYMBOL_attrADJUSTABLE, FFESYMBOL_attrsADJUSTABLE, "ADJUSTABLE")
177#ifndef FFESYMBOL_attrsADJUSTABLE
178#define FFESYMBOL_attrsADJUSTABLE ((ffesymbolAttrs) 1 << FFESYMBOL_attrADJUSTABLE)
179#endif
180
181/* Adjusts an array.
182
183   Context is an expression in an array declarator, such as in a
184   DIMENSION, COMMON, or type-specification statement.
185
186   Valid in SEEN state and local name space only.
187
188   Cannot be combined with: ADJUSTABLE, ANYLEN, ANYSIZE, ARRAY,
189   EXTERNAL, INTRINSIC, RESULT, SAVE, SFUNC.
190
191   Can be combined with: ADJUSTS, ANY, COMMON, DUMMY, EQUIV, INIT,
192   NAMELIST, SFARG, TYPE.
193
194   Unrelated: ACTUALARG, CBLOCK, SAVECBLOCK.
195
196*/
197
198DEFATTR (FFESYMBOL_attrADJUSTS, FFESYMBOL_attrsADJUSTS, "ADJUSTS")
199#ifndef FFESYMBOL_attrsADJUSTS
200#define FFESYMBOL_attrsADJUSTS ((ffesymbolAttrs) 1 << FFESYMBOL_attrADJUSTS)
201#endif
202
203/* Can be anything now, diagnostic has been issued at least once.
204
205   Valid in UNDERSTOOD state only.  Valid in any name space.
206
207   Can be combined with anything.
208
209*/
210
211DEFATTR (FFESYMBOL_attrANY, FFESYMBOL_attrsANY, "ANY")
212#ifndef FFESYMBOL_attrsANY
213#define FFESYMBOL_attrsANY ((ffesymbolAttrs) 1 << FFESYMBOL_attrANY)
214#endif
215
216/* Assumed (any) length.  Always accompanied by TYPE.
217
218   Context is a name listed in a CHARACTER statement and given a length
219   specification of (*).
220
221   Valid in SEEN and UNCERTAIN states.  Valid in local name space only.
222
223   In SEEN state, attributes marked below with "=" are unrelated.
224
225   In UNCERTAIN state, attributes marked below with "+" are unrelated,
226   attributes marked below with "-" cannot be combined with ANYLEN,
227   and attributes marked below with "!" transition to state UNDERSTOOD
228   instead of acquiring the new attribute.  Any other subsequent mentioning
229   of the name transitions to state UNDERSTOOD.  UNCERTAIN state is not
230   valid for this attribute in PROGRAM/BLOCKDATA program unit.
231
232   Cannot be combined with: ACTUALARG=, ADJUSTS+, ANYLEN, COMMON+, EQUIV+,
233   EXTERNAL, INIT+, INTRINSIC+, NAMELIST+, SAVE+, SFARG, SFUNC+.
234
235   Can be combined with: ADJUSTABLE+, ANY, ANYSIZE+, ARRAY-, DUMMY!, RESULT+,
236   TYPE.
237
238   Unrelated: CBLOCK, SAVECBLOCK.
239
240   In PROGRAM/BLOCKDATA, cannot be combined with ARRAY.
241
242*/
243
244DEFATTR (FFESYMBOL_attrANYLEN, FFESYMBOL_attrsANYLEN, "ANYLEN")
245#ifndef FFESYMBOL_attrsANYLEN
246#define FFESYMBOL_attrsANYLEN ((ffesymbolAttrs) 1 << FFESYMBOL_attrANYLEN)
247#endif
248
249/* Has assumed (any) size.  Always accompanied by ARRAY.
250
251   Context is an ARRAY-attributed name with its last dimension having
252   an upper bound of "*".
253
254   Valid in SEEN state and local name space only.
255
256   Cannot be combined with: ADJUSTS, ANYSIZE, COMMON, EQUIV, EXTERNAL,
257   NAMELIST, INIT, INTRINSIC, RESULT, SAVE, SFARG, SFUNC.
258
259   Can be combined with: ADJUSTABLE, ANY, ANYLEN, ARRAY, TYPE.
260
261   Must be combined with: DUMMY.
262
263   Unrelated: ACTUALARG, CBLOCK, SAVECBLOCK.
264
265*/
266
267DEFATTR (FFESYMBOL_attrANYSIZE, FFESYMBOL_attrsANYSIZE, "ANYSIZE")
268#ifndef FFESYMBOL_attrsANYSIZE
269#define FFESYMBOL_attrsANYSIZE ((ffesymbolAttrs) 1 << FFESYMBOL_attrANYSIZE)
270#endif
271
272/* Array.
273
274   Context is a name followed by an array declarator, such as in a
275   type-statement-decl, a DIMENSION statement, or a COMMON statement.
276
277   Valid in SEEN and UNCERTAIN states.  Valid in local name space only.
278
279   In SEEN state, attributes marked below with "=" are unrelated.
280
281   In UNCERTAIN state, attributes marked below with "+" are unrelated,
282   attributes marked below with "-" cannot be combined with ARRAY,
283   and attributes marked below with "!" transition to state UNDERSTOOD
284   instead of acquiring the new attribute.  Any other subsequent mentioning
285   of the name transitions to state UNDERSTOOD.  UNCERTAIN state is not
286   valid for this attribute in PROGRAM/BLOCKDATA program unit.
287
288   Cannot be combined with: ACTUALARG=, ADJUSTS+, ARRAY, EXTERNAL,
289   INTRINSIC+, RESULT+, SFARG, SFUNC+.
290
291   Can be combined with: ADJUSTABLE+, ANY, ANYLEN-, ANYSIZE+, COMMON+,
292   DUMMY!, EQUIV+, INIT+, NAMELIST+, SAVE+, TYPE.
293
294   Unrelated: CBLOCK, SAVECBLOCK.
295
296   In PROGRAM/BLOCKDATA, cannot be combined with ANYLEN.
297   Cannot follow INIT.
298
299*/
300
301DEFATTR (FFESYMBOL_attrARRAY, FFESYMBOL_attrsARRAY, "ARRAY")
302#ifndef FFESYMBOL_attrsARRAY
303#define FFESYMBOL_attrsARRAY ((ffesymbolAttrs) 1 << FFESYMBOL_attrARRAY)
304#endif
305
306/* COMMON block.
307
308   Context is a name enclosed in slashes in a COMMON statement.
309
310   Valid in SEEN state and global name space only.
311
312   Cannot be combined with:
313
314   Can be combined with: CBLOCK, SAVECBLOCK.
315
316   Unrelated: ACTUALARG, ADJUSTABLE, ADJUSTS, ANY, ANYLEN, ANYSIZE,
317   ARRAY, COMMON, DUMMY, EQUIV, EXTERNAL, INIT, INTRINSIC, NAMELIST,
318   RESULT, SAVE, SFARG, SFUNC, TYPE.
319
320*/
321
322DEFATTR (FFESYMBOL_attrCBLOCK, FFESYMBOL_attrsCBLOCK, "CBLOCK")
323#ifndef FFESYMBOL_attrsCBLOCK
324#define FFESYMBOL_attrsCBLOCK ((ffesymbolAttrs) 1 << FFESYMBOL_attrCBLOCK)
325#endif
326
327/* Placed in COMMON.
328
329   Context is a name listed in a COMMON statement but not enclosed in
330   slashes.
331
332   Valid in SEEN state and local name space only.
333
334   Cannot be combined with: ADJUSTABLE, ANYLEN, ANYSIZE, COMMON, DUMMY,
335   EXTERNAL, INTRINSIC, RESULT, SAVE, SFUNC.
336
337   Can be combined with: ADJUSTS, ANY, ARRAY, EQUIV, INIT, NAMELIST,
338   SFARG, TYPE.
339
340   Unrelated: ACTUALARG, CBLOCK, SAVECBLOCK.
341
342*/
343
344DEFATTR (FFESYMBOL_attrCOMMON, FFESYMBOL_attrsCOMMON, "COMMON")
345#ifndef FFESYMBOL_attrsCOMMON
346#define FFESYMBOL_attrsCOMMON ((ffesymbolAttrs) 1 << FFESYMBOL_attrCOMMON)
347#endif
348
349/* Dummy argument.
350
351   Context is a name listed in the arglist of FUNCTION, SUBROUTINE, ENTRY.
352   (Statement-function definitions have dummy arguments, but since they're
353   the only possible entities in the statement-function name space, this
354   attribution mechanism isn't used for them.)
355
356   Valid in SEEN and UNCERTAIN states.  Valid in local name space only.
357
358   In SEEN state, attributes marked below with "=" are unrelated.
359
360   In UNCERTAIN state, attributes marked below with "+" are unrelated,
361   attributes marked below with "-" cannot be combined with DUMMY,
362   and attributes marked below with "!" transition to state UNDERSTOOD
363   instead of acquiring the new attribute.  Any other subsequent mentioning
364   of the name transitions to state UNDERSTOOD.  UNCERTAIN state is not
365   valid for this attribute in PROGRAM/BLOCKDATA program unit.
366
367   Cannot be combined with: ACTUALARG=, COMMON+, EQUIV+, INIT+, INTRINSIC+,
368   NAMELIST+, RESULT+, SAVE+, SFUNC+.
369
370   Can be combined with: ADJUSTABLE+, ADJUSTS+, ANY, ANYLEN-, ANYSIZE+,
371   ARRAY-, DUMMY, EXTERNAL, SFARG-, TYPE.
372
373   Unrelated: CBLOCK, SAVECBLOCK.
374
375   VXT Fortran disallows DUMMY + NAMELIST.
376   F90 allows DUMMY + NAMELIST (with some restrictions), g77 doesn't yet.
377
378*/
379
380DEFATTR (FFESYMBOL_attrDUMMY, FFESYMBOL_attrsDUMMY, "DUMMY")
381#ifndef FFESYMBOL_attrsDUMMY
382#define FFESYMBOL_attrsDUMMY ((ffesymbolAttrs) 1 << FFESYMBOL_attrDUMMY)
383#endif
384
385/* EQUIVALENCE'd.
386
387   Context is a name given in an EQUIVALENCE statement.
388
389   Valid in SEEN state and local name space only.
390
391   Cannot be combined with: ADJUSTABLE, ANYLEN, ANYSIZE, DUMMY,
392   EXTERNAL, INTRINSIC, RESULT, SFUNC.
393
394   Can be combined with: ADJUSTS, ANY, ARRAY, COMMON, EQUIV, INIT,
395   NAMELIST, SAVE, SFARG, TYPE.
396
397   Unrelated: ACTUALARG, CBLOCK, SAVECBLOCK.
398
399*/
400
401DEFATTR (FFESYMBOL_attrEQUIV, FFESYMBOL_attrsEQUIV, "EQUIV")
402#ifndef FFESYMBOL_attrsEQUIV
403#define FFESYMBOL_attrsEQUIV ((ffesymbolAttrs) 1 << FFESYMBOL_attrEQUIV)
404#endif
405
406/* EXTERNAL.
407
408   Context is a name listed in an EXTERNAL statement.
409
410   Valid in SEEN and UNCERTAIN states.  Valid in local name space only.
411
412   In SEEN state, attributes marked below with "=" are unrelated.
413
414   In UNCERTAIN state, attributes marked below with "+" are unrelated,
415   attributes marked below with "-" cannot be combined with EXTERNAL,
416   and attributes marked below with "!" transition to state UNDERSTOOD
417   instead of acquiring the new attribute.  Many other subsequent mentionings
418   of the name transitions to state UNDERSTOOD.  UNCERTAIN state is not
419   valid for this attribute in PROGRAM/BLOCKDATA program unit.
420
421   Cannot be combined with: ADJUSTABLE+, ADJUSTS+, ANYLEN, ANYSIZE+,
422   ARRAY, COMMON+, EQUIV+, EXTERNAL, INIT+, INTRINSIC+, NAMELIST+, RESULT+,
423   SAVE+, SFARG, SFUNC+.
424
425   Can be combined with: ACTUALARG=, ANY, DUMMY, TYPE.
426
427   Unrelated: CBLOCK, SAVECBLOCK.
428
429*/
430
431DEFATTR (FFESYMBOL_attrEXTERNAL, FFESYMBOL_attrsEXTERNAL, "EXTERNAL")
432#ifndef FFESYMBOL_attrsEXTERNAL
433#define FFESYMBOL_attrsEXTERNAL ((ffesymbolAttrs) 1 << FFESYMBOL_attrEXTERNAL)
434#endif
435
436/* Given an initial value.
437
438   Context is a name listed in a type-def-stmt such as INTEGER or REAL
439   and given an initial value or values.  Someday will also include
440   names in DATA statements, which currently immediately exec-transition
441   their targets.
442
443   Valid in SEEN state and local name space only.
444
445   Cannot be combined with: ADJUSTABLE, ANYLEN, ANYSIZE, DUMMY, EXTERNAL,
446   INIT, INTRINSIC, RESULT, SFUNC.
447
448   Can be combined with: ADJUSTS, ANY, ARRAY, COMMON, EQUIV, NAMELIST,
449   SAVE, SFARG, TYPE.
450
451   Unrelated: ACTUALARG, CBLOCK, SAVECBLOCK.
452
453   Cannot be followed by ARRAY.
454
455*/
456
457DEFATTR (FFESYMBOL_attrINIT, FFESYMBOL_attrsINIT, "INIT")
458#ifndef FFESYMBOL_attrsINIT
459#define FFESYMBOL_attrsINIT ((ffesymbolAttrs) 1 << FFESYMBOL_attrINIT)
460#endif
461
462/* INTRINSIC.
463
464   Context is a name listed in an INTRINSIC statement.
465
466   Valid in SEEN state and local name space only.
467
468   Cannot be combined with: ADJUSTABLE, ADJUSTS, ANYLEN, ANYSIZE, ARRAY,
469   COMMON, DUMMY, EQUIV, EXTERNAL, INIT, INTRINSIC, NAMELIST, RESULT,
470   SAVE, SFARG, SFUNC.
471
472   Can be combined with: ANY, TYPE.
473
474   Unrelated: ACTUALARG, CBLOCK, SAVECBLOCK.
475
476*/
477
478DEFATTR (FFESYMBOL_attrINTRINSIC, FFESYMBOL_attrsINTRINSIC, "INTRINSIC")
479#ifndef FFESYMBOL_attrsINTRINSIC
480#define FFESYMBOL_attrsINTRINSIC ((ffesymbolAttrs) 1 << FFESYMBOL_attrINTRINSIC)
481#endif
482
483/* NAMELISTed.
484
485   Context is a name listed in a NAMELIST statement but not enclosed in
486   slashes.
487
488   Valid in SEEN state and local name space only.
489
490   Cannot be combined with: ADJUSTABLE, ANYLEN, ANYSIZE, DUMMY, EXTERNAL,
491   INTRINSIC, RESULT, SFUNC.
492
493   Can be combined with: ADJUSTS, ANY, ARRAY, COMMON, EQUIV, INIT,
494   NAMELIST, SAVE, SFARG, TYPE.
495
496   Unrelated: ACTUALARG, CBLOCK, SAVECBLOCK.
497
498*/
499
500DEFATTR (FFESYMBOL_attrNAMELIST, FFESYMBOL_attrsNAMELIST, "NAMELIST")
501#ifndef FFESYMBOL_attrsNAMELIST
502#define FFESYMBOL_attrsNAMELIST ((ffesymbolAttrs) 1 << FFESYMBOL_attrNAMELIST)
503#endif
504
505/* RESULT of a function.
506
507   Context is name in RESULT() clause in FUNCTION or ENTRY statement, or
508   the name in a FUNCTION or ENTRY statement (within a FUNCTION subprogram)
509   that has no RESULT() clause.
510
511   Valid in SEEN state and local name space only.
512
513   Cannot be combined with: ADJUSTABLE, ADJUSTS, ANYSIZE, ARRAY, COMMON,
514   DUMMY, EQUIV, EXTERNAL, INIT, INTRINSIC, NAMELIST, RESULT, SAVE, SFUNC.
515
516   Can be combined with: ANY, ANYLEN, SFARG, TYPE.
517
518   Unrelated: ACTUALARG, CBLOCK, SAVECBLOCK.
519
520   Cannot be preceded by SFARG.
521
522*/
523
524DEFATTR (FFESYMBOL_attrRESULT, FFESYMBOL_attrsRESULT, "RESULT")
525#ifndef FFESYMBOL_attrsRESULT
526#define FFESYMBOL_attrsRESULT ((ffesymbolAttrs) 1 << FFESYMBOL_attrRESULT)
527#endif
528
529/* SAVEd (not enclosed in slashes).
530
531   Context is a name listed in a SAVE statement but not enclosed in slashes.
532
533   Valid in SEEN state and local name space only.
534
535   Cannot be combined with: ADUSTABLE, ADJUSTS, ANYLEN, ANYSIZE, COMMON,
536   DUMMY, EXTERNAL, INTRINSIC, RESULT, SAVE, SFUNC.
537
538   Can be combined with: ANY, ARRAY, EQUIV, INIT, NAMELIST,
539   SFARG, TYPE.
540
541   Unrelated: ACTUALARG, CBLOCK, SAVECBLOCK.
542
543*/
544
545DEFATTR (FFESYMBOL_attrSAVE, FFESYMBOL_attrsSAVE, "SAVE")
546#ifndef FFESYMBOL_attrsSAVE
547#define FFESYMBOL_attrsSAVE ((ffesymbolAttrs) 1 << FFESYMBOL_attrSAVE)
548#endif
549
550/* SAVEd (enclosed in slashes).
551
552   Context is a name enclosed in slashes in a SAVE statement.
553
554   Valid in SEEN state and global name space only.
555
556   Cannot be combined with: SAVECBLOCK.
557
558   Can be combined with: CBLOCK.
559
560   Unrelated: ACTUALARG, ADJUSTABLE, ADJUSTS, ANY, ANYLEN, ANYSIZE,
561   ARRAY, COMMON, DUMMY, EQUIV, EXTERNAL, INIT, INTRINSIC, NAMELIST,
562   RESULT, SAVE, SFARG, SFUNC, TYPE.
563
564*/
565
566DEFATTR (FFESYMBOL_attrSAVECBLOCK, FFESYMBOL_attrsSAVECBLOCK, "SAVECBLOCK")
567#ifndef FFESYMBOL_attrsSAVECBLOCK
568#define FFESYMBOL_attrsSAVECBLOCK ((ffesymbolAttrs) 1 << FFESYMBOL_attrSAVECBLOCK)
569#endif
570
571/* Name used as a statement function arg or DATA implied-DO iterator.
572
573   Context is a name listed in the arglist of statement-function-definition
574   or as the iterator in an implied-DO construct in a DATA statement.
575
576   Valid in SEEN and UNCERTAIN states.  Valid in local name space only.
577
578   In SEEN state, attributes marked below with "=" are unrelated.
579
580   In UNCERTAIN state, attributes marked below with "+" are unrelated,
581   attributes marked below with "-" cannot be combined with SFARG,
582   and attributes marked below with "!" transition to state UNDERSTOOD
583   instead of acquiring the new attribute.  Any other subsequent mentioning
584   of the name transitions to state UNDERSTOOD.  UNCERTAIN state is not
585   valid for this attribute in PROGRAM/BLOCKDATA program unit.
586
587   Cannot be combined with: ACTUALARG=, ADJUSTABLE+, ANYLEN, ANYSIZE+,
588   ARRAY, EXTERNAL, INTRINSIC+, SFUNC+.
589
590   Can be combined with: ADJUSTS+, ANY, COMMON+, DUMMY!, EQUIV+, INIT+,
591   NAMELIST+, RESULT+, SAVE+, SFARG, TYPE.
592
593   Unrelated: CBLOCK, SAVECBLOCK.
594
595   Cannot be followed by RESULT.
596
597*/
598
599DEFATTR (FFESYMBOL_attrSFARG, FFESYMBOL_attrsSFARG, "SFARG")
600#ifndef FFESYMBOL_attrsSFARG
601#define FFESYMBOL_attrsSFARG ((ffesymbolAttrs) 1 << FFESYMBOL_attrSFARG)
602#endif
603
604/* Statement function name.
605
606   Context is a statement-function-definition statement, the name being
607   defined.
608
609   Valid in SEEN state and local name space only.
610
611   Cannot be combined with: ADJUSTABLE, ADJUSTS, ANYLEN, ANYSIZE, ARRAY,
612   COMMON, DUMMY, EQUIV, EXTERNAL, INIT, INTRINSIC, NAMELIST, RESULT,
613   SAVE, SFARG, SFUNC.
614
615   Can be combined with: ANY, TYPE.
616
617   Unrelated: ACTUALARG, CBLOCK, SAVECBLOCK.
618
619*/
620
621DEFATTR (FFESYMBOL_attrSFUNC, FFESYMBOL_attrsSFUNC, "SFUNC")
622#ifndef FFESYMBOL_attrsSFUNC
623#define FFESYMBOL_attrsSFUNC ((ffesymbolAttrs) 1 << FFESYMBOL_attrSFUNC)
624#endif
625
626/* Explicitly typed.
627
628   Context is a name listed in a type-def-stmt such as INTEGER or REAL.
629
630   Valid in SEEN and UNCERTAIN states.  Valid in local name space only.
631
632   In SEEN state, attributes marked below with "=" are unrelated.
633
634   In UNCERTAIN state, attributes marked below with "+" are unrelated,
635   attributes marked below with "-" cannot be combined with TYPE,
636   and attributes marked below with "!" transition to state UNDERSTOOD
637   instead of acquiring the new attribute.  Many other subsequent mentionings
638   of the name transitions to state UNDERSTOOD.  UNCERTAIN state is not
639   valid for this attribute in PROGRAM/BLOCKDATA program unit.
640
641   Cannot be combined with: ACTUALARG=, TYPE.
642
643   Can be combined with: ADJUSTABLE+, ADJUSTS+, ANY, ANYLEN, ANYSIZE+,
644   ARRAY, COMMON+, DUMMY, EQUIV+, EXTERNAL, INIT+, INTRINSIC+, NAMELIST+,
645   RESULT+, SAVE+, SFARG, SFUNC+.
646
647   Unrelated: CBLOCK, SAVECBLOCK.
648
649*/
650
651DEFATTR (FFESYMBOL_attrTYPE, FFESYMBOL_attrsTYPE, "TYPE")
652#ifndef FFESYMBOL_attrsTYPE
653#define FFESYMBOL_attrsTYPE ((ffesymbolAttrs) 1 << FFESYMBOL_attrTYPE)
654#endif
655