aboutsummaryrefslogtreecommitdiff
path: root/gcc/f/symbol.def
blob: ad100d4ebbe6cbf7509384a778cd3f389b808c04 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
/* Definitions and documentations for attributes used in GNU F77 compiler
   Copyright (C) 1995, 1996 Free Software Foundation, Inc.
   Contributed by James Craig Burley (burley@gnu.ai.mit.edu).

This file is part of GNU Fortran.

GNU Fortran is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.

GNU Fortran is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with GNU Fortran; see the file COPYING.  If not, write to
the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA.  */

/* "How g77 learns about symbols"

   There are three primary things in a symbol that g77 uses to keep
   track of what it has learned about that symbol:

   1.  The state
   2.  The attributes
   3.  The info

   State, attributes, and info (see f-info* files) all start out with
   "NONE" fields when a symbol is first created.

   In a PROGRAM or BLOCK DATA program unit, info where cannot be DUMMY
   or RESULT.  Any combinations including those possibilities are not
   considered possible in such program units.

   As soon as a symbol is created, it _must_ have its state changed to
   SEEN, UNCERTAIN, or UNDERSTOOD.

   If SEEN, some info might be set, such as the type info (as in when
   the TYPE attribute is present) or kind/where info.

   If UNCERTAIN, the permitted combinations of attributes and info are
   listed below.  Only the attributes ACTUALARG, ADJUSTABLE, ANYLEN, ARRAY,
   DUMMY, EXTERNAL, SFARG, and TYPE are permitted.  (All these attributes
   are contrasted to each attribute below, even though some combinations
   wouldn't be permitted in SEEN state either.)  Note that DUMMY and
   RESULT are not permitted in a PROGRAM/BLOCKDATA program unit, which
   results in some of the combinations below not occurring (not UNCERTAIN,
   but UNDERSTOOD).

   ANYLEN|TYPE & ~(ACTUALARG|ADJUSTABLE|ARRAY|DUMMY|EXTERNAL|SFARG):
	ENTITY/DUMMY, ENTITY/RESULT, FUNCTION/INTRINSIC.

   ARRAY & ~(ACTUALARG|ANYLEN|DUMMY|EXTERNAL|SFARG|TYPE):
	ENTITY/DUMMY, ENTITY/LOCAL.

   ARRAY|TYPE & ~(ACTUALARG|ANYLEN|DUMMY|EXTERNAL|SFARG):
	ENTITY/DUMMY, ENTITY/LOCAL.

   DUMMY & ~(ACTUALARG|ADJUSTABLE|ANYLEN|ARRAY|EXTERNAL|SFARG|TYPE):
	ENTITY/DUMMY, FUNCTION/DUMMY, SUBROUTINE/DUMMY.

   DUMMY|TYPE & ~(ACTUALARG|ADJUSTABLE|ANYLEN|ARRAY|EXTERNAL|SFARG):
	ENTITY/DUMMY, FUNCTION/DUMMY.

   EXTERNAL & ~(ACTUALARG|ADJUSTABLE|ANYLEN|ARRAY|DUMMY|SFARG|TYPE):
	FUNCTION/DUMMY, FUNCTION/GLOBAL, SUBROUTINE/DUMMY,
	SUBROUTINE/GLOBAL, BLOCKDATA/GLOBAL.

   EXTERNAL|ACTUALARG & ~(ADJUSTABLE|ANYLEN|ARRAY|DUMMY|SFARG|TYPE):
	FUNCTION/GLOBAL, SUBROUTINE/GLOBAL.

   EXTERNAL|DUMMY & ~(ACTUALARG|ADJUSTABLE|ANYLEN|ARRAY|SFARG|TYPE):
	FUNCTION/DUMMY, SUBROUTINE/DUMMY.

   EXTERNAL|TYPE & ~(ACTUALARG|ADJUSTABLE|ANYLEN|ARRAY|DUMMY|SFARG):
	FUNCTION/DUMMY, FUNCTION/GLOBAL.

   SFARG & ~(ACTUALARG|ADJUSTABLE|ANYLEN|ARRAY|DUMMY|EXTERNAL|TYPE):
	ENTITY/DUMMY, ENTITY/LOCAL.

   SFARG|TYPE & ~(ACTUALARG|ADJUSTABLE|ANYLEN|ARRAY|DUMMY|EXTERNAL):
	ENTITY/DUMMY, ENTITY/LOCAL.

   TYPE & ~(ACTUALARG|ANYLEN|ARRAY|DUMMY|EXTERNAL|SFARG):
	ENTITY/DUMMY, ENTITY/LOCAL, ENTITY/RESULT, FUNCTION/DUMMY,
	FUNCTION/GLOBAL, FUNCTION/INTRINSIC.

   If UNDERSTOOD, the attributes are no longer considered, and the info
   field is considered to be as fully filled in as possible by analyzing
   a single program unit.

   Each of the attributes (used only for SEEN/UNCERTAIN states) is
   defined and described below.  In many cases, a symbol starts out as
   SEEN and has attributes set as it is seen in various contexts prior
   to the first executable statement being seen (the "exec transition").
   Once that happens, either it becomes immediately UNDERSTOOD and all
   its info filled in, or it becomes UNCERTAIN and its info only partially
   filled in until it becomes UNDERSTOOD.  While UNCERTAIN, only a
   subset of attributes are possible/important.

   Not all symbols reach the UNDERSTOOD state, and in some cases symbols
   go immediately from NONE to the UNDERSTOOD or even UNCERTAIN state.
   For example, given "PROGRAM FOO", everything is known about the name
   "FOO", so it becomes immediately UNDERSTOOD.

   Also, there are multiple name spaces, and not all attributes are
   possible/permitted in all name spaces.

   The only attributes permitted in the global name space are:

   ANY, CBLOCK, SAVECBLOCK.

   The only attributes permitted in the local name space are:

   ANY, ACTUALARG, ADJUSTABLE, ADJUSTS, ANYLEN, ANYSIZE, ARRAY, COMMON,
   DUMMY, EQUIV, EXTERNAL, INIT, INTRINSIC, NAMELIST, RESULT, SAVE, SFARG,
   SFUNC, TYPE.

   In the stmt-func name space, no attributes are used, just the states.

*/


