1 /* Handle modules, which amounts to loading and saving symbols and
2 their attendant structures.
3 Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
4 Free Software Foundation, Inc.
5 Contributed by Andy Vaught
7 This file is part of GCC.
9 GCC is free software; you can redistribute it and/or modify it under
10 the terms of the GNU General Public License as published by the Free
11 Software Foundation; either version 2, or (at your option) any later
14 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
15 WARRANTY; without even the implied warranty of MERCHANTABILITY or
16 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
19 You should have received a copy of the GNU General Public License
20 along with GCC; see the file COPYING. If not, write to the Free
21 Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
24 /* The syntax of gfortran modules resembles that of lisp lists, ie a
25 sequence of atoms, which can be left or right parenthesis, names,
26 integers or strings. Parenthesis are always matched which allows
27 us to skip over sections at high speed without having to know
28 anything about the internal structure of the lists. A "name" is
29 usually a fortran 95 identifier, but can also start with '@' in
30 order to reference a hidden symbol.
32 The first line of a module is an informational message about what
33 created the module, the file it came from and when it was created.
34 The second line is a warning for people not to edit the module.
35 The rest of the module looks like:
37 ( ( <Interface info for UPLUS> )
38 ( <Interface info for UMINUS> )
41 ( ( <name of operator interface> <module of op interface> <i/f1> ... )
44 ( ( <name of generic interface> <module of generic interface> <i/f1> ... )
47 ( ( <common name> <symbol> <saved flag>)
53 ( <Symbol Number (in no particular order)>
55 <Module name of symbol>
56 ( <symbol information> )
65 In general, symbols refer to other symbols by their symbol number,
66 which are zero based. Symbols are written to the module in no
74 #include "parse.h" /* FIXME */
77 #define MODULE_EXTENSION ".mod"
80 /* Structure that describes a position within a module file. */
89 /* Structure for list of symbols of intrinsic modules. */
101 P_UNKNOWN = 0, P_OTHER, P_NAMESPACE, P_COMPONENT, P_SYMBOL
105 /* The fixup structure lists pointers to pointers that have to
106 be updated when a pointer value becomes known. */
108 typedef struct fixup_t
111 struct fixup_t *next;
116 /* Structure for holding extra info needed for pointers being read. */
118 typedef struct pointer_info
120 BBT_HEADER (pointer_info);
124 /* The first component of each member of the union is the pointer
131 void *pointer; /* Member for doing pointer searches. */
136 char true_name[GFC_MAX_SYMBOL_LEN + 1], module[GFC_MAX_SYMBOL_LEN + 1];
138 { UNUSED, NEEDED, USED }
143 gfc_symtree *symtree;
144 char binding_label[GFC_MAX_SYMBOL_LEN + 1];
152 { UNREFERENCED = 0, NEEDS_WRITE, WRITTEN }
162 #define gfc_get_pointer_info() gfc_getmem(sizeof(pointer_info))
165 /* Lists of rename info for the USE statement. */
167 typedef struct gfc_use_rename
169 char local_name[GFC_MAX_SYMBOL_LEN + 1], use_name[GFC_MAX_SYMBOL_LEN + 1];
170 struct gfc_use_rename *next;
172 gfc_intrinsic_op operator;
177 #define gfc_get_use_rename() gfc_getmem(sizeof(gfc_use_rename))
179 /* Local variables */
181 /* The FILE for the module we're reading or writing. */
182 static FILE *module_fp;
184 /* MD5 context structure. */
185 static struct md5_ctx ctx;
187 /* The name of the module we're reading (USE'ing) or writing. */
188 static char module_name[GFC_MAX_SYMBOL_LEN + 1];
190 /* The way the module we're reading was specified. */
191 static bool specified_nonint, specified_int;
193 static int module_line, module_column, only_flag;
195 { IO_INPUT, IO_OUTPUT }
198 static gfc_use_rename *gfc_rename_list;
199 static pointer_info *pi_root;
200 static int symbol_number; /* Counter for assigning symbol numbers */
202 /* Tells mio_expr_ref to make symbols for unused equivalence members. */
203 static bool in_load_equiv;
207 /*****************************************************************/
209 /* Pointer/integer conversion. Pointers between structures are stored
210 as integers in the module file. The next couple of subroutines
211 handle this translation for reading and writing. */
213 /* Recursively free the tree of pointer structures. */
216 free_pi_tree (pointer_info *p)
221 if (p->fixup != NULL)
222 gfc_internal_error ("free_pi_tree(): Unresolved fixup");
224 free_pi_tree (p->left);
225 free_pi_tree (p->right);
231 /* Compare pointers when searching by pointer. Used when writing a
235 compare_pointers (void *_sn1, void *_sn2)
237 pointer_info *sn1, *sn2;
239 sn1 = (pointer_info *) _sn1;
240 sn2 = (pointer_info *) _sn2;
242 if (sn1->u.pointer < sn2->u.pointer)
244 if (sn1->u.pointer > sn2->u.pointer)
251 /* Compare integers when searching by integer. Used when reading a
255 compare_integers (void *_sn1, void *_sn2)
257 pointer_info *sn1, *sn2;
259 sn1 = (pointer_info *) _sn1;
260 sn2 = (pointer_info *) _sn2;
262 if (sn1->integer < sn2->integer)
264 if (sn1->integer > sn2->integer)
271 /* Initialize the pointer_info tree. */
280 compare = (iomode == IO_INPUT) ? compare_integers : compare_pointers;
282 /* Pointer 0 is the NULL pointer. */
283 p = gfc_get_pointer_info ();
288 gfc_insert_bbt (&pi_root, p, compare);
290 /* Pointer 1 is the current namespace. */
291 p = gfc_get_pointer_info ();
292 p->u.pointer = gfc_current_ns;
294 p->type = P_NAMESPACE;
296 gfc_insert_bbt (&pi_root, p, compare);
302 /* During module writing, call here with a pointer to something,
303 returning the pointer_info node. */
305 static pointer_info *
306 find_pointer (void *gp)
313 if (p->u.pointer == gp)
315 p = (gp < p->u.pointer) ? p->left : p->right;
322 /* Given a pointer while writing, returns the pointer_info tree node,
323 creating it if it doesn't exist. */
325 static pointer_info *
326 get_pointer (void *gp)
330 p = find_pointer (gp);
334 /* Pointer doesn't have an integer. Give it one. */
335 p = gfc_get_pointer_info ();
338 p->integer = symbol_number++;
340 gfc_insert_bbt (&pi_root, p, compare_pointers);
346 /* Given an integer during reading, find it in the pointer_info tree,
347 creating the node if not found. */
349 static pointer_info *
350 get_integer (int integer)
360 c = compare_integers (&t, p);
364 p = (c < 0) ? p->left : p->right;
370 p = gfc_get_pointer_info ();
371 p->integer = integer;
374 gfc_insert_bbt (&pi_root, p, compare_integers);
380 /* Recursive function to find a pointer within a tree by brute force. */
382 static pointer_info *
383 fp2 (pointer_info *p, const void *target)
390 if (p->u.pointer == target)
393 q = fp2 (p->left, target);
397 return fp2 (p->right, target);
401 /* During reading, find a pointer_info node from the pointer value.
402 This amounts to a brute-force search. */
404 static pointer_info *
405 find_pointer2 (void *p)
407 return fp2 (pi_root, p);
411 /* Resolve any fixups using a known pointer. */
414 resolve_fixups (fixup_t *f, void *gp)
427 /* Call here during module reading when we know what pointer to
428 associate with an integer. Any fixups that exist are resolved at
432 associate_integer_pointer (pointer_info *p, void *gp)
434 if (p->u.pointer != NULL)
435 gfc_internal_error ("associate_integer_pointer(): Already associated");
439 resolve_fixups (p->fixup, gp);
445 /* During module reading, given an integer and a pointer to a pointer,
446 either store the pointer from an already-known value or create a
447 fixup structure in order to store things later. Returns zero if
448 the reference has been actually stored, or nonzero if the reference
449 must be fixed later (ie associate_integer_pointer must be called
450 sometime later. Returns the pointer_info structure. */
452 static pointer_info *
453 add_fixup (int integer, void *gp)
459 p = get_integer (integer);
461 if (p->integer == 0 || p->u.pointer != NULL)
468 f = gfc_getmem (sizeof (fixup_t));
480 /*****************************************************************/
482 /* Parser related subroutines */
484 /* Free the rename list left behind by a USE statement. */
489 gfc_use_rename *next;
491 for (; gfc_rename_list; gfc_rename_list = next)
493 next = gfc_rename_list->next;
494 gfc_free (gfc_rename_list);
499 /* Match a USE statement. */
504 char name[GFC_MAX_SYMBOL_LEN + 1], module_nature[GFC_MAX_SYMBOL_LEN + 1];
505 gfc_use_rename *tail = NULL, *new;
506 interface_type type, type2;
507 gfc_intrinsic_op operator;
510 specified_int = false;
511 specified_nonint = false;
513 if (gfc_match (" , ") == MATCH_YES)
515 if ((m = gfc_match (" %n ::", module_nature)) == MATCH_YES)
517 if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: module "
518 "nature in USE statement at %C") == FAILURE)
521 if (strcmp (module_nature, "intrinsic") == 0)
522 specified_int = true;
525 if (strcmp (module_nature, "non_intrinsic") == 0)
526 specified_nonint = true;
529 gfc_error ("Module nature in USE statement at %C shall "
530 "be either INTRINSIC or NON_INTRINSIC");
537 /* Help output a better error message than "Unclassifiable
539 gfc_match (" %n", module_nature);
540 if (strcmp (module_nature, "intrinsic") == 0
541 || strcmp (module_nature, "non_intrinsic") == 0)
542 gfc_error ("\"::\" was expected after module nature at %C "
543 "but was not found");
549 m = gfc_match (" ::");
550 if (m == MATCH_YES &&
551 gfc_notify_std (GFC_STD_F2003, "Fortran 2003: "
552 "\"USE :: module\" at %C") == FAILURE)
557 m = gfc_match ("% ");
563 m = gfc_match_name (module_name);
570 if (gfc_match_eos () == MATCH_YES)
572 if (gfc_match_char (',') != MATCH_YES)
575 if (gfc_match (" only :") == MATCH_YES)
578 if (gfc_match_eos () == MATCH_YES)
583 /* Get a new rename struct and add it to the rename list. */
584 new = gfc_get_use_rename ();
585 new->where = gfc_current_locus;
588 if (gfc_rename_list == NULL)
589 gfc_rename_list = new;
594 /* See what kind of interface we're dealing with. Assume it is
596 new->operator = INTRINSIC_NONE;
597 if (gfc_match_generic_spec (&type, name, &operator) == MATCH_ERROR)
602 case INTERFACE_NAMELESS:
603 gfc_error ("Missing generic specification in USE statement at %C");
606 case INTERFACE_USER_OP:
607 case INTERFACE_GENERIC:
608 m = gfc_match (" =>");
610 if (type == INTERFACE_USER_OP && m == MATCH_YES
611 && (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: Renaming "
612 "operators in USE statements at %C")
619 strcpy (new->use_name, name);
622 strcpy (new->local_name, name);
623 m = gfc_match_generic_spec (&type2, new->use_name, &operator);
628 if (m == MATCH_ERROR)
636 strcpy (new->local_name, name);
638 m = gfc_match_generic_spec (&type2, new->use_name, &operator);
643 if (m == MATCH_ERROR)
647 if (strcmp (new->use_name, module_name) == 0
648 || strcmp (new->local_name, module_name) == 0)
650 gfc_error ("The name '%s' at %C has already been used as "
651 "an external module name.", module_name);
655 if (type == INTERFACE_USER_OP)
656 new->operator = operator;
660 case INTERFACE_INTRINSIC_OP:
661 new->operator = operator;
665 if (gfc_match_eos () == MATCH_YES)
667 if (gfc_match_char (',') != MATCH_YES)
674 gfc_syntax_error (ST_USE);
682 /* Given a name and a number, inst, return the inst name
683 under which to load this symbol. Returns NULL if this
684 symbol shouldn't be loaded. If inst is zero, returns
685 the number of instances of this name. */
688 find_use_name_n (const char *name, int *inst)
694 for (u = gfc_rename_list; u; u = u->next)
696 if (strcmp (u->use_name, name) != 0)
709 return only_flag ? NULL : name;
713 return (u->local_name[0] != '\0') ? u->local_name : name;
717 /* Given a name, return the name under which to load this symbol.
718 Returns NULL if this symbol shouldn't be loaded. */
721 find_use_name (const char *name)
724 return find_use_name_n (name, &i);
728 /* Given a real name, return the number of use names associated with it. */
731 number_use_names (const char *name)
735 c = find_use_name_n (name, &i);
740 /* Try to find the operator in the current list. */
742 static gfc_use_rename *
743 find_use_operator (gfc_intrinsic_op operator)
747 for (u = gfc_rename_list; u; u = u->next)
748 if (u->operator == operator)
755 /*****************************************************************/
757 /* The next couple of subroutines maintain a tree used to avoid a
758 brute-force search for a combination of true name and module name.
759 While symtree names, the name that a particular symbol is known by
760 can changed with USE statements, we still have to keep track of the
761 true names to generate the correct reference, and also avoid
762 loading the same real symbol twice in a program unit.
764 When we start reading, the true name tree is built and maintained
765 as symbols are read. The tree is searched as we load new symbols
766 to see if it already exists someplace in the namespace. */
768 typedef struct true_name
770 BBT_HEADER (true_name);
775 static true_name *true_name_root;
778 /* Compare two true_name structures. */
781 compare_true_names (void *_t1, void *_t2)
786 t1 = (true_name *) _t1;
787 t2 = (true_name *) _t2;
789 c = ((t1->sym->module > t2->sym->module)
790 - (t1->sym->module < t2->sym->module));
794 return strcmp (t1->sym->name, t2->sym->name);
798 /* Given a true name, search the true name tree to see if it exists
799 within the main namespace. */
802 find_true_name (const char *name, const char *module)
808 sym.name = gfc_get_string (name);
810 sym.module = gfc_get_string (module);
818 c = compare_true_names ((void *) (&t), (void *) p);
822 p = (c < 0) ? p->left : p->right;
829 /* Given a gfc_symbol pointer that is not in the true name tree, add it. */
832 add_true_name (gfc_symbol *sym)
836 t = gfc_getmem (sizeof (true_name));
839 gfc_insert_bbt (&true_name_root, t, compare_true_names);
843 /* Recursive function to build the initial true name tree by
844 recursively traversing the current namespace. */
847 build_tnt (gfc_symtree *st)
852 build_tnt (st->left);
853 build_tnt (st->right);
855 if (find_true_name (st->n.sym->name, st->n.sym->module) != NULL)
858 add_true_name (st->n.sym);
862 /* Initialize the true name tree with the current namespace. */
865 init_true_name_tree (void)
867 true_name_root = NULL;
868 build_tnt (gfc_current_ns->sym_root);
872 /* Recursively free a true name tree node. */
875 free_true_name (true_name *t)
879 free_true_name (t->left);
880 free_true_name (t->right);
886 /*****************************************************************/
888 /* Module reading and writing. */
892 ATOM_NAME, ATOM_LPAREN, ATOM_RPAREN, ATOM_INTEGER, ATOM_STRING
896 static atom_type last_atom;
899 /* The name buffer must be at least as long as a symbol name. Right
900 now it's not clear how we're going to store numeric constants--
901 probably as a hexadecimal string, since this will allow the exact
902 number to be preserved (this can't be done by a decimal
903 representation). Worry about that later. TODO! */
905 #define MAX_ATOM_SIZE 100
908 static char *atom_string, atom_name[MAX_ATOM_SIZE];
911 /* Report problems with a module. Error reporting is not very
912 elaborate, since this sorts of errors shouldn't really happen.
913 This subroutine never returns. */
915 static void bad_module (const char *) ATTRIBUTE_NORETURN;
918 bad_module (const char *msgid)
925 gfc_fatal_error ("Reading module %s at line %d column %d: %s",
926 module_name, module_line, module_column, msgid);
929 gfc_fatal_error ("Writing module %s at line %d column %d: %s",
930 module_name, module_line, module_column, msgid);
933 gfc_fatal_error ("Module %s at line %d column %d: %s",
934 module_name, module_line, module_column, msgid);
940 /* Set the module's input pointer. */
943 set_module_locus (module_locus *m)
945 module_column = m->column;
946 module_line = m->line;
947 fsetpos (module_fp, &m->pos);
951 /* Get the module's input pointer so that we can restore it later. */
954 get_module_locus (module_locus *m)
956 m->column = module_column;
957 m->line = module_line;
958 fgetpos (module_fp, &m->pos);
962 /* Get the next character in the module, updating our reckoning of
970 c = getc (module_fp);
973 bad_module ("Unexpected EOF");
986 /* Parse a string constant. The delimiter is guaranteed to be a
996 get_module_locus (&start);
1000 /* See how long the string is. */
1005 bad_module ("Unexpected end of module in string constant");
1023 set_module_locus (&start);
1025 atom_string = p = gfc_getmem (len + 1);
1027 for (; len > 0; len--)
1031 module_char (); /* Guaranteed to be another \'. */
1035 module_char (); /* Terminating \'. */
1036 *p = '\0'; /* C-style string for debug purposes. */
1040 /* Parse a small integer. */
1043 parse_integer (int c)
1051 get_module_locus (&m);
1057 atom_int = 10 * atom_int + c - '0';
1058 if (atom_int > 99999999)
1059 bad_module ("Integer overflow");
1062 set_module_locus (&m);
1080 get_module_locus (&m);
1085 if (!ISALNUM (c) && c != '_' && c != '-')
1089 if (++len > GFC_MAX_SYMBOL_LEN)
1090 bad_module ("Name too long");
1095 fseek (module_fp, -1, SEEK_CUR);
1096 module_column = m.column + len - 1;
1103 /* Read the next atom in the module's input stream. */
1114 while (c == ' ' || c == '\n');
1139 return ATOM_INTEGER;
1197 bad_module ("Bad name");
1204 /* Peek at the next atom on the input. */
1212 get_module_locus (&m);
1215 if (a == ATOM_STRING)
1216 gfc_free (atom_string);
1218 set_module_locus (&m);
1223 /* Read the next atom from the input, requiring that it be a
1227 require_atom (atom_type type)
1233 get_module_locus (&m);
1241 p = _("Expected name");
1244 p = _("Expected left parenthesis");
1247 p = _("Expected right parenthesis");
1250 p = _("Expected integer");
1253 p = _("Expected string");
1256 gfc_internal_error ("require_atom(): bad atom type required");
1259 set_module_locus (&m);
1265 /* Given a pointer to an mstring array, require that the current input
1266 be one of the strings in the array. We return the enum value. */
1269 find_enum (const mstring *m)
1273 i = gfc_string2code (m, atom_name);
1277 bad_module ("find_enum(): Enum not found");
1283 /**************** Module output subroutines ***************************/
1285 /* Output a character to a module file. */
1288 write_char (char out)
1290 if (putc (out, module_fp) == EOF)
1291 gfc_fatal_error ("Error writing modules file: %s", strerror (errno));
1293 /* Add this to our MD5. */
1294 md5_process_bytes (&out, sizeof (out), &ctx);
1306 /* Write an atom to a module. The line wrapping isn't perfect, but it
1307 should work most of the time. This isn't that big of a deal, since
1308 the file really isn't meant to be read by people anyway. */
1311 write_atom (atom_type atom, const void *v)
1333 i = *((const int *) v);
1335 gfc_internal_error ("write_atom(): Writing negative integer");
1337 sprintf (buffer, "%d", i);
1342 gfc_internal_error ("write_atom(): Trying to write dab atom");
1346 if(p == NULL || *p == '\0')
1351 if (atom != ATOM_RPAREN)
1353 if (module_column + len > 72)
1358 if (last_atom != ATOM_LPAREN && module_column != 1)
1363 if (atom == ATOM_STRING)
1366 while (p != NULL && *p)
1368 if (atom == ATOM_STRING && *p == '\'')
1373 if (atom == ATOM_STRING)
1381 /***************** Mid-level I/O subroutines *****************/
1383 /* These subroutines let their caller read or write atoms without
1384 caring about which of the two is actually happening. This lets a
1385 subroutine concentrate on the actual format of the data being
1388 static void mio_expr (gfc_expr **);
1389 static void mio_symbol_ref (gfc_symbol **);
1390 static void mio_symtree_ref (gfc_symtree **);
1392 /* Read or write an enumerated value. On writing, we return the input
1393 value for the convenience of callers. We avoid using an integer
1394 pointer because enums are sometimes inside bitfields. */
1397 mio_name (int t, const mstring *m)
1399 if (iomode == IO_OUTPUT)
1400 write_atom (ATOM_NAME, gfc_code2string (m, t));
1403 require_atom (ATOM_NAME);
1410 /* Specialization of mio_name. */
1412 #define DECL_MIO_NAME(TYPE) \
1413 static inline TYPE \
1414 MIO_NAME(TYPE) (TYPE t, const mstring *m) \
1416 return (TYPE) mio_name ((int) t, m); \
1418 #define MIO_NAME(TYPE) mio_name_##TYPE
1423 if (iomode == IO_OUTPUT)
1424 write_atom (ATOM_LPAREN, NULL);
1426 require_atom (ATOM_LPAREN);
1433 if (iomode == IO_OUTPUT)
1434 write_atom (ATOM_RPAREN, NULL);
1436 require_atom (ATOM_RPAREN);
1441 mio_integer (int *ip)
1443 if (iomode == IO_OUTPUT)
1444 write_atom (ATOM_INTEGER, ip);
1447 require_atom (ATOM_INTEGER);
1453 /* Read or write a character pointer that points to a string on the heap. */
1456 mio_allocated_string (const char *s)
1458 if (iomode == IO_OUTPUT)
1460 write_atom (ATOM_STRING, s);
1465 require_atom (ATOM_STRING);
1471 /* Read or write a string that is in static memory. */
1474 mio_pool_string (const char **stringp)
1476 /* TODO: one could write the string only once, and refer to it via a
1479 /* As a special case we have to deal with a NULL string. This
1480 happens for the 'module' member of 'gfc_symbol's that are not in a
1481 module. We read / write these as the empty string. */
1482 if (iomode == IO_OUTPUT)
1484 const char *p = *stringp == NULL ? "" : *stringp;
1485 write_atom (ATOM_STRING, p);
1489 require_atom (ATOM_STRING);
1490 *stringp = atom_string[0] == '\0' ? NULL : gfc_get_string (atom_string);
1491 gfc_free (atom_string);
1496 /* Read or write a string that is inside of some already-allocated
1500 mio_internal_string (char *string)
1502 if (iomode == IO_OUTPUT)
1503 write_atom (ATOM_STRING, string);
1506 require_atom (ATOM_STRING);
1507 strcpy (string, atom_string);
1508 gfc_free (atom_string);
1514 { AB_ALLOCATABLE, AB_DIMENSION, AB_EXTERNAL, AB_INTRINSIC, AB_OPTIONAL,
1515 AB_POINTER, AB_TARGET, AB_DUMMY, AB_RESULT, AB_DATA,
1516 AB_IN_NAMELIST, AB_IN_COMMON, AB_FUNCTION, AB_SUBROUTINE, AB_SEQUENCE,
1517 AB_ELEMENTAL, AB_PURE, AB_RECURSIVE, AB_GENERIC, AB_ALWAYS_EXPLICIT,
1518 AB_CRAY_POINTER, AB_CRAY_POINTEE, AB_THREADPRIVATE, AB_ALLOC_COMP,
1519 AB_VALUE, AB_VOLATILE, AB_PROTECTED, AB_IS_BIND_C, AB_IS_C_INTEROP,
1524 static const mstring attr_bits[] =
1526 minit ("ALLOCATABLE", AB_ALLOCATABLE),
1527 minit ("DIMENSION", AB_DIMENSION),
1528 minit ("EXTERNAL", AB_EXTERNAL),
1529 minit ("INTRINSIC", AB_INTRINSIC),
1530 minit ("OPTIONAL", AB_OPTIONAL),
1531 minit ("POINTER", AB_POINTER),
1532 minit ("VOLATILE", AB_VOLATILE),
1533 minit ("TARGET", AB_TARGET),
1534 minit ("THREADPRIVATE", AB_THREADPRIVATE),
1535 minit ("DUMMY", AB_DUMMY),
1536 minit ("RESULT", AB_RESULT),
1537 minit ("DATA", AB_DATA),
1538 minit ("IN_NAMELIST", AB_IN_NAMELIST),
1539 minit ("IN_COMMON", AB_IN_COMMON),
1540 minit ("FUNCTION", AB_FUNCTION),
1541 minit ("SUBROUTINE", AB_SUBROUTINE),
1542 minit ("SEQUENCE", AB_SEQUENCE),
1543 minit ("ELEMENTAL", AB_ELEMENTAL),
1544 minit ("PURE", AB_PURE),
1545 minit ("RECURSIVE", AB_RECURSIVE),
1546 minit ("GENERIC", AB_GENERIC),
1547 minit ("ALWAYS_EXPLICIT", AB_ALWAYS_EXPLICIT),
1548 minit ("CRAY_POINTER", AB_CRAY_POINTER),
1549 minit ("CRAY_POINTEE", AB_CRAY_POINTEE),
1550 minit ("IS_BIND_C", AB_IS_BIND_C),
1551 minit ("IS_C_INTEROP", AB_IS_C_INTEROP),
1552 minit ("IS_ISO_C", AB_IS_ISO_C),
1553 minit ("VALUE", AB_VALUE),
1554 minit ("ALLOC_COMP", AB_ALLOC_COMP),
1555 minit ("PROTECTED", AB_PROTECTED),
1560 /* Specialization of mio_name. */
1561 DECL_MIO_NAME (ab_attribute)
1562 DECL_MIO_NAME (ar_type)
1563 DECL_MIO_NAME (array_type)
1565 DECL_MIO_NAME (expr_t)
1566 DECL_MIO_NAME (gfc_access)
1567 DECL_MIO_NAME (gfc_intrinsic_op)
1568 DECL_MIO_NAME (ifsrc)
1569 DECL_MIO_NAME (save_state)
1570 DECL_MIO_NAME (procedure_type)
1571 DECL_MIO_NAME (ref_type)
1572 DECL_MIO_NAME (sym_flavor)
1573 DECL_MIO_NAME (sym_intent)
1574 #undef DECL_MIO_NAME
1576 /* Symbol attributes are stored in list with the first three elements
1577 being the enumerated fields, while the remaining elements (if any)
1578 indicate the individual attribute bits. The access field is not
1579 saved-- it controls what symbols are exported when a module is
1583 mio_symbol_attribute (symbol_attribute *attr)
1589 attr->flavor = MIO_NAME (sym_flavor) (attr->flavor, flavors);
1590 attr->intent = MIO_NAME (sym_intent) (attr->intent, intents);
1591 attr->proc = MIO_NAME (procedure_type) (attr->proc, procedures);
1592 attr->if_source = MIO_NAME (ifsrc) (attr->if_source, ifsrc_types);
1593 attr->save = MIO_NAME (save_state) (attr->save, save_status);
1595 if (iomode == IO_OUTPUT)
1597 if (attr->allocatable)
1598 MIO_NAME (ab_attribute) (AB_ALLOCATABLE, attr_bits);
1599 if (attr->dimension)
1600 MIO_NAME (ab_attribute) (AB_DIMENSION, attr_bits);
1602 MIO_NAME (ab_attribute) (AB_EXTERNAL, attr_bits);
1603 if (attr->intrinsic)
1604 MIO_NAME (ab_attribute) (AB_INTRINSIC, attr_bits);
1606 MIO_NAME (ab_attribute) (AB_OPTIONAL, attr_bits);
1608 MIO_NAME (ab_attribute) (AB_POINTER, attr_bits);
1609 if (attr->protected)
1610 MIO_NAME (ab_attribute) (AB_PROTECTED, attr_bits);
1612 MIO_NAME (ab_attribute) (AB_VALUE, attr_bits);
1613 if (attr->volatile_)
1614 MIO_NAME (ab_attribute) (AB_VOLATILE, attr_bits);
1616 MIO_NAME (ab_attribute) (AB_TARGET, attr_bits);
1617 if (attr->threadprivate)
1618 MIO_NAME (ab_attribute) (AB_THREADPRIVATE, attr_bits);
1620 MIO_NAME (ab_attribute) (AB_DUMMY, attr_bits);
1622 MIO_NAME (ab_attribute) (AB_RESULT, attr_bits);
1623 /* We deliberately don't preserve the "entry" flag. */
1626 MIO_NAME (ab_attribute) (AB_DATA, attr_bits);
1627 if (attr->in_namelist)
1628 MIO_NAME (ab_attribute) (AB_IN_NAMELIST, attr_bits);
1629 if (attr->in_common)
1630 MIO_NAME (ab_attribute) (AB_IN_COMMON, attr_bits);
1633 MIO_NAME (ab_attribute) (AB_FUNCTION, attr_bits);
1634 if (attr->subroutine)
1635 MIO_NAME (ab_attribute) (AB_SUBROUTINE, attr_bits);
1637 MIO_NAME (ab_attribute) (AB_GENERIC, attr_bits);
1640 MIO_NAME (ab_attribute) (AB_SEQUENCE, attr_bits);
1641 if (attr->elemental)
1642 MIO_NAME (ab_attribute) (AB_ELEMENTAL, attr_bits);
1644 MIO_NAME (ab_attribute) (AB_PURE, attr_bits);
1645 if (attr->recursive)
1646 MIO_NAME (ab_attribute) (AB_RECURSIVE, attr_bits);
1647 if (attr->always_explicit)
1648 MIO_NAME (ab_attribute) (AB_ALWAYS_EXPLICIT, attr_bits);
1649 if (attr->cray_pointer)
1650 MIO_NAME (ab_attribute) (AB_CRAY_POINTER, attr_bits);
1651 if (attr->cray_pointee)
1652 MIO_NAME (ab_attribute) (AB_CRAY_POINTEE, attr_bits);
1653 if (attr->is_bind_c)
1654 MIO_NAME(ab_attribute) (AB_IS_BIND_C, attr_bits);
1655 if (attr->is_c_interop)
1656 MIO_NAME(ab_attribute) (AB_IS_C_INTEROP, attr_bits);
1658 MIO_NAME(ab_attribute) (AB_IS_ISO_C, attr_bits);
1659 if (attr->alloc_comp)
1660 MIO_NAME (ab_attribute) (AB_ALLOC_COMP, attr_bits);
1670 if (t == ATOM_RPAREN)
1673 bad_module ("Expected attribute bit name");
1675 switch ((ab_attribute) find_enum (attr_bits))
1677 case AB_ALLOCATABLE:
1678 attr->allocatable = 1;
1681 attr->dimension = 1;
1687 attr->intrinsic = 1;
1696 attr->protected = 1;
1702 attr->volatile_ = 1;
1707 case AB_THREADPRIVATE:
1708 attr->threadprivate = 1;
1719 case AB_IN_NAMELIST:
1720 attr->in_namelist = 1;
1723 attr->in_common = 1;
1729 attr->subroutine = 1;
1738 attr->elemental = 1;
1744 attr->recursive = 1;
1746 case AB_ALWAYS_EXPLICIT:
1747 attr->always_explicit = 1;
1749 case AB_CRAY_POINTER:
1750 attr->cray_pointer = 1;
1752 case AB_CRAY_POINTEE:
1753 attr->cray_pointee = 1;
1756 attr->is_bind_c = 1;
1758 case AB_IS_C_INTEROP:
1759 attr->is_c_interop = 1;
1765 attr->alloc_comp = 1;
1773 static const mstring bt_types[] = {
1774 minit ("INTEGER", BT_INTEGER),
1775 minit ("REAL", BT_REAL),
1776 minit ("COMPLEX", BT_COMPLEX),
1777 minit ("LOGICAL", BT_LOGICAL),
1778 minit ("CHARACTER", BT_CHARACTER),
1779 minit ("DERIVED", BT_DERIVED),
1780 minit ("PROCEDURE", BT_PROCEDURE),
1781 minit ("UNKNOWN", BT_UNKNOWN),
1782 minit ("VOID", BT_VOID),
1788 mio_charlen (gfc_charlen **clp)
1794 if (iomode == IO_OUTPUT)
1798 mio_expr (&cl->length);
1802 if (peek_atom () != ATOM_RPAREN)
1804 cl = gfc_get_charlen ();
1805 mio_expr (&cl->length);
1809 cl->next = gfc_current_ns->cl_list;
1810 gfc_current_ns->cl_list = cl;
1818 /* Return a symtree node with a name that is guaranteed to be unique
1819 within the namespace and corresponds to an illegal fortran name. */
1821 static gfc_symtree *
1822 get_unique_symtree (gfc_namespace *ns)
1824 char name[GFC_MAX_SYMBOL_LEN + 1];
1825 static int serial = 0;
1827 sprintf (name, "@%d", serial++);
1828 return gfc_new_symtree (&ns->sym_root, name);
1832 /* See if a name is a generated name. */
1835 check_unique_name (const char *name)
1837 return *name == '@';
1842 mio_typespec (gfc_typespec *ts)
1846 ts->type = MIO_NAME (bt) (ts->type, bt_types);
1848 if (ts->type != BT_DERIVED)
1849 mio_integer (&ts->kind);
1851 mio_symbol_ref (&ts->derived);
1853 /* Add info for C interop and is_iso_c. */
1854 mio_integer (&ts->is_c_interop);
1855 mio_integer (&ts->is_iso_c);
1857 /* If the typespec is for an identifier either from iso_c_binding, or
1858 a constant that was initialized to an identifier from it, use the
1859 f90_type. Otherwise, use the ts->type, since it shouldn't matter. */
1861 ts->f90_type = MIO_NAME (bt) (ts->f90_type, bt_types);
1863 ts->f90_type = MIO_NAME (bt) (ts->type, bt_types);
1865 if (ts->type != BT_CHARACTER)
1867 /* ts->cl is only valid for BT_CHARACTER. */
1872 mio_charlen (&ts->cl);
1878 static const mstring array_spec_types[] = {
1879 minit ("EXPLICIT", AS_EXPLICIT),
1880 minit ("ASSUMED_SHAPE", AS_ASSUMED_SHAPE),
1881 minit ("DEFERRED", AS_DEFERRED),
1882 minit ("ASSUMED_SIZE", AS_ASSUMED_SIZE),
1888 mio_array_spec (gfc_array_spec **asp)
1895 if (iomode == IO_OUTPUT)
1903 if (peek_atom () == ATOM_RPAREN)
1909 *asp = as = gfc_get_array_spec ();
1912 mio_integer (&as->rank);
1913 as->type = MIO_NAME (array_type) (as->type, array_spec_types);
1915 for (i = 0; i < as->rank; i++)
1917 mio_expr (&as->lower[i]);
1918 mio_expr (&as->upper[i]);
1926 /* Given a pointer to an array reference structure (which lives in a
1927 gfc_ref structure), find the corresponding array specification
1928 structure. Storing the pointer in the ref structure doesn't quite
1929 work when loading from a module. Generating code for an array
1930 reference also needs more information than just the array spec. */
1932 static const mstring array_ref_types[] = {
1933 minit ("FULL", AR_FULL),
1934 minit ("ELEMENT", AR_ELEMENT),
1935 minit ("SECTION", AR_SECTION),
1941 mio_array_ref (gfc_array_ref *ar)
1946 ar->type = MIO_NAME (ar_type) (ar->type, array_ref_types);
1947 mio_integer (&ar->dimen);
1955 for (i = 0; i < ar->dimen; i++)
1956 mio_expr (&ar->start[i]);
1961 for (i = 0; i < ar->dimen; i++)
1963 mio_expr (&ar->start[i]);
1964 mio_expr (&ar->end[i]);
1965 mio_expr (&ar->stride[i]);
1971 gfc_internal_error ("mio_array_ref(): Unknown array ref");
1974 /* Unfortunately, ar->dimen_type is an anonymous enumerated type so
1975 we can't call mio_integer directly. Instead loop over each element
1976 and cast it to/from an integer. */
1977 if (iomode == IO_OUTPUT)
1979 for (i = 0; i < ar->dimen; i++)
1981 int tmp = (int)ar->dimen_type[i];
1982 write_atom (ATOM_INTEGER, &tmp);
1987 for (i = 0; i < ar->dimen; i++)
1989 require_atom (ATOM_INTEGER);
1990 ar->dimen_type[i] = atom_int;
1994 if (iomode == IO_INPUT)
1996 ar->where = gfc_current_locus;
1998 for (i = 0; i < ar->dimen; i++)
1999 ar->c_where[i] = gfc_current_locus;
2006 /* Saves or restores a pointer. The pointer is converted back and
2007 forth from an integer. We return the pointer_info pointer so that
2008 the caller can take additional action based on the pointer type. */
2010 static pointer_info *
2011 mio_pointer_ref (void *gp)
2015 if (iomode == IO_OUTPUT)
2017 p = get_pointer (*((char **) gp));
2018 write_atom (ATOM_INTEGER, &p->integer);
2022 require_atom (ATOM_INTEGER);
2023 p = add_fixup (atom_int, gp);
2030 /* Save and load references to components that occur within
2031 expressions. We have to describe these references by a number and
2032 by name. The number is necessary for forward references during
2033 reading, and the name is necessary if the symbol already exists in
2034 the namespace and is not loaded again. */
2037 mio_component_ref (gfc_component **cp, gfc_symbol *sym)
2039 char name[GFC_MAX_SYMBOL_LEN + 1];
2043 p = mio_pointer_ref (cp);
2044 if (p->type == P_UNKNOWN)
2045 p->type = P_COMPONENT;
2047 if (iomode == IO_OUTPUT)
2048 mio_pool_string (&(*cp)->name);
2051 mio_internal_string (name);
2053 /* It can happen that a component reference can be read before the
2054 associated derived type symbol has been loaded. Return now and
2055 wait for a later iteration of load_needed. */
2059 if (sym->components != NULL && p->u.pointer == NULL)
2061 /* Symbol already loaded, so search by name. */
2062 for (q = sym->components; q; q = q->next)
2063 if (strcmp (q->name, name) == 0)
2067 gfc_internal_error ("mio_component_ref(): Component not found");
2069 associate_integer_pointer (p, q);
2072 /* Make sure this symbol will eventually be loaded. */
2073 p = find_pointer2 (sym);
2074 if (p->u.rsym.state == UNUSED)
2075 p->u.rsym.state = NEEDED;
2081 mio_component (gfc_component *c)
2088 if (iomode == IO_OUTPUT)
2090 p = get_pointer (c);
2091 mio_integer (&p->integer);
2096 p = get_integer (n);
2097 associate_integer_pointer (p, c);
2100 if (p->type == P_UNKNOWN)
2101 p->type = P_COMPONENT;
2103 mio_pool_string (&c->name);
2104 mio_typespec (&c->ts);
2105 mio_array_spec (&c->as);
2107 mio_integer (&c->dimension);
2108 mio_integer (&c->pointer);
2109 mio_integer (&c->allocatable);
2110 c->access = MIO_NAME (gfc_access) (c->access, access_types);
2112 mio_expr (&c->initializer);
2118 mio_component_list (gfc_component **cp)
2120 gfc_component *c, *tail;
2124 if (iomode == IO_OUTPUT)
2126 for (c = *cp; c; c = c->next)
2136 if (peek_atom () == ATOM_RPAREN)
2139 c = gfc_get_component ();
2156 mio_actual_arg (gfc_actual_arglist *a)
2159 mio_pool_string (&a->name);
2160 mio_expr (&a->expr);
2166 mio_actual_arglist (gfc_actual_arglist **ap)
2168 gfc_actual_arglist *a, *tail;
2172 if (iomode == IO_OUTPUT)
2174 for (a = *ap; a; a = a->next)
2184 if (peek_atom () != ATOM_LPAREN)
2187 a = gfc_get_actual_arglist ();
2203 /* Read and write formal argument lists. */
2206 mio_formal_arglist (gfc_symbol *sym)
2208 gfc_formal_arglist *f, *tail;
2212 if (iomode == IO_OUTPUT)
2214 for (f = sym->formal; f; f = f->next)
2215 mio_symbol_ref (&f->sym);
2219 sym->formal = tail = NULL;
2221 while (peek_atom () != ATOM_RPAREN)
2223 f = gfc_get_formal_arglist ();
2224 mio_symbol_ref (&f->sym);
2226 if (sym->formal == NULL)
2239 /* Save or restore a reference to a symbol node. */
2242 mio_symbol_ref (gfc_symbol **symp)
2246 p = mio_pointer_ref (symp);
2247 if (p->type == P_UNKNOWN)
2250 if (iomode == IO_OUTPUT)
2252 if (p->u.wsym.state == UNREFERENCED)
2253 p->u.wsym.state = NEEDS_WRITE;
2257 if (p->u.rsym.state == UNUSED)
2258 p->u.rsym.state = NEEDED;
2263 /* Save or restore a reference to a symtree node. */
2266 mio_symtree_ref (gfc_symtree **stp)
2271 if (iomode == IO_OUTPUT)
2272 mio_symbol_ref (&(*stp)->n.sym);
2275 require_atom (ATOM_INTEGER);
2276 p = get_integer (atom_int);
2278 /* An unused equivalence member; make a symbol and a symtree
2280 if (in_load_equiv && p->u.rsym.symtree == NULL)
2282 /* Since this is not used, it must have a unique name. */
2283 p->u.rsym.symtree = get_unique_symtree (gfc_current_ns);
2285 /* Make the symbol. */
2286 if (p->u.rsym.sym == NULL)
2288 p->u.rsym.sym = gfc_new_symbol (p->u.rsym.true_name,
2290 p->u.rsym.sym->module = gfc_get_string (p->u.rsym.module);
2293 p->u.rsym.symtree->n.sym = p->u.rsym.sym;
2294 p->u.rsym.symtree->n.sym->refs++;
2295 p->u.rsym.referenced = 1;
2298 if (p->type == P_UNKNOWN)
2301 if (p->u.rsym.state == UNUSED)
2302 p->u.rsym.state = NEEDED;
2304 if (p->u.rsym.symtree != NULL)
2306 *stp = p->u.rsym.symtree;
2310 f = gfc_getmem (sizeof (fixup_t));
2312 f->next = p->u.rsym.stfixup;
2313 p->u.rsym.stfixup = f;
2315 f->pointer = (void **) stp;
2322 mio_iterator (gfc_iterator **ip)
2328 if (iomode == IO_OUTPUT)
2335 if (peek_atom () == ATOM_RPAREN)
2341 *ip = gfc_get_iterator ();
2346 mio_expr (&iter->var);
2347 mio_expr (&iter->start);
2348 mio_expr (&iter->end);
2349 mio_expr (&iter->step);
2357 mio_constructor (gfc_constructor **cp)
2359 gfc_constructor *c, *tail;
2363 if (iomode == IO_OUTPUT)
2365 for (c = *cp; c; c = c->next)
2368 mio_expr (&c->expr);
2369 mio_iterator (&c->iterator);
2378 while (peek_atom () != ATOM_RPAREN)
2380 c = gfc_get_constructor ();
2390 mio_expr (&c->expr);
2391 mio_iterator (&c->iterator);
2400 static const mstring ref_types[] = {
2401 minit ("ARRAY", REF_ARRAY),
2402 minit ("COMPONENT", REF_COMPONENT),
2403 minit ("SUBSTRING", REF_SUBSTRING),
2409 mio_ref (gfc_ref **rp)
2416 r->type = MIO_NAME (ref_type) (r->type, ref_types);
2421 mio_array_ref (&r->u.ar);
2425 mio_symbol_ref (&r->u.c.sym);
2426 mio_component_ref (&r->u.c.component, r->u.c.sym);
2430 mio_expr (&r->u.ss.start);
2431 mio_expr (&r->u.ss.end);
2432 mio_charlen (&r->u.ss.length);
2441 mio_ref_list (gfc_ref **rp)
2443 gfc_ref *ref, *head, *tail;
2447 if (iomode == IO_OUTPUT)
2449 for (ref = *rp; ref; ref = ref->next)
2456 while (peek_atom () != ATOM_RPAREN)
2459 head = tail = gfc_get_ref ();
2462 tail->next = gfc_get_ref ();
2476 /* Read and write an integer value. */
2479 mio_gmp_integer (mpz_t *integer)
2483 if (iomode == IO_INPUT)
2485 if (parse_atom () != ATOM_STRING)
2486 bad_module ("Expected integer string");
2488 mpz_init (*integer);
2489 if (mpz_set_str (*integer, atom_string, 10))
2490 bad_module ("Error converting integer");
2492 gfc_free (atom_string);
2496 p = mpz_get_str (NULL, 10, *integer);
2497 write_atom (ATOM_STRING, p);
2504 mio_gmp_real (mpfr_t *real)
2509 if (iomode == IO_INPUT)
2511 if (parse_atom () != ATOM_STRING)
2512 bad_module ("Expected real string");
2515 mpfr_set_str (*real, atom_string, 16, GFC_RND_MODE);
2516 gfc_free (atom_string);
2520 p = mpfr_get_str (NULL, &exponent, 16, 0, *real, GFC_RND_MODE);
2521 atom_string = gfc_getmem (strlen (p) + 20);
2523 sprintf (atom_string, "0.%s@%ld", p, exponent);
2525 /* Fix negative numbers. */
2526 if (atom_string[2] == '-')
2528 atom_string[0] = '-';
2529 atom_string[1] = '0';
2530 atom_string[2] = '.';
2533 write_atom (ATOM_STRING, atom_string);
2535 gfc_free (atom_string);
2541 /* Save and restore the shape of an array constructor. */
2544 mio_shape (mpz_t **pshape, int rank)
2550 /* A NULL shape is represented by (). */
2553 if (iomode == IO_OUTPUT)
2565 if (t == ATOM_RPAREN)
2572 shape = gfc_get_shape (rank);
2576 for (n = 0; n < rank; n++)
2577 mio_gmp_integer (&shape[n]);
2583 static const mstring expr_types[] = {
2584 minit ("OP", EXPR_OP),
2585 minit ("FUNCTION", EXPR_FUNCTION),
2586 minit ("CONSTANT", EXPR_CONSTANT),
2587 minit ("VARIABLE", EXPR_VARIABLE),
2588 minit ("SUBSTRING", EXPR_SUBSTRING),
2589 minit ("STRUCTURE", EXPR_STRUCTURE),
2590 minit ("ARRAY", EXPR_ARRAY),
2591 minit ("NULL", EXPR_NULL),
2595 /* INTRINSIC_ASSIGN is missing because it is used as an index for
2596 generic operators, not in expressions. INTRINSIC_USER is also
2597 replaced by the correct function name by the time we see it. */
2599 static const mstring intrinsics[] =
2601 minit ("UPLUS", INTRINSIC_UPLUS),
2602 minit ("UMINUS", INTRINSIC_UMINUS),
2603 minit ("PLUS", INTRINSIC_PLUS),
2604 minit ("MINUS", INTRINSIC_MINUS),
2605 minit ("TIMES", INTRINSIC_TIMES),
2606 minit ("DIVIDE", INTRINSIC_DIVIDE),
2607 minit ("POWER", INTRINSIC_POWER),
2608 minit ("CONCAT", INTRINSIC_CONCAT),
2609 minit ("AND", INTRINSIC_AND),
2610 minit ("OR", INTRINSIC_OR),
2611 minit ("EQV", INTRINSIC_EQV),
2612 minit ("NEQV", INTRINSIC_NEQV),
2613 minit ("EQ", INTRINSIC_EQ),
2614 minit ("NE", INTRINSIC_NE),
2615 minit ("GT", INTRINSIC_GT),
2616 minit ("GE", INTRINSIC_GE),
2617 minit ("LT", INTRINSIC_LT),
2618 minit ("LE", INTRINSIC_LE),
2619 minit ("NOT", INTRINSIC_NOT),
2620 minit ("PARENTHESES", INTRINSIC_PARENTHESES),
2625 /* Remedy a couple of situations where the gfc_expr's can be defective. */
2628 fix_mio_expr (gfc_expr *e)
2630 gfc_symtree *ns_st = NULL;
2633 if (iomode != IO_OUTPUT)
2638 /* If this is a symtree for a symbol that came from a contained module
2639 namespace, it has a unique name and we should look in the current
2640 namespace to see if the required, non-contained symbol is available
2641 yet. If so, the latter should be written. */
2642 if (e->symtree->n.sym && check_unique_name (e->symtree->name))
2643 ns_st = gfc_find_symtree (gfc_current_ns->sym_root,
2644 e->symtree->n.sym->name);
2646 /* On the other hand, if the existing symbol is the module name or the
2647 new symbol is a dummy argument, do not do the promotion. */
2648 if (ns_st && ns_st->n.sym
2649 && ns_st->n.sym->attr.flavor != FL_MODULE
2650 && !e->symtree->n.sym->attr.dummy)
2653 else if (e->expr_type == EXPR_FUNCTION && e->value.function.name)
2655 /* In some circumstances, a function used in an initialization
2656 expression, in one use associated module, can fail to be
2657 coupled to its symtree when used in a specification
2658 expression in another module. */
2659 fname = e->value.function.esym ? e->value.function.esym->name
2660 : e->value.function.isym->name;
2661 e->symtree = gfc_find_symtree (gfc_current_ns->sym_root, fname);
2666 /* Read and write expressions. The form "()" is allowed to indicate a
2670 mio_expr (gfc_expr **ep)
2678 if (iomode == IO_OUTPUT)
2687 MIO_NAME (expr_t) (e->expr_type, expr_types);
2692 if (t == ATOM_RPAREN)
2699 bad_module ("Expected expression type");
2701 e = *ep = gfc_get_expr ();
2702 e->where = gfc_current_locus;
2703 e->expr_type = (expr_t) find_enum (expr_types);
2706 mio_typespec (&e->ts);
2707 mio_integer (&e->rank);
2711 switch (e->expr_type)
2714 e->value.op.operator
2715 = MIO_NAME (gfc_intrinsic_op) (e->value.op.operator, intrinsics);
2717 switch (e->value.op.operator)
2719 case INTRINSIC_UPLUS:
2720 case INTRINSIC_UMINUS:
2722 case INTRINSIC_PARENTHESES:
2723 mio_expr (&e->value.op.op1);
2726 case INTRINSIC_PLUS:
2727 case INTRINSIC_MINUS:
2728 case INTRINSIC_TIMES:
2729 case INTRINSIC_DIVIDE:
2730 case INTRINSIC_POWER:
2731 case INTRINSIC_CONCAT:
2735 case INTRINSIC_NEQV:
2742 mio_expr (&e->value.op.op1);
2743 mio_expr (&e->value.op.op2);
2747 bad_module ("Bad operator");
2753 mio_symtree_ref (&e->symtree);
2754 mio_actual_arglist (&e->value.function.actual);
2756 if (iomode == IO_OUTPUT)
2758 e->value.function.name
2759 = mio_allocated_string (e->value.function.name);
2760 flag = e->value.function.esym != NULL;
2761 mio_integer (&flag);
2763 mio_symbol_ref (&e->value.function.esym);
2765 write_atom (ATOM_STRING, e->value.function.isym->name);
2769 require_atom (ATOM_STRING);
2770 e->value.function.name = gfc_get_string (atom_string);
2771 gfc_free (atom_string);
2773 mio_integer (&flag);
2775 mio_symbol_ref (&e->value.function.esym);
2778 require_atom (ATOM_STRING);
2779 e->value.function.isym = gfc_find_function (atom_string);
2780 gfc_free (atom_string);
2787 mio_symtree_ref (&e->symtree);
2788 mio_ref_list (&e->ref);
2791 case EXPR_SUBSTRING:
2792 e->value.character.string
2793 = (char *) mio_allocated_string (e->value.character.string);
2794 mio_ref_list (&e->ref);
2797 case EXPR_STRUCTURE:
2799 mio_constructor (&e->value.constructor);
2800 mio_shape (&e->shape, e->rank);
2807 mio_gmp_integer (&e->value.integer);
2811 gfc_set_model_kind (e->ts.kind);
2812 mio_gmp_real (&e->value.real);
2816 gfc_set_model_kind (e->ts.kind);
2817 mio_gmp_real (&e->value.complex.r);
2818 mio_gmp_real (&e->value.complex.i);
2822 mio_integer (&e->value.logical);
2826 mio_integer (&e->value.character.length);
2827 e->value.character.string
2828 = (char *) mio_allocated_string (e->value.character.string);
2832 bad_module ("Bad type in constant expression");
2845 /* Read and write namelists. */
2848 mio_namelist (gfc_symbol *sym)
2850 gfc_namelist *n, *m;
2851 const char *check_name;
2855 if (iomode == IO_OUTPUT)
2857 for (n = sym->namelist; n; n = n->next)
2858 mio_symbol_ref (&n->sym);
2862 /* This departure from the standard is flagged as an error.
2863 It does, in fact, work correctly. TODO: Allow it
2865 if (sym->attr.flavor == FL_NAMELIST)
2867 check_name = find_use_name (sym->name);
2868 if (check_name && strcmp (check_name, sym->name) != 0)
2869 gfc_error ("Namelist %s cannot be renamed by USE "
2870 "association to %s", sym->name, check_name);
2874 while (peek_atom () != ATOM_RPAREN)
2876 n = gfc_get_namelist ();
2877 mio_symbol_ref (&n->sym);
2879 if (sym->namelist == NULL)
2886 sym->namelist_tail = m;
2893 /* Save/restore lists of gfc_interface stuctures. When loading an
2894 interface, we are really appending to the existing list of
2895 interfaces. Checking for duplicate and ambiguous interfaces has to
2896 be done later when all symbols have been loaded. */
2899 mio_interface_rest (gfc_interface **ip)
2901 gfc_interface *tail, *p;
2903 if (iomode == IO_OUTPUT)
2906 for (p = *ip; p; p = p->next)
2907 mio_symbol_ref (&p->sym);
2922 if (peek_atom () == ATOM_RPAREN)
2925 p = gfc_get_interface ();
2926 p->where = gfc_current_locus;
2927 mio_symbol_ref (&p->sym);
2942 /* Save/restore a nameless operator interface. */
2945 mio_interface (gfc_interface **ip)
2948 mio_interface_rest (ip);
2952 /* Save/restore a named operator interface. */
2955 mio_symbol_interface (const char **name, const char **module,
2959 mio_pool_string (name);
2960 mio_pool_string (module);
2961 mio_interface_rest (ip);
2966 mio_namespace_ref (gfc_namespace **nsp)
2971 p = mio_pointer_ref (nsp);
2973 if (p->type == P_UNKNOWN)
2974 p->type = P_NAMESPACE;
2976 if (iomode == IO_INPUT && p->integer != 0)
2978 ns = (gfc_namespace *) p->u.pointer;
2981 ns = gfc_get_namespace (NULL, 0);
2982 associate_integer_pointer (p, ns);
2990 /* Unlike most other routines, the address of the symbol node is already
2991 fixed on input and the name/module has already been filled in. */
2994 mio_symbol (gfc_symbol *sym)
2996 int intmod = INTMOD_NONE;
2998 gfc_formal_arglist *formal;
3002 mio_symbol_attribute (&sym->attr);
3003 mio_typespec (&sym->ts);
3005 /* Contained procedures don't have formal namespaces. Instead we output the
3006 procedure namespace. The will contain the formal arguments. */
3007 if (iomode == IO_OUTPUT)
3009 formal = sym->formal;
3010 while (formal && !formal->sym)
3011 formal = formal->next;
3014 mio_namespace_ref (&formal->sym->ns);
3016 mio_namespace_ref (&sym->formal_ns);
3020 mio_namespace_ref (&sym->formal_ns);
3023 sym->formal_ns->proc_name = sym;
3028 /* Save/restore common block links. */
3029 mio_symbol_ref (&sym->common_next);
3031 mio_formal_arglist (sym);
3033 if (sym->attr.flavor == FL_PARAMETER)
3034 mio_expr (&sym->value);
3036 mio_array_spec (&sym->as);
3038 mio_symbol_ref (&sym->result);
3040 if (sym->attr.cray_pointee)
3041 mio_symbol_ref (&sym->cp_pointer);
3043 /* Note that components are always saved, even if they are supposed
3044 to be private. Component access is checked during searching. */
3046 mio_component_list (&sym->components);
3048 if (sym->components != NULL)
3049 sym->component_access
3050 = MIO_NAME (gfc_access) (sym->component_access, access_types);
3054 /* Add the fields that say whether this is from an intrinsic module,
3055 and if so, what symbol it is within the module. */
3056 /* mio_integer (&(sym->from_intmod)); */
3057 if (iomode == IO_OUTPUT)
3059 intmod = sym->from_intmod;
3060 mio_integer (&intmod);
3064 mio_integer (&intmod);
3065 sym->from_intmod = intmod;
3068 mio_integer (&(sym->intmod_sym_id));
3074 /************************* Top level subroutines *************************/
3076 /* Skip a list between balanced left and right parens. */
3086 switch (parse_atom ())
3097 gfc_free (atom_string);
3109 /* Load operator interfaces from the module. Interfaces are unusual
3110 in that they attach themselves to existing symbols. */
3113 load_operator_interfaces (void)
3116 char name[GFC_MAX_SYMBOL_LEN + 1], module[GFC_MAX_SYMBOL_LEN + 1];
3121 while (peek_atom () != ATOM_RPAREN)
3125 mio_internal_string (name);
3126 mio_internal_string (module);
3128 /* Decide if we need to load this one or not. */
3129 p = find_use_name (name);
3132 while (parse_atom () != ATOM_RPAREN);
3136 uop = gfc_get_uop (p);
3137 mio_interface_rest (&uop->operator);
3145 /* Load interfaces from the module. Interfaces are unusual in that
3146 they attach themselves to existing symbols. */
3149 load_generic_interfaces (void)
3152 char name[GFC_MAX_SYMBOL_LEN + 1], module[GFC_MAX_SYMBOL_LEN + 1];
3154 gfc_interface *generic = NULL;
3159 while (peek_atom () != ATOM_RPAREN)
3163 mio_internal_string (name);
3164 mio_internal_string (module);
3166 n = number_use_names (name);
3169 for (i = 1; i <= n; i++)
3171 /* Decide if we need to load this one or not. */
3172 p = find_use_name_n (name, &i);
3174 if (p == NULL || gfc_find_symbol (p, NULL, 0, &sym))
3176 while (parse_atom () != ATOM_RPAREN);
3182 gfc_get_symbol (p, NULL, &sym);
3184 sym->attr.flavor = FL_PROCEDURE;
3185 sym->attr.generic = 1;
3186 sym->attr.use_assoc = 1;
3190 /* Unless sym is a generic interface, this reference
3194 st = gfc_find_symtree (gfc_current_ns->sym_root, p);
3195 if (!sym->attr.generic
3196 && sym->module != NULL
3197 && strcmp(module, sym->module) != 0)
3202 mio_interface_rest (&sym->generic);
3203 generic = sym->generic;
3207 sym->generic = generic;
3208 sym->attr.generic_copy = 1;
3217 /* Load common blocks. */
3222 char name[GFC_MAX_SYMBOL_LEN + 1];
3227 while (peek_atom () != ATOM_RPAREN)
3231 mio_internal_string (name);
3233 p = gfc_get_common (name, 1);
3235 mio_symbol_ref (&p->head);
3236 mio_integer (&flags);
3240 p->threadprivate = 1;
3243 /* Get whether this was a bind(c) common or not. */
3244 mio_integer (&p->is_bind_c);
3245 /* Get the binding label. */
3246 mio_internal_string (p->binding_label);
3255 /* Load equivalences. The flag in_load_equiv informs mio_expr_ref of this
3256 so that unused variables are not loaded and so that the expression can
3262 gfc_equiv *head, *tail, *end, *eq;
3266 in_load_equiv = true;
3268 end = gfc_current_ns->equiv;
3269 while (end != NULL && end->next != NULL)
3272 while (peek_atom () != ATOM_RPAREN) {
3276 while(peek_atom () != ATOM_RPAREN)
3279 head = tail = gfc_get_equiv ();
3282 tail->eq = gfc_get_equiv ();
3286 mio_pool_string (&tail->module);
3287 mio_expr (&tail->expr);
3290 /* Unused equivalence members have a unique name. */
3292 for (eq = head; eq; eq = eq->eq)
3294 if (!check_unique_name (eq->expr->symtree->name))
3303 for (eq = head; eq; eq = head)
3306 gfc_free_expr (eq->expr);
3312 gfc_current_ns->equiv = head;
3323 in_load_equiv = false;
3327 /* Recursive function to traverse the pointer_info tree and load a
3328 needed symbol. We return nonzero if we load a symbol and stop the
3329 traversal, because the act of loading can alter the tree. */
3332 load_needed (pointer_info *p)
3343 rv |= load_needed (p->left);
3344 rv |= load_needed (p->right);
3346 if (p->type != P_SYMBOL || p->u.rsym.state != NEEDED)
3349 p->u.rsym.state = USED;
3351 set_module_locus (&p->u.rsym.where);
3353 sym = p->u.rsym.sym;
3356 q = get_integer (p->u.rsym.ns);
3358 ns = (gfc_namespace *) q->u.pointer;
3361 /* Create an interface namespace if necessary. These are
3362 the namespaces that hold the formal parameters of module
3365 ns = gfc_get_namespace (NULL, 0);
3366 associate_integer_pointer (q, ns);
3369 sym = gfc_new_symbol (p->u.rsym.true_name, ns);
3370 sym->module = gfc_get_string (p->u.rsym.module);
3372 associate_integer_pointer (p, sym);
3376 sym->attr.use_assoc = 1;
3378 sym->attr.use_only = 1;
3384 /* Recursive function for cleaning up things after a module has been read. */
3387 read_cleanup (pointer_info *p)
3395 read_cleanup (p->left);
3396 read_cleanup (p->right);
3398 if (p->type == P_SYMBOL && p->u.rsym.state == USED && !p->u.rsym.referenced)
3400 /* Add hidden symbols to the symtree. */
3401 q = get_integer (p->u.rsym.ns);
3402 st = get_unique_symtree ((gfc_namespace *) q->u.pointer);
3404 st->n.sym = p->u.rsym.sym;
3407 /* Fixup any symtree references. */
3408 p->u.rsym.symtree = st;
3409 resolve_fixups (p->u.rsym.stfixup, st);
3410 p->u.rsym.stfixup = NULL;
3413 /* Free unused symbols. */
3414 if (p->type == P_SYMBOL && p->u.rsym.state == UNUSED)
3415 gfc_free_symbol (p->u.rsym.sym);
3419 /* Given a root symtree node and a symbol, try to find a symtree that
3420 references the symbol that is not a unique name. */
3422 static gfc_symtree *
3423 find_symtree_for_symbol (gfc_symtree *st, gfc_symbol *sym)
3425 gfc_symtree *s = NULL;
3430 s = find_symtree_for_symbol (st->right, sym);
3433 s = find_symtree_for_symbol (st->left, sym);
3437 if (st->n.sym == sym && !check_unique_name (st->name))
3444 /* Read a module file. */
3449 module_locus operator_interfaces, user_operators;
3451 char name[GFC_MAX_SYMBOL_LEN + 1];
3453 int ambiguous, j, nuse, symbol;
3454 pointer_info *info, *q;
3459 get_module_locus (&operator_interfaces); /* Skip these for now. */
3462 get_module_locus (&user_operators);
3466 /* Skip commons and equivalences for now. */
3472 /* Create the fixup nodes for all the symbols. */
3474 while (peek_atom () != ATOM_RPAREN)
3476 require_atom (ATOM_INTEGER);
3477 info = get_integer (atom_int);
3479 info->type = P_SYMBOL;
3480 info->u.rsym.state = UNUSED;
3482 mio_internal_string (info->u.rsym.true_name);
3483 mio_internal_string (info->u.rsym.module);
3484 mio_internal_string (info->u.rsym.binding_label);
3487 require_atom (ATOM_INTEGER);
3488 info->u.rsym.ns = atom_int;
3490 get_module_locus (&info->u.rsym.where);
3493 /* See if the symbol has already been loaded by a previous module.
3494 If so, we reference the existing symbol and prevent it from
3495 being loaded again. This should not happen if the symbol being
3496 read is an index for an assumed shape dummy array (ns != 1). */
3498 sym = find_true_name (info->u.rsym.true_name, info->u.rsym.module);
3501 || (sym->attr.flavor == FL_VARIABLE && info->u.rsym.ns !=1))
3504 info->u.rsym.state = USED;
3505 info->u.rsym.sym = sym;
3507 /* Some symbols do not have a namespace (eg. formal arguments),
3508 so the automatic "unique symtree" mechanism must be suppressed
3509 by marking them as referenced. */
3510 q = get_integer (info->u.rsym.ns);
3511 if (q->u.pointer == NULL)
3513 info->u.rsym.referenced = 1;
3517 /* If possible recycle the symtree that references the symbol.
3518 If a symtree is not found and the module does not import one,
3519 a unique-name symtree is found by read_cleanup. */
3520 st = find_symtree_for_symbol (gfc_current_ns->sym_root, sym);
3523 info->u.rsym.symtree = st;
3524 info->u.rsym.referenced = 1;
3530 /* Parse the symtree lists. This lets us mark which symbols need to
3531 be loaded. Renaming is also done at this point by replacing the
3536 while (peek_atom () != ATOM_RPAREN)
3538 mio_internal_string (name);
3539 mio_integer (&ambiguous);
3540 mio_integer (&symbol);
3542 info = get_integer (symbol);
3544 /* See how many use names there are. If none, go through the start
3545 of the loop at least once. */
3546 nuse = number_use_names (name);
3550 for (j = 1; j <= nuse; j++)
3552 /* Get the jth local name for this symbol. */
3553 p = find_use_name_n (name, &j);
3555 if (p == NULL && strcmp (name, module_name) == 0)
3558 /* Skip symtree nodes not in an ONLY clause, unless there
3559 is an existing symtree loaded from another USE statement. */
3562 st = gfc_find_symtree (gfc_current_ns->sym_root, name);
3564 info->u.rsym.symtree = st;
3568 st = gfc_find_symtree (gfc_current_ns->sym_root, p);
3572 /* Check for ambiguous symbols. */
3573 if (st->n.sym != info->u.rsym.sym)
3575 info->u.rsym.symtree = st;
3579 /* Create a symtree node in the current namespace for this
3581 st = check_unique_name (p)
3582 ? get_unique_symtree (gfc_current_ns)
3583 : gfc_new_symtree (&gfc_current_ns->sym_root, p);
3585 st->ambiguous = ambiguous;
3587 sym = info->u.rsym.sym;
3589 /* Create a symbol node if it doesn't already exist. */
3592 info->u.rsym.sym = gfc_new_symbol (info->u.rsym.true_name,
3594 sym = info->u.rsym.sym;
3595 sym->module = gfc_get_string (info->u.rsym.module);
3597 /* TODO: hmm, can we test this? Do we know it will be
3598 initialized to zeros? */
3599 if (info->u.rsym.binding_label[0] != '\0')
3600 strcpy (sym->binding_label, info->u.rsym.binding_label);
3606 /* Store the symtree pointing to this symbol. */
3607 info->u.rsym.symtree = st;
3609 if (info->u.rsym.state == UNUSED)
3610 info->u.rsym.state = NEEDED;
3611 info->u.rsym.referenced = 1;
3618 /* Load intrinsic operator interfaces. */
3619 set_module_locus (&operator_interfaces);
3622 for (i = GFC_INTRINSIC_BEGIN; i != GFC_INTRINSIC_END; i++)
3624 if (i == INTRINSIC_USER)
3629 u = find_use_operator (i);
3640 mio_interface (&gfc_current_ns->operator[i]);
3645 /* Load generic and user operator interfaces. These must follow the
3646 loading of symtree because otherwise symbols can be marked as
3649 set_module_locus (&user_operators);
3651 load_operator_interfaces ();
3652 load_generic_interfaces ();
3657 /* At this point, we read those symbols that are needed but haven't
3658 been loaded yet. If one symbol requires another, the other gets
3659 marked as NEEDED if its previous state was UNUSED. */
3661 while (load_needed (pi_root));
3663 /* Make sure all elements of the rename-list were found in the module. */
3665 for (u = gfc_rename_list; u; u = u->next)
3670 if (u->operator == INTRINSIC_NONE)
3672 gfc_error ("Symbol '%s' referenced at %L not found in module '%s'",
3673 u->use_name, &u->where, module_name);
3677 if (u->operator == INTRINSIC_USER)
3679 gfc_error ("User operator '%s' referenced at %L not found "
3680 "in module '%s'", u->use_name, &u->where, module_name);
3684 gfc_error ("Intrinsic operator '%s' referenced at %L not found "
3685 "in module '%s'", gfc_op2string (u->operator), &u->where,
3689 gfc_check_interfaces (gfc_current_ns);
3691 /* Clean up symbol nodes that were never loaded, create references
3692 to hidden symbols. */
3694 read_cleanup (pi_root);
3698 /* Given an access type that is specific to an entity and the default
3699 access, return nonzero if the entity is publicly accessible. If the
3700 element is declared as PUBLIC, then it is public; if declared
3701 PRIVATE, then private, and otherwise it is public unless the default
3702 access in this context has been declared PRIVATE. */
3705 gfc_check_access (gfc_access specific_access, gfc_access default_access)
3707 if (specific_access == ACCESS_PUBLIC)
3709 if (specific_access == ACCESS_PRIVATE)
3712 return default_access != ACCESS_PRIVATE;
3716 /* Write a common block to the module. */
3719 write_common (gfc_symtree *st)
3729 write_common (st->left);
3730 write_common (st->right);
3734 /* Write the unmangled name. */
3735 name = st->n.common->name;
3737 mio_pool_string (&name);
3740 mio_symbol_ref (&p->head);
3741 flags = p->saved ? 1 : 0;
3742 if (p->threadprivate) flags |= 2;
3743 mio_integer (&flags);
3745 /* Write out whether the common block is bind(c) or not. */
3746 mio_integer (&(p->is_bind_c));
3748 /* Write out the binding label, or the com name if no label given. */
3751 label = p->binding_label;
3752 mio_pool_string (&label);
3757 mio_pool_string (&label);
3764 /* Write the blank common block to the module. */
3767 write_blank_common (void)
3769 const char * name = BLANK_COMMON_NAME;
3771 /* TODO: Blank commons are not bind(c). The F2003 standard probably says
3772 this, but it hasn't been checked. Just making it so for now. */
3775 if (gfc_current_ns->blank_common.head == NULL)
3780 mio_pool_string (&name);
3782 mio_symbol_ref (&gfc_current_ns->blank_common.head);
3783 saved = gfc_current_ns->blank_common.saved;
3784 mio_integer (&saved);
3786 /* Write out whether the common block is bind(c) or not. */
3787 mio_integer (&is_bind_c);
3789 /* Write out the binding label, which is BLANK_COMMON_NAME, though
3790 it doesn't matter because the label isn't used. */
3791 mio_pool_string (&name);
3797 /* Write equivalences to the module. */
3806 for (eq = gfc_current_ns->equiv; eq; eq = eq->next)
3810 for (e = eq; e; e = e->eq)
3812 if (e->module == NULL)
3813 e->module = gfc_get_string ("%s.eq.%d", module_name, num);
3814 mio_allocated_string (e->module);
3815 mio_expr (&e->expr);
3824 /* Write a symbol to the module. */
3827 write_symbol (int n, gfc_symbol *sym)
3831 if (sym->attr.flavor == FL_UNKNOWN || sym->attr.flavor == FL_LABEL)
3832 gfc_internal_error ("write_symbol(): bad module symbol '%s'", sym->name);
3835 mio_pool_string (&sym->name);
3837 mio_pool_string (&sym->module);
3838 if (sym->attr.is_bind_c || sym->attr.is_iso_c)
3840 label = sym->binding_label;
3841 mio_pool_string (&label);
3844 mio_pool_string (&sym->name);
3846 mio_pointer_ref (&sym->ns);
3853 /* Recursive traversal function to write the initial set of symbols to
3854 the module. We check to see if the symbol should be written
3855 according to the access specification. */
3858 write_symbol0 (gfc_symtree *st)
3866 write_symbol0 (st->left);
3867 write_symbol0 (st->right);
3870 if (sym->module == NULL)
3871 sym->module = gfc_get_string (module_name);
3873 if (sym->attr.flavor == FL_PROCEDURE && sym->attr.generic
3874 && !sym->attr.subroutine && !sym->attr.function)
3877 if (!gfc_check_access (sym->attr.access, sym->ns->default_access))
3880 p = get_pointer (sym);
3881 if (p->type == P_UNKNOWN)
3884 if (p->u.wsym.state == WRITTEN)
3887 write_symbol (p->integer, sym);
3888 p->u.wsym.state = WRITTEN;
3892 /* Recursive traversal function to write the secondary set of symbols
3893 to the module file. These are symbols that were not public yet are
3894 needed by the public symbols or another dependent symbol. The act
3895 of writing a symbol can modify the pointer_info tree, so we cease
3896 traversal if we find a symbol to write. We return nonzero if a
3897 symbol was written and pass that information upwards. */
3900 write_symbol1 (pointer_info *p)
3906 if (write_symbol1 (p->left))
3908 if (write_symbol1 (p->right))
3911 if (p->type != P_SYMBOL || p->u.wsym.state != NEEDS_WRITE)
3914 p->u.wsym.state = WRITTEN;
3915 write_symbol (p->integer, p->u.wsym.sym);
3921 /* Write operator interfaces associated with a symbol. */
3924 write_operator (gfc_user_op *uop)
3926 static char nullstring[] = "";
3927 const char *p = nullstring;
3929 if (uop->operator == NULL
3930 || !gfc_check_access (uop->access, uop->ns->default_access))
3933 mio_symbol_interface (&uop->name, &p, &uop->operator);
3937 /* Write generic interfaces associated with a symbol. */
3940 write_generic (gfc_symbol *sym)
3942 if (sym->generic == NULL
3943 || !gfc_check_access (sym->attr.access, sym->ns->default_access))
3946 if (sym->module == NULL)
3947 sym->module = gfc_get_string (module_name);
3949 mio_symbol_interface (&sym->name, &sym->module, &sym->generic);
3954 write_symtree (gfc_symtree *st)
3960 if (!gfc_check_access (sym->attr.access, sym->ns->default_access)
3961 || (sym->attr.flavor == FL_PROCEDURE && sym->attr.generic
3962 && !sym->attr.subroutine && !sym->attr.function))
3965 if (check_unique_name (st->name))
3968 p = find_pointer (sym);
3970 gfc_internal_error ("write_symtree(): Symbol not written");
3972 mio_pool_string (&st->name);
3973 mio_integer (&st->ambiguous);
3974 mio_integer (&p->integer);
3983 /* Write the operator interfaces. */
3986 for (i = GFC_INTRINSIC_BEGIN; i != GFC_INTRINSIC_END; i++)
3988 if (i == INTRINSIC_USER)
3991 mio_interface (gfc_check_access (gfc_current_ns->operator_access[i],
3992 gfc_current_ns->default_access)
3993 ? &gfc_current_ns->operator[i] : NULL);
4001 gfc_traverse_user_op (gfc_current_ns, write_operator);
4007 gfc_traverse_ns (gfc_current_ns, write_generic);
4013 write_blank_common ();
4014 write_common (gfc_current_ns->common_root);
4025 /* Write symbol information. First we traverse all symbols in the
4026 primary namespace, writing those that need to be written.
4027 Sometimes writing one symbol will cause another to need to be
4028 written. A list of these symbols ends up on the write stack, and
4029 we end by popping the bottom of the stack and writing the symbol
4030 until the stack is empty. */
4034 write_symbol0 (gfc_current_ns->sym_root);
4035 while (write_symbol1 (pi_root));
4043 gfc_traverse_symtree (gfc_current_ns->sym_root, write_symtree);
4048 /* Read a MD5 sum from the header of a module file. If the file cannot
4049 be opened, or we have any other error, we return -1. */
4052 read_md5_from_module_file (const char * filename, unsigned char md5[16])
4058 /* Open the file. */
4059 if ((file = fopen (filename, "r")) == NULL)
4062 /* Read two lines. */
4063 if (fgets (buf, sizeof (buf) - 1, file) == NULL
4064 || fgets (buf, sizeof (buf) - 1, file) == NULL)
4070 /* Close the file. */
4073 /* If the header is not what we expect, or is too short, bail out. */
4074 if (strncmp (buf, "MD5:", 4) != 0 || strlen (buf) < 4 + 16)
4077 /* Now, we have a real MD5, read it into the array. */
4078 for (n = 0; n < 16; n++)
4082 if (sscanf (&(buf[4+2*n]), "%02x", &x) != 1)
4092 /* Given module, dump it to disk. If there was an error while
4093 processing the module, dump_flag will be set to zero and we delete
4094 the module file, even if it was already there. */
4097 gfc_dump_module (const char *name, int dump_flag)
4100 char *filename, *filename_tmp, *p;
4103 unsigned char md5_new[16], md5_old[16];
4105 n = strlen (name) + strlen (MODULE_EXTENSION) + 1;
4106 if (gfc_option.module_dir != NULL)
4108 n += strlen (gfc_option.module_dir);
4109 filename = (char *) alloca (n);
4110 strcpy (filename, gfc_option.module_dir);
4111 strcat (filename, name);
4115 filename = (char *) alloca (n);
4116 strcpy (filename, name);
4118 strcat (filename, MODULE_EXTENSION);
4120 /* Name of the temporary file used to write the module. */
4121 filename_tmp = (char *) alloca (n + 1);
4122 strcpy (filename_tmp, filename);
4123 strcat (filename_tmp, "0");
4125 /* There was an error while processing the module. We delete the
4126 module file, even if it was already there. */
4133 /* Write the module to the temporary file. */
4134 module_fp = fopen (filename_tmp, "w");
4135 if (module_fp == NULL)
4136 gfc_fatal_error ("Can't open module file '%s' for writing at %C: %s",
4137 filename_tmp, strerror (errno));
4139 /* Write the header, including space reserved for the MD5 sum. */
4143 *strchr (p, '\n') = '\0';
4145 fprintf (module_fp, "GFORTRAN module created from %s on %s\nMD5:",
4146 gfc_source_file, p);
4147 fgetpos (module_fp, &md5_pos);
4148 fputs ("00000000000000000000000000000000 -- "
4149 "If you edit this, you'll get what you deserve.\n\n", module_fp);
4151 /* Initialize the MD5 context that will be used for output. */
4152 md5_init_ctx (&ctx);
4154 /* Write the module itself. */
4156 strcpy (module_name, name);
4162 free_pi_tree (pi_root);
4167 /* Write the MD5 sum to the header of the module file. */
4168 md5_finish_ctx (&ctx, md5_new);
4169 fsetpos (module_fp, &md5_pos);
4170 for (n = 0; n < 16; n++)
4171 fprintf (module_fp, "%02x", md5_new[n]);
4173 if (fclose (module_fp))
4174 gfc_fatal_error ("Error writing module file '%s' for writing: %s",
4175 filename_tmp, strerror (errno));
4177 /* Read the MD5 from the header of the old module file and compare. */
4178 if (read_md5_from_module_file (filename, md5_old) != 0
4179 || memcmp (md5_old, md5_new, sizeof (md5_old)) != 0)
4181 /* Module file have changed, replace the old one. */
4183 rename (filename_tmp, filename);
4186 unlink (filename_tmp);
4191 sort_iso_c_rename_list (void)
4193 gfc_use_rename *tmp_list = NULL;
4194 gfc_use_rename *curr;
4195 gfc_use_rename *kinds_used[ISOCBINDING_NUMBER] = {NULL};
4199 for (curr = gfc_rename_list; curr; curr = curr->next)
4201 c_kind = get_c_kind (curr->use_name, c_interop_kinds_table);
4202 if (c_kind == ISOCBINDING_INVALID || c_kind == ISOCBINDING_LAST)
4204 gfc_error ("Symbol '%s' referenced at %L does not exist in "
4205 "intrinsic module ISO_C_BINDING.", curr->use_name,
4209 /* Put it in the list. */
4210 kinds_used[c_kind] = curr;
4213 /* Make a new (sorted) rename list. */
4215 while (i < ISOCBINDING_NUMBER && kinds_used[i] == NULL)
4218 if (i < ISOCBINDING_NUMBER)
4220 tmp_list = kinds_used[i];
4224 for (; i < ISOCBINDING_NUMBER; i++)
4225 if (kinds_used[i] != NULL)
4227 curr->next = kinds_used[i];
4233 gfc_rename_list = tmp_list;
4237 /* Import the intrinsic ISO_C_BINDING module, generating symbols in
4238 the current namespace for all named constants, pointer types, and
4239 procedures in the module unless the only clause was used or a rename
4240 list was provided. */
4243 import_iso_c_binding_module (void)
4245 gfc_symbol *mod_sym = NULL;
4246 gfc_symtree *mod_symtree = NULL;
4247 const char *iso_c_module_name = "__iso_c_binding";
4252 /* Look only in the current namespace. */
4253 mod_symtree = gfc_find_symtree (gfc_current_ns->sym_root, iso_c_module_name);
4255 if (mod_symtree == NULL)
4257 /* symtree doesn't already exist in current namespace. */
4258 gfc_get_sym_tree (iso_c_module_name, gfc_current_ns, &mod_symtree);
4260 if (mod_symtree != NULL)
4261 mod_sym = mod_symtree->n.sym;
4263 gfc_internal_error ("import_iso_c_binding_module(): Unable to "
4264 "create symbol for %s", iso_c_module_name);
4266 mod_sym->attr.flavor = FL_MODULE;
4267 mod_sym->attr.intrinsic = 1;
4268 mod_sym->module = gfc_get_string (iso_c_module_name);
4269 mod_sym->from_intmod = INTMOD_ISO_C_BINDING;
4272 /* Generate the symbols for the named constants representing
4273 the kinds for intrinsic data types. */
4276 /* Sort the rename list because there are dependencies between types
4277 and procedures (e.g., c_loc needs c_ptr). */
4278 sort_iso_c_rename_list ();
4280 for (u = gfc_rename_list; u; u = u->next)
4282 i = get_c_kind (u->use_name, c_interop_kinds_table);
4284 if (i == ISOCBINDING_INVALID || i == ISOCBINDING_LAST)
4286 gfc_error ("Symbol '%s' referenced at %L does not exist in "
4287 "intrinsic module ISO_C_BINDING.", u->use_name,
4292 generate_isocbinding_symbol (iso_c_module_name, i, u->local_name);
4297 for (i = 0; i < ISOCBINDING_NUMBER; i++)
4300 for (u = gfc_rename_list; u; u = u->next)
4302 if (strcmp (c_interop_kinds_table[i].name, u->use_name) == 0)
4304 local_name = u->local_name;
4309 generate_isocbinding_symbol (iso_c_module_name, i, local_name);
4312 for (u = gfc_rename_list; u; u = u->next)
4317 gfc_error ("Symbol '%s' referenced at %L not found in intrinsic "
4318 "module ISO_C_BINDING", u->use_name, &u->where);
4324 /* Add an integer named constant from a given module. */
4327 create_int_parameter (const char *name, int value, const char *modname,
4328 intmod_id module, int id)
4330 gfc_symtree *tmp_symtree;
4333 tmp_symtree = gfc_find_symtree (gfc_current_ns->sym_root, name);
4334 if (tmp_symtree != NULL)
4336 if (strcmp (modname, tmp_symtree->n.sym->module) == 0)
4339 gfc_error ("Symbol '%s' already declared", name);
4342 gfc_get_sym_tree (name, gfc_current_ns, &tmp_symtree);
4343 sym = tmp_symtree->n.sym;
4345 sym->module = gfc_get_string (modname);
4346 sym->attr.flavor = FL_PARAMETER;
4347 sym->ts.type = BT_INTEGER;
4348 sym->ts.kind = gfc_default_integer_kind;
4349 sym->value = gfc_int_expr (value);
4350 sym->attr.use_assoc = 1;
4351 sym->from_intmod = module;
4352 sym->intmod_sym_id = id;
4356 /* USE the ISO_FORTRAN_ENV intrinsic module. */
4359 use_iso_fortran_env_module (void)
4361 static char mod[] = "iso_fortran_env";
4362 const char *local_name;
4364 gfc_symbol *mod_sym;
4365 gfc_symtree *mod_symtree;
4368 intmod_sym symbol[] = {
4369 #define NAMED_INTCST(a,b,c) { a, b, 0 },
4370 #include "iso-fortran-env.def"
4372 { ISOFORTRANENV_INVALID, NULL, -1234 } };
4375 #define NAMED_INTCST(a,b,c) symbol[i++].value = c;
4376 #include "iso-fortran-env.def"
4379 /* Generate the symbol for the module itself. */
4380 mod_symtree = gfc_find_symtree (gfc_current_ns->sym_root, mod);
4381 if (mod_symtree == NULL)
4383 gfc_get_sym_tree (mod, gfc_current_ns, &mod_symtree);
4384 gcc_assert (mod_symtree);
4385 mod_sym = mod_symtree->n.sym;
4387 mod_sym->attr.flavor = FL_MODULE;
4388 mod_sym->attr.intrinsic = 1;
4389 mod_sym->module = gfc_get_string (mod);
4390 mod_sym->from_intmod = INTMOD_ISO_FORTRAN_ENV;
4393 if (!mod_symtree->n.sym->attr.intrinsic)
4394 gfc_error ("Use of intrinsic module '%s' at %C conflicts with "
4395 "non-intrinsic module name used previously", mod);
4397 /* Generate the symbols for the module integer named constants. */
4399 for (u = gfc_rename_list; u; u = u->next)
4401 for (i = 0; symbol[i].name; i++)
4402 if (strcmp (symbol[i].name, u->use_name) == 0)
4405 if (symbol[i].name == NULL)
4407 gfc_error ("Symbol '%s' referenced at %L does not exist in "
4408 "intrinsic module ISO_FORTRAN_ENV", u->use_name,
4413 if ((gfc_option.flag_default_integer || gfc_option.flag_default_real)
4414 && symbol[i].id == ISOFORTRANENV_NUMERIC_STORAGE_SIZE)
4415 gfc_warning_now ("Use of the NUMERIC_STORAGE_SIZE named constant "
4416 "from intrinsic module ISO_FORTRAN_ENV at %L is "
4417 "incompatible with option %s", &u->where,
4418 gfc_option.flag_default_integer
4419 ? "-fdefault-integer-8" : "-fdefault-real-8");
4421 create_int_parameter (u->local_name[0] ? u->local_name
4423 symbol[i].value, mod, INTMOD_ISO_FORTRAN_ENV,
4428 for (i = 0; symbol[i].name; i++)
4431 for (u = gfc_rename_list; u; u = u->next)
4433 if (strcmp (symbol[i].name, u->use_name) == 0)
4435 local_name = u->local_name;
4441 if ((gfc_option.flag_default_integer || gfc_option.flag_default_real)
4442 && symbol[i].id == ISOFORTRANENV_NUMERIC_STORAGE_SIZE)
4443 gfc_warning_now ("Use of the NUMERIC_STORAGE_SIZE named constant "
4444 "from intrinsic module ISO_FORTRAN_ENV at %C is "
4445 "incompatible with option %s",
4446 gfc_option.flag_default_integer
4447 ? "-fdefault-integer-8" : "-fdefault-real-8");
4449 create_int_parameter (local_name ? local_name : symbol[i].name,
4450 symbol[i].value, mod, INTMOD_ISO_FORTRAN_ENV,
4454 for (u = gfc_rename_list; u; u = u->next)
4459 gfc_error ("Symbol '%s' referenced at %L not found in intrinsic "
4460 "module ISO_FORTRAN_ENV", u->use_name, &u->where);
4466 /* Process a USE directive. */
4469 gfc_use_module (void)
4474 gfc_symtree *mod_symtree;
4476 filename = (char *) alloca (strlen (module_name) + strlen (MODULE_EXTENSION)
4478 strcpy (filename, module_name);
4479 strcat (filename, MODULE_EXTENSION);
4481 /* First, try to find an non-intrinsic module, unless the USE statement
4482 specified that the module is intrinsic. */
4485 module_fp = gfc_open_included_file (filename, true, true);
4487 /* Then, see if it's an intrinsic one, unless the USE statement
4488 specified that the module is non-intrinsic. */
4489 if (module_fp == NULL && !specified_nonint)
4491 if (strcmp (module_name, "iso_fortran_env") == 0
4492 && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: ISO_FORTRAN_ENV "
4493 "intrinsic module at %C") != FAILURE)
4495 use_iso_fortran_env_module ();
4499 if (strcmp (module_name, "iso_c_binding") == 0
4500 && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: "
4501 "ISO_C_BINDING module at %C") != FAILURE)
4503 import_iso_c_binding_module();
4507 module_fp = gfc_open_intrinsic_module (filename);
4509 if (module_fp == NULL && specified_int)
4510 gfc_fatal_error ("Can't find an intrinsic module named '%s' at %C",
4514 if (module_fp == NULL)
4515 gfc_fatal_error ("Can't open module file '%s' for reading at %C: %s",
4516 filename, strerror (errno));
4518 /* Check that we haven't already USEd an intrinsic module with the
4521 mod_symtree = gfc_find_symtree (gfc_current_ns->sym_root, module_name);
4522 if (mod_symtree && mod_symtree->n.sym->attr.intrinsic)
4523 gfc_error ("Use of non-intrinsic module '%s' at %C conflicts with "
4524 "intrinsic module name used previously", module_name);
4531 /* Skip the first two lines of the module, after checking that this is
4532 a gfortran module file. */
4538 bad_module ("Unexpected end of module");
4541 if ((start == 1 && strcmp (atom_name, "GFORTRAN") != 0)
4542 || (start == 2 && strcmp (atom_name, " module") != 0))
4543 gfc_fatal_error ("File '%s' opened at %C is not a GFORTRAN module "
4550 /* Make sure we're not reading the same module that we may be building. */
4551 for (p = gfc_state_stack; p; p = p->previous)
4552 if (p->state == COMP_MODULE && strcmp (p->sym->name, module_name) == 0)
4553 gfc_fatal_error ("Can't USE the same module we're building!");
4556 init_true_name_tree ();
4560 free_true_name (true_name_root);
4561 true_name_root = NULL;
4563 free_pi_tree (pi_root);
4571 gfc_module_init_2 (void)
4573 last_atom = ATOM_LPAREN;
4578 gfc_module_done_2 (void)