/* Actual argument.  Always accompanied by EXTERNAL.

   Context is a name used as an actual argument passed to a procedure
   other than a statement function.

   Valid in UNCERTAIN state and local name space only.

   This attribute is used only to flag the fact that an EXTERNAL'ed name
   has been seen as an actual argument, and therefore cannot be
   discovered later to be a DUMMY argument (via an ENTRY statement).

   If DUMMY + EXTERNAL already, it is permitted to see the name
   as an actual argument, but ACTUALARG is not added as an attribute since
   that fact does not improve knowledge about the name.  Hence it is not
   permitted to transition ACTUALARG + EXTERNAL += DUMMY, and the
   transition DUMMY + EXTERNAL += ACTUALARG is not actually done.

   Cannot be combined with: ANYLEN, ARRAY, DUMMY, SFARG, TYPE.

   Can be combined with: ACTUALARG, ANY, EXTERNAL.

   Unrelated: ADJUSTABLE, ADJUSTS, ANYSIZE, CBLOCK, COMMON, EQUIV, INIT,
   INTRINSIC, NAMELIST, RESULT, SAVE, SAVECBLOCK, SFUNC.

*/

DEFATTR (FFESYMBOL_attrACTUALARG, FFESYMBOL_attrsACTUALARG, "ACTUALARG")
#ifndef FFESYMBOL_attrsACTUALARG
#define FFESYMBOL_attrsACTUALARG ((ffesymbolAttrs) 1 << FFESYMBOL_attrACTUALARG)
#endif

/* Has adjustable dimension(s).  Always accompanied by ARRAY.

   Context is an ARRAY-attributed name with an adjustable dimension (at
   least one dimension containing a variable reference).

   Valid in SEEN state and local name space only.

   Cannot be combined with: ADJUSTABLE, ADJUSTS, COMMON, EQUIV, EXTERNAL,
   NAMELIST, INIT, INTRINSIC, RESULT, SAVE, SFARG, SFUNC.

   Can be combined with: ANY, ANYLEN, ANYSIZE, ARRAY, TYPE.

   Must be combined with: DUMMY.

   Unrelated: ACTUALARG, CBLOCK, SAVECBLOCK.

*/

DEFATTR (FFESYMBOL_attrADJUSTABLE, FFESYMBOL_attrsADJUSTABLE, "ADJUSTABLE")
#ifndef FFESYMBOL_attrsADJUSTABLE
#define FFESYMBOL_attrsADJUSTABLE ((ffesymbolAttrs) 1 << FFESYMBOL_attrADJUSTABLE)
#endif

/* Adjusts an array.

   Context is an expression in an array declarator, such as in a
   DIMENSION, COMMON, or type-specification statement.

   Valid in SEEN state and local name space only.

   Cannot be combined with: ADJUSTABLE, ANYLEN, ANYSIZE, ARRAY,
   EXTERNAL, INTRINSIC, RESULT, SAVE, SFUNC.

   Can be combined with: ADJUSTS, ANY, COMMON, DUMMY, EQUIV, INIT,
   NAMELIST, SFARG, TYPE.

   Unrelated: ACTUALARG, CBLOCK, SAVECBLOCK.

*/

DEFATTR (FFESYMBOL_attrADJUSTS, FFESYMBOL_attrsADJUSTS, "ADJUSTS")
#ifndef FFESYMBOL_attrsADJUSTS
#define FFESYMBOL_attrsADJUSTS ((ffesymbolAttrs) 1 << FFESYMBOL_attrADJUSTS)
#endif

/* Can be anything now, diagnostic has been issued at least once.

   Valid in UNDERSTOOD state only.  Valid in any name space.

   Can be combined with anything.

*/

DEFATTR (FFESYMBOL_attrANY, FFESYMBOL_attrsANY, "ANY")
#ifndef FFESYMBOL_attrsANY
#define FFESYMBOL_attrsANY ((ffesymbolAttrs) 1 << FFESYMBOL_attrANY)
#endif

/* Assumed (any) length.  Always accompanied by TYPE.

   Context is a name listed in a CHARACTER statement and given a length
   specification of (*).

   Valid in SEEN and UNCERTAIN states.  Valid in local name space only.

   In SEEN state, attributes marked below with "=" are unrelated.

   In UNCERTAIN state, attributes marked below with "+" are unrelated,
   attributes marked below with "-" cannot be combined with ANYLEN,
   and attributes marked below with "!" transition to state UNDERSTOOD
   instead of acquiring the new attribute.  Any other subsequent mentioning
   of the name transitions to state UNDERSTOOD.  UNCERTAIN state is not
   valid for this attribute in PROGRAM/BLOCKDATA program unit.

   Cannot be combined with: ACTUALARG=, ADJUSTS+, ANYLEN, COMMON+, EQUIV+,
   EXTERNAL, INIT+, INTRINSIC+, NAMELIST+, SAVE+, SFARG, SFUNC+.

   Can be combined with: ADJUSTABLE+, ANY, ANYSIZE+, ARRAY-, DUMMY!, RESULT+,
   TYPE.

   Unrelated: CBLOCK, SAVECBLOCK.

   In PROGRAM/BLOCKDATA, cannot be combined with ARRAY.

*/

DEFATTR (FFESYMBOL_attrANYLEN, FFESYMBOL_attrsANYLEN, "ANYLEN")
#ifndef FFESYMBOL_attrsANYLEN
#define FFESYMBOL_attrsANYLEN ((ffesymbolAttrs) 1 << FFESYMBOL_attrANYLEN)
#endif

/* Has assumed (any) size.  Always accompanied by ARRAY.

   Context is an ARRAY-attributed name with its last dimension having
   an upper bound of "*".

   Valid in SEEN state and local name space only.

   Cannot be combined with: ADJUSTS, ANYSIZE, COMMON, EQUIV, EXTERNAL,
   NAMELIST, INIT, INTRINSIC, RESULT, SAVE, SFARG, SFUNC.

   Can be combined with: ADJUSTABLE, ANY, ANYLEN, ARRAY, TYPE.

   Must be combined with: DUMMY.

   Unrelated: ACTUALARG, CBLOCK, SAVECBLOCK.

*/

DEFATTR (FFESYMBOL_attrANYSIZE, FFESYMBOL_attrsANYSIZE, "ANYSIZE")
#ifndef FFESYMBOL_attrsANYSIZE
#define FFESYMBOL_attrsANYSIZE ((ffesymbolAttrs) 1 << FFESYMBOL_attrANYSIZE)
#endif

/* Array.

   Context is a name followed by an array declarator, such as in a
   type-statement-decl, a DIMENSION statement, or a COMMON statement.

   Valid in SEEN and UNCERTAIN states.  Valid in local name space only.

   In SEEN state, attributes marked below with "=" are unrelated.

   In UNCERTAIN state, attributes marked below with "+" are unrelated,
   attributes marked below with "-" cannot be combined with ARRAY,
   and attributes marked below with "!" transition to state UNDERSTOOD
   instead of acquiring the new attribute.  Any other subsequent mentioning
   of the name transitions to state UNDERSTOOD.  UNCERTAIN state is not
   valid for this attribute in PROGRAM/BLOCKDATA program unit.

   Cannot be combined with: ACTUALARG=, ADJUSTS+, ARRAY, EXTERNAL,
   INTRINSIC+, RESULT+, SFARG, SFUNC+.

   Can be combined with: ADJUSTABLE+, ANY, ANYLEN-, ANYSIZE+, COMMON+,
   DUMMY!, EQUIV+, INIT+, NAMELIST+, SAVE+, TYPE.

   Unrelated: CBLOCK, SAVECBLOCK.

   In PROGRAM/BLOCKDATA, cannot be combined with ANYLEN.
   Cannot follow INIT.

*/

DEFATTR (FFESYMBOL_attrARRAY, FFESYMBOL_attrsARRAY, "ARRAY")
#ifndef FFESYMBOL_attrsARRAY
#define FFESYMBOL_attrsARRAY ((ffesymbolAttrs) 1 << FFESYMBOL_attrARRAY)
#endif

/* COMMON block.

   Context is a name enclosed in slashes in a COMMON statement.

   Valid in SEEN state and global name space only.

   Cannot be combined with:

   Can be combined with: CBLOCK, SAVECBLOCK.

   Unrelated: ACTUALARG, ADJUSTABLE, ADJUSTS, ANY, ANYLEN, ANYSIZE,
   ARRAY, COMMON, DUMMY, EQUIV, EXTERNAL, INIT, INTRINSIC, NAMELIST,
   RESULT, SAVE, SFARG, SFUNC, TYPE.

*/

DEFATTR (FFESYMBOL_attrCBLOCK, FFESYMBOL_attrsCBLOCK, "CBLOCK")
#ifndef FFESYMBOL_attrsCBLOCK
#define FFESYMBOL_attrsCBLOCK ((ffesymbolAttrs) 1 << FFESYMBOL_attrCBLOCK)
#endif

/* Placed in COMMON.

   Context is a name listed in a COMMON statement but not enclosed in
   slashes.

   Valid in SEEN state and local name space only.

   Cannot be combined with: ADJUSTABLE, ANYLEN, ANYSIZE, COMMON, DUMMY,
   EXTERNAL, INTRINSIC, RESULT, SAVE, SFUNC.

   Can be combined with: ADJUSTS, ANY, ARRAY, EQUIV, INIT, NAMELIST,
   SFARG, TYPE.

   Unrelated: ACTUALARG, CBLOCK, SAVECBLOCK.

*/

DEFATTR (FFESYMBOL_attrCOMMON, FFESYMBOL_attrsCOMMON, "COMMON")
#ifndef FFESYMBOL_attrsCOMMON
#define FFESYMBOL_attrsCOMMON ((ffesymbolAttrs) 1 << FFESYMBOL_attrCOMMON)
#endif

/* Dummy argument.

   Context is a name listed in the arglist of FUNCTION, SUBROUTINE, ENTRY.
   (Statement-function definitions have dummy arguments, but since they're
   the only possible entities in the statement-function name space, this
   attribution mechanism isn't used for them.)

   Valid in SEEN and UNCERTAIN states.  Valid in local name space only.

   In SEEN state, attributes marked below with "=" are unrelated.

   In UNCERTAIN state, attributes marked below with "+" are unrelated,
   attributes marked below with "-" cannot be combined with DUMMY,
   and attributes marked below with "!" transition to state UNDERSTOOD
   instead of acquiring the new attribute.  Any other subsequent mentioning
   of the name transitions to state UNDERSTOOD.  UNCERTAIN state is not
   valid for this attribute in PROGRAM/BLOCKDATA program unit.

   Cannot be combined with: ACTUALARG=, COMMON+, EQUIV+, INIT+, INTRINSIC+,
   NAMELIST+, RESULT+, SAVE+, SFUNC+.

   Can be combined with: ADJUSTABLE+, ADJUSTS+, ANY, ANYLEN-, ANYSIZE+,
   ARRAY-, DUMMY, EXTERNAL, SFARG-, TYPE.

   Unrelated: CBLOCK, SAVECBLOCK.

   VXT Fortran disallows DUMMY + NAMELIST.
   F90 allows DUMMY + NAMELIST (with some restrictions), g77 doesn't yet.

*/

DEFATTR (FFESYMBOL_attrDUMMY, FFESYMBOL_attrsDUMMY, "DUMMY")
#ifndef FFESYMBOL_attrsDUMMY
#define FFESYMBOL_attrsDUMMY ((ffesymbolAttrs) 1 << FFESYMBOL_attrDUMMY)
#endif

/* EQUIVALENCE'd.

   Context is a name given in an EQUIVALENCE statement.

   Valid in SEEN state and local name space only.

   Cannot be combined with: ADJUSTABLE, ANYLEN, ANYSIZE, DUMMY,
   EXTERNAL, INTRINSIC, RESULT, SFUNC.

   Can be combined with: ADJUSTS, ANY, ARRAY, COMMON, EQUIV, INIT,
   NAMELIST, SAVE, SFARG, TYPE.

   Unrelated: ACTUALARG, CBLOCK, SAVECBLOCK.

*/

DEFATTR (FFESYMBOL_attrEQUIV, FFESYMBOL_attrsEQUIV, "EQUIV")
#ifndef FFESYMBOL_attrsEQUIV
#define FFESYMBOL_attrsEQUIV ((ffesymbolAttrs) 1 << FFESYMBOL_attrEQUIV)
#endif

/* EXTERNAL.

   Context is a name listed in an EXTERNAL statement.

   Valid in SEEN and UNCERTAIN states.  Valid in local name space only.

   In SEEN state, attributes marked below with "=" are unrelated.

   In UNCERTAIN state, attributes marked below with "+" are unrelated,
   attributes marked below with "-" cannot be combined with EXTERNAL,
   and attributes marked below with "!" transition to state UNDERSTOOD
   instead of acquiring the new attribute.  Many other subsequent mentionings
   of the name transitions to state UNDERSTOOD.  UNCERTAIN state is not
   valid for this attribute in PROGRAM/BLOCKDATA program unit.

   Cannot be combined with: ADJUSTABLE+, ADJUSTS+, ANYLEN, ANYSIZE+,
   ARRAY, COMMON+, EQUIV+, EXTERNAL, INIT+, INTRINSIC+, NAMELIST+, RESULT+,
   SAVE+, SFARG, SFUNC+.

   Can be combined with: ACTUALARG=, ANY, DUMMY, TYPE.

   Unrelated: CBLOCK, SAVECBLOCK.

*/

DEFATTR (FFESYMBOL_attrEXTERNAL, FFESYMBOL_attrsEXTERNAL, "EXTERNAL")
#ifndef FFESYMBOL_attrsEXTERNAL
#define FFESYMBOL_attrsEXTERNAL ((ffesymbolAttrs) 1 << FFESYMBOL_attrEXTERNAL)
#endif

/* Given an initial value.

   Context is a name listed in a type-def-stmt such as INTEGER or REAL
   and given an initial value or values.  Someday will also include
   names in DATA statements, which currently immediately exec-transition
   their targets.

   Valid in SEEN state and local name space only.

   Cannot be combined with: ADJUSTABLE, ANYLEN, ANYSIZE, DUMMY, EXTERNAL,
   INIT, INTRINSIC, RESULT, SFUNC.

   Can be combined with: ADJUSTS, ANY, ARRAY, COMMON, EQUIV, NAMELIST,
   SAVE, SFARG, TYPE.

   Unrelated: ACTUALARG, CBLOCK, SAVECBLOCK.

   Cannot be followed by ARRAY.

*/

DEFATTR (FFESYMBOL_attrINIT, FFESYMBOL_attrsINIT, "INIT")
#ifndef FFESYMBOL_attrsINIT
#define FFESYMBOL_attrsINIT ((ffesymbolAttrs) 1 << FFESYMBOL_attrINIT)
#endif

/* INTRINSIC.

   Context is a name listed in an INTRINSIC statement.

   Valid in SEEN state and local name space only.

   Cannot be combined with: ADJUSTABLE, ADJUSTS, ANYLEN, ANYSIZE, ARRAY,
   COMMON, DUMMY, EQUIV, EXTERNAL, INIT, INTRINSIC, NAMELIST, RESULT,
   SAVE, SFARG, SFUNC.

   Can be combined with: ANY, TYPE.

   Unrelated: ACTUALARG, CBLOCK, SAVECBLOCK.

*/

DEFATTR (FFESYMBOL_attrINTRINSIC, FFESYMBOL_attrsINTRINSIC, "INTRINSIC")
#ifndef FFESYMBOL_attrsINTRINSIC
#define FFESYMBOL_attrsINTRINSIC ((ffesymbolAttrs) 1 << FFESYMBOL_attrINTRINSIC)
#endif

/* NAMELISTed.

   Context is a name listed in a NAMELIST statement but not enclosed in
   slashes.

   Valid in SEEN state and local name space only.

   Cannot be combined with: ADJUSTABLE, ANYLEN, ANYSIZE, DUMMY, EXTERNAL,
   INTRINSIC, RESULT, SFUNC.

   Can be combined with: ADJUSTS, ANY, ARRAY, COMMON, EQUIV, INIT,
   NAMELIST, SAVE, SFARG, TYPE.

   Unrelated: ACTUALARG, CBLOCK, SAVECBLOCK.

*/

DEFATTR (FFESYMBOL_attrNAMELIST, FFESYMBOL_attrsNAMELIST, "NAMELIST")
#ifndef FFESYMBOL_attrsNAMELIST
#define FFESYMBOL_attrsNAMELIST ((ffesymbolAttrs) 1 << FFESYMBOL_attrNAMELIST)
#endif

/* RESULT of a function.

   Context is name in RESULT() clause in FUNCTION or ENTRY statement, or
   the name in a FUNCTION or ENTRY statement (within a FUNCTION subprogram)
   that has no RESULT() clause.

   Valid in SEEN state and local name space only.

   Cannot be combined with: ADJUSTABLE, ADJUSTS, ANYSIZE, ARRAY, COMMON,
   DUMMY, EQUIV, EXTERNAL, INIT, INTRINSIC, NAMELIST, RESULT, SAVE, SFUNC.

   Can be combined with: ANY, ANYLEN, SFARG, TYPE.

   Unrelated: ACTUALARG, CBLOCK, SAVECBLOCK.

   Cannot be preceded by SFARG.

*/

DEFATTR (FFESYMBOL_attrRESULT, FFESYMBOL_attrsRESULT, "RESULT")
#ifndef FFESYMBOL_attrsRESULT
#define FFESYMBOL_attrsRESULT ((ffesymbolAttrs) 1 << FFESYMBOL_attrRESULT)
#endif

/* SAVEd (not enclosed in slashes).

   Context is a name listed in a SAVE statement but not enclosed in slashes.

   Valid in SEEN state and local name space only.

   Cannot be combined with: ADUSTABLE, ADJUSTS, ANYLEN, ANYSIZE, COMMON,
   DUMMY, EXTERNAL, INTRINSIC, RESULT, SAVE, SFUNC.

   Can be combined with: ANY, ARRAY, EQUIV, INIT, NAMELIST,
   SFARG, TYPE.

   Unrelated: ACTUALARG, CBLOCK, SAVECBLOCK.

*/

DEFATTR (FFESYMBOL_attrSAVE, FFESYMBOL_attrsSAVE, "SAVE")
#ifndef FFESYMBOL_attrsSAVE
#define FFESYMBOL_attrsSAVE ((ffesymbolAttrs) 1 << FFESYMBOL_attrSAVE)
#endif

/* SAVEd (enclosed in slashes).

   Context is a name enclosed in slashes in a SAVE statement.

   Valid in SEEN state and global name space only.

   Cannot be combined with: SAVECBLOCK.

   Can be combined with: CBLOCK.

   Unrelated: ACTUALARG, ADJUSTABLE, ADJUSTS, ANY, ANYLEN, ANYSIZE,
   ARRAY, COMMON, DUMMY, EQUIV, EXTERNAL, INIT, INTRINSIC, NAMELIST,
   RESULT, SAVE, SFARG, SFUNC, TYPE.

*/

DEFATTR (FFESYMBOL_attrSAVECBLOCK, FFESYMBOL_attrsSAVECBLOCK, "SAVECBLOCK")
#ifndef FFESYMBOL_attrsSAVECBLOCK
#define FFESYMBOL_attrsSAVECBLOCK ((ffesymbolAttrs) 1 << FFESYMBOL_attrSAVECBLOCK)
#endif

/* Name used as a statement function arg or DATA implied-DO iterator.

   Context is a name listed in the arglist of statement-function-definition
   or as the iterator in an implied-DO construct in a DATA statement.

   Valid in SEEN and UNCERTAIN states.  Valid in local name space only.

   In SEEN state, attributes marked below with "=" are unrelated.

   In UNCERTAIN state, attributes marked below with "+" are unrelated,
   attributes marked below with "-" cannot be combined with SFARG,
   and attributes marked below with "!" transition to state UNDERSTOOD
   instead of acquiring the new attribute.  Any other subsequent mentioning
   of the name transitions to state UNDERSTOOD.  UNCERTAIN state is not
   valid for this attribute in PROGRAM/BLOCKDATA program unit.

   Cannot be combined with: ACTUALARG=, ADJUSTABLE+, ANYLEN, ANYSIZE+,
   ARRAY, EXTERNAL, INTRINSIC+, SFUNC+.

   Can be combined with: ADJUSTS+, ANY, COMMON+, DUMMY!, EQUIV+, INIT+,
   NAMELIST+, RESULT+, SAVE+, SFARG, TYPE.

   Unrelated: CBLOCK, SAVECBLOCK.

   Cannot be followed by RESULT.

*/

DEFATTR (FFESYMBOL_attrSFARG, FFESYMBOL_attrsSFARG, "SFARG")
#ifndef FFESYMBOL_attrsSFARG
#define FFESYMBOL_attrsSFARG ((ffesymbolAttrs) 1 << FFESYMBOL_attrSFARG)
#endif

/* Statement function name.

   Context is a statement-function-definition statement, the name being
   defined.

   Valid in SEEN state and local name space only.

   Cannot be combined with: ADJUSTABLE, ADJUSTS, ANYLEN, ANYSIZE, ARRAY,
   COMMON, DUMMY, EQUIV, EXTERNAL, INIT, INTRINSIC, NAMELIST, RESULT,
   SAVE, SFARG, SFUNC.

   Can be combined with: ANY, TYPE.

   Unrelated: ACTUALARG, CBLOCK, SAVECBLOCK.

*/

DEFATTR (FFESYMBOL_attrSFUNC, FFESYMBOL_attrsSFUNC, "SFUNC")
#ifndef FFESYMBOL_attrsSFUNC
#define FFESYMBOL_attrsSFUNC ((ffesymbolAttrs) 1 << FFESYMBOL_attrSFUNC)
#endif

/* Explicitly typed.

   Context is a name listed in a type-def-stmt such as INTEGER or REAL.

   Valid in SEEN and UNCERTAIN states.  Valid in local name space only.

   In SEEN state, attributes marked below with "=" are unrelated.

   In UNCERTAIN state, attributes marked below with "+" are unrelated,
   attributes marked below with "-" cannot be combined with TYPE,
   and attributes marked below with "!" transition to state UNDERSTOOD
   instead of acquiring the new attribute.  Many other subsequent mentionings
   of the name transitions to state UNDERSTOOD.  UNCERTAIN state is not
   valid for this attribute in PROGRAM/BLOCKDATA program unit.

   Cannot be combined with: ACTUALARG=, TYPE.

   Can be combined with: ADJUSTABLE+, ADJUSTS+, ANY, ANYLEN, ANYSIZE+,
   ARRAY, COMMON+, DUMMY, EQUIV+, EXTERNAL, INIT+, INTRINSIC+, NAMELIST+,
   RESULT+, SAVE+, SFARG, SFUNC+.

   Unrelated: CBLOCK, SAVECBLOCK.

*/

DEFATTR (FFESYMBOL_attrTYPE, FFESYMBOL_attrsTYPE, "TYPE")
#ifndef FFESYMBOL_attrsTYPE
#define FFESYMBOL_attrsTYPE ((ffesymbolAttrs) 1 << FFESYMBOL_attrTYPE)
#endif