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, 2008, 2009
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 3, 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 COPYING3. If not see
21 <http://www.gnu.org/licenses/>. */
23 /* The syntax of gfortran modules resembles that of lisp lists, i.e. a
24 sequence of atoms, which can be left or right parenthesis, names,
25 integers or strings. Parenthesis are always matched which allows
26 us to skip over sections at high speed without having to know
27 anything about the internal structure of the lists. A "name" is
28 usually a fortran 95 identifier, but can also start with '@' in
29 order to reference a hidden symbol.
31 The first line of a module is an informational message about what
32 created the module, the file it came from and when it was created.
33 The second line is a warning for people not to edit the module.
34 The rest of the module looks like:
36 ( ( <Interface info for UPLUS> )
37 ( <Interface info for UMINUS> )
40 ( ( <name of operator interface> <module of op interface> <i/f1> ... )
43 ( ( <name of generic interface> <module of generic interface> <i/f1> ... )
46 ( ( <common name> <symbol> <saved flag>)
52 ( <Symbol Number (in no particular order)>
54 <Module name of symbol>
55 ( <symbol information> )
64 In general, symbols refer to other symbols by their symbol number,
65 which are zero based. Symbols are written to the module in no
73 #include "parse.h" /* FIXME */
76 #define MODULE_EXTENSION ".mod"
78 /* Don't put any single quote (') in MOD_VERSION,
79 if yout want it to be recognized. */
80 #define MOD_VERSION "3"
83 /* Structure that describes a position within a module file. */
92 /* Structure for list of symbols of intrinsic modules. */
105 P_UNKNOWN = 0, P_OTHER, P_NAMESPACE, P_COMPONENT, P_SYMBOL
109 /* The fixup structure lists pointers to pointers that have to
110 be updated when a pointer value becomes known. */
112 typedef struct fixup_t
115 struct fixup_t *next;
120 /* Structure for holding extra info needed for pointers being read. */
136 typedef struct pointer_info
138 BBT_HEADER (pointer_info);
142 /* The first component of each member of the union is the pointer
149 void *pointer; /* Member for doing pointer searches. */
154 char true_name[GFC_MAX_SYMBOL_LEN + 1], module[GFC_MAX_SYMBOL_LEN + 1];
155 enum gfc_rsym_state state;
156 int ns, referenced, renamed;
159 gfc_symtree *symtree;
160 char binding_label[GFC_MAX_SYMBOL_LEN + 1];
167 enum gfc_wsym_state state;
176 #define gfc_get_pointer_info() XCNEW (pointer_info)
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;
205 static locus use_locus;
209 /*****************************************************************/
211 /* Pointer/integer conversion. Pointers between structures are stored
212 as integers in the module file. The next couple of subroutines
213 handle this translation for reading and writing. */
215 /* Recursively free the tree of pointer structures. */
218 free_pi_tree (pointer_info *p)
223 if (p->fixup != NULL)
224 gfc_internal_error ("free_pi_tree(): Unresolved fixup");
226 free_pi_tree (p->left);
227 free_pi_tree (p->right);
233 /* Compare pointers when searching by pointer. Used when writing a
237 compare_pointers (void *_sn1, void *_sn2)
239 pointer_info *sn1, *sn2;
241 sn1 = (pointer_info *) _sn1;
242 sn2 = (pointer_info *) _sn2;
244 if (sn1->u.pointer < sn2->u.pointer)
246 if (sn1->u.pointer > sn2->u.pointer)
253 /* Compare integers when searching by integer. Used when reading a
257 compare_integers (void *_sn1, void *_sn2)
259 pointer_info *sn1, *sn2;
261 sn1 = (pointer_info *) _sn1;
262 sn2 = (pointer_info *) _sn2;
264 if (sn1->integer < sn2->integer)
266 if (sn1->integer > sn2->integer)
273 /* Initialize the pointer_info tree. */
282 compare = (iomode == IO_INPUT) ? compare_integers : compare_pointers;
284 /* Pointer 0 is the NULL pointer. */
285 p = gfc_get_pointer_info ();
290 gfc_insert_bbt (&pi_root, p, compare);
292 /* Pointer 1 is the current namespace. */
293 p = gfc_get_pointer_info ();
294 p->u.pointer = gfc_current_ns;
296 p->type = P_NAMESPACE;
298 gfc_insert_bbt (&pi_root, p, compare);
304 /* During module writing, call here with a pointer to something,
305 returning the pointer_info node. */
307 static pointer_info *
308 find_pointer (void *gp)
315 if (p->u.pointer == gp)
317 p = (gp < p->u.pointer) ? p->left : p->right;
324 /* Given a pointer while writing, returns the pointer_info tree node,
325 creating it if it doesn't exist. */
327 static pointer_info *
328 get_pointer (void *gp)
332 p = find_pointer (gp);
336 /* Pointer doesn't have an integer. Give it one. */
337 p = gfc_get_pointer_info ();
340 p->integer = symbol_number++;
342 gfc_insert_bbt (&pi_root, p, compare_pointers);
348 /* Given an integer during reading, find it in the pointer_info tree,
349 creating the node if not found. */
351 static pointer_info *
352 get_integer (int integer)
362 c = compare_integers (&t, p);
366 p = (c < 0) ? p->left : p->right;
372 p = gfc_get_pointer_info ();
373 p->integer = integer;
376 gfc_insert_bbt (&pi_root, p, compare_integers);
382 /* Recursive function to find a pointer within a tree by brute force. */
384 static pointer_info *
385 fp2 (pointer_info *p, const void *target)
392 if (p->u.pointer == target)
395 q = fp2 (p->left, target);
399 return fp2 (p->right, target);
403 /* During reading, find a pointer_info node from the pointer value.
404 This amounts to a brute-force search. */
406 static pointer_info *
407 find_pointer2 (void *p)
409 return fp2 (pi_root, p);
413 /* Resolve any fixups using a known pointer. */
416 resolve_fixups (fixup_t *f, void *gp)
429 /* Call here during module reading when we know what pointer to
430 associate with an integer. Any fixups that exist are resolved at
434 associate_integer_pointer (pointer_info *p, void *gp)
436 if (p->u.pointer != NULL)
437 gfc_internal_error ("associate_integer_pointer(): Already associated");
441 resolve_fixups (p->fixup, gp);
447 /* During module reading, given an integer and a pointer to a pointer,
448 either store the pointer from an already-known value or create a
449 fixup structure in order to store things later. Returns zero if
450 the reference has been actually stored, or nonzero if the reference
451 must be fixed later (i.e., associate_integer_pointer must be called
452 sometime later. Returns the pointer_info structure. */
454 static pointer_info *
455 add_fixup (int integer, void *gp)
461 p = get_integer (integer);
463 if (p->integer == 0 || p->u.pointer != NULL)
466 *cp = (char *) p->u.pointer;
475 f->pointer = (void **) gp;
482 /*****************************************************************/
484 /* Parser related subroutines */
486 /* Free the rename list left behind by a USE statement. */
491 gfc_use_rename *next;
493 for (; gfc_rename_list; gfc_rename_list = next)
495 next = gfc_rename_list->next;
496 gfc_free (gfc_rename_list);
501 /* Match a USE statement. */
506 char name[GFC_MAX_SYMBOL_LEN + 1], module_nature[GFC_MAX_SYMBOL_LEN + 1];
507 gfc_use_rename *tail = NULL, *new_use;
508 interface_type type, type2;
512 specified_int = false;
513 specified_nonint = false;
515 if (gfc_match (" , ") == MATCH_YES)
517 if ((m = gfc_match (" %n ::", module_nature)) == MATCH_YES)
519 if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: module "
520 "nature in USE statement at %C") == FAILURE)
523 if (strcmp (module_nature, "intrinsic") == 0)
524 specified_int = true;
527 if (strcmp (module_nature, "non_intrinsic") == 0)
528 specified_nonint = true;
531 gfc_error ("Module nature in USE statement at %C shall "
532 "be either INTRINSIC or NON_INTRINSIC");
539 /* Help output a better error message than "Unclassifiable
541 gfc_match (" %n", module_nature);
542 if (strcmp (module_nature, "intrinsic") == 0
543 || strcmp (module_nature, "non_intrinsic") == 0)
544 gfc_error ("\"::\" was expected after module nature at %C "
545 "but was not found");
551 m = gfc_match (" ::");
552 if (m == MATCH_YES &&
553 gfc_notify_std (GFC_STD_F2003, "Fortran 2003: "
554 "\"USE :: module\" at %C") == FAILURE)
559 m = gfc_match ("% ");
565 use_locus = gfc_current_locus;
567 m = gfc_match_name (module_name);
574 if (gfc_match_eos () == MATCH_YES)
576 if (gfc_match_char (',') != MATCH_YES)
579 if (gfc_match (" only :") == MATCH_YES)
582 if (gfc_match_eos () == MATCH_YES)
587 /* Get a new rename struct and add it to the rename list. */
588 new_use = gfc_get_use_rename ();
589 new_use->where = gfc_current_locus;
592 if (gfc_rename_list == NULL)
593 gfc_rename_list = new_use;
595 tail->next = new_use;
598 /* See what kind of interface we're dealing with. Assume it is
600 new_use->op = INTRINSIC_NONE;
601 if (gfc_match_generic_spec (&type, name, &op) == MATCH_ERROR)
606 case INTERFACE_NAMELESS:
607 gfc_error ("Missing generic specification in USE statement at %C");
610 case INTERFACE_USER_OP:
611 case INTERFACE_GENERIC:
612 m = gfc_match (" =>");
614 if (type == INTERFACE_USER_OP && m == MATCH_YES
615 && (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: Renaming "
616 "operators in USE statements at %C")
620 if (type == INTERFACE_USER_OP)
621 new_use->op = INTRINSIC_USER;
626 strcpy (new_use->use_name, name);
629 strcpy (new_use->local_name, name);
630 m = gfc_match_generic_spec (&type2, new_use->use_name, &op);
635 if (m == MATCH_ERROR)
643 strcpy (new_use->local_name, name);
645 m = gfc_match_generic_spec (&type2, new_use->use_name, &op);
650 if (m == MATCH_ERROR)
654 if (strcmp (new_use->use_name, module_name) == 0
655 || strcmp (new_use->local_name, module_name) == 0)
657 gfc_error ("The name '%s' at %C has already been used as "
658 "an external module name.", module_name);
663 case INTERFACE_INTRINSIC_OP:
671 if (gfc_match_eos () == MATCH_YES)
673 if (gfc_match_char (',') != MATCH_YES)
680 gfc_syntax_error (ST_USE);
688 /* Given a name and a number, inst, return the inst name
689 under which to load this symbol. Returns NULL if this
690 symbol shouldn't be loaded. If inst is zero, returns
691 the number of instances of this name. If interface is
692 true, a user-defined operator is sought, otherwise only
693 non-operators are sought. */
696 find_use_name_n (const char *name, int *inst, bool interface)
702 for (u = gfc_rename_list; u; u = u->next)
704 if (strcmp (u->use_name, name) != 0
705 || (u->op == INTRINSIC_USER && !interface)
706 || (u->op != INTRINSIC_USER && interface))
719 return only_flag ? NULL : name;
723 return (u->local_name[0] != '\0') ? u->local_name : name;
727 /* Given a name, return the name under which to load this symbol.
728 Returns NULL if this symbol shouldn't be loaded. */
731 find_use_name (const char *name, bool interface)
734 return find_use_name_n (name, &i, interface);
738 /* Given a real name, return the number of use names associated with it. */
741 number_use_names (const char *name, bool interface)
745 c = find_use_name_n (name, &i, interface);
750 /* Try to find the operator in the current list. */
752 static gfc_use_rename *
753 find_use_operator (gfc_intrinsic_op op)
757 for (u = gfc_rename_list; u; u = u->next)
765 /*****************************************************************/
767 /* The next couple of subroutines maintain a tree used to avoid a
768 brute-force search for a combination of true name and module name.
769 While symtree names, the name that a particular symbol is known by
770 can changed with USE statements, we still have to keep track of the
771 true names to generate the correct reference, and also avoid
772 loading the same real symbol twice in a program unit.
774 When we start reading, the true name tree is built and maintained
775 as symbols are read. The tree is searched as we load new symbols
776 to see if it already exists someplace in the namespace. */
778 typedef struct true_name
780 BBT_HEADER (true_name);
785 static true_name *true_name_root;
788 /* Compare two true_name structures. */
791 compare_true_names (void *_t1, void *_t2)
796 t1 = (true_name *) _t1;
797 t2 = (true_name *) _t2;
799 c = ((t1->sym->module > t2->sym->module)
800 - (t1->sym->module < t2->sym->module));
804 return strcmp (t1->sym->name, t2->sym->name);
808 /* Given a true name, search the true name tree to see if it exists
809 within the main namespace. */
812 find_true_name (const char *name, const char *module)
818 sym.name = gfc_get_string (name);
820 sym.module = gfc_get_string (module);
828 c = compare_true_names ((void *) (&t), (void *) p);
832 p = (c < 0) ? p->left : p->right;
839 /* Given a gfc_symbol pointer that is not in the true name tree, add it. */
842 add_true_name (gfc_symbol *sym)
846 t = XCNEW (true_name);
849 gfc_insert_bbt (&true_name_root, t, compare_true_names);
853 /* Recursive function to build the initial true name tree by
854 recursively traversing the current namespace. */
857 build_tnt (gfc_symtree *st)
862 build_tnt (st->left);
863 build_tnt (st->right);
865 if (find_true_name (st->n.sym->name, st->n.sym->module) != NULL)
868 add_true_name (st->n.sym);
872 /* Initialize the true name tree with the current namespace. */
875 init_true_name_tree (void)
877 true_name_root = NULL;
878 build_tnt (gfc_current_ns->sym_root);
882 /* Recursively free a true name tree node. */
885 free_true_name (true_name *t)
889 free_true_name (t->left);
890 free_true_name (t->right);
896 /*****************************************************************/
898 /* Module reading and writing. */
902 ATOM_NAME, ATOM_LPAREN, ATOM_RPAREN, ATOM_INTEGER, ATOM_STRING
906 static atom_type last_atom;
909 /* The name buffer must be at least as long as a symbol name. Right
910 now it's not clear how we're going to store numeric constants--
911 probably as a hexadecimal string, since this will allow the exact
912 number to be preserved (this can't be done by a decimal
913 representation). Worry about that later. TODO! */
915 #define MAX_ATOM_SIZE 100
918 static char *atom_string, atom_name[MAX_ATOM_SIZE];
921 /* Report problems with a module. Error reporting is not very
922 elaborate, since this sorts of errors shouldn't really happen.
923 This subroutine never returns. */
925 static void bad_module (const char *) ATTRIBUTE_NORETURN;
928 bad_module (const char *msgid)
935 gfc_fatal_error ("Reading module %s at line %d column %d: %s",
936 module_name, module_line, module_column, msgid);
939 gfc_fatal_error ("Writing module %s at line %d column %d: %s",
940 module_name, module_line, module_column, msgid);
943 gfc_fatal_error ("Module %s at line %d column %d: %s",
944 module_name, module_line, module_column, msgid);
950 /* Set the module's input pointer. */
953 set_module_locus (module_locus *m)
955 module_column = m->column;
956 module_line = m->line;
957 fsetpos (module_fp, &m->pos);
961 /* Get the module's input pointer so that we can restore it later. */
964 get_module_locus (module_locus *m)
966 m->column = module_column;
967 m->line = module_line;
968 fgetpos (module_fp, &m->pos);
972 /* Get the next character in the module, updating our reckoning of
980 c = getc (module_fp);
983 bad_module ("Unexpected EOF");
996 /* Parse a string constant. The delimiter is guaranteed to be a
1006 get_module_locus (&start);
1010 /* See how long the string is. */
1015 bad_module ("Unexpected end of module in string constant");
1033 set_module_locus (&start);
1035 atom_string = p = XCNEWVEC (char, len + 1);
1037 for (; len > 0; len--)
1041 module_char (); /* Guaranteed to be another \'. */
1045 module_char (); /* Terminating \'. */
1046 *p = '\0'; /* C-style string for debug purposes. */
1050 /* Parse a small integer. */
1053 parse_integer (int c)
1061 get_module_locus (&m);
1067 atom_int = 10 * atom_int + c - '0';
1068 if (atom_int > 99999999)
1069 bad_module ("Integer overflow");
1072 set_module_locus (&m);
1090 get_module_locus (&m);
1095 if (!ISALNUM (c) && c != '_' && c != '-')
1099 if (++len > GFC_MAX_SYMBOL_LEN)
1100 bad_module ("Name too long");
1105 fseek (module_fp, -1, SEEK_CUR);
1106 module_column = m.column + len - 1;
1113 /* Read the next atom in the module's input stream. */
1124 while (c == ' ' || c == '\r' || c == '\n');
1149 return ATOM_INTEGER;
1207 bad_module ("Bad name");
1214 /* Peek at the next atom on the input. */
1222 get_module_locus (&m);
1225 if (a == ATOM_STRING)
1226 gfc_free (atom_string);
1228 set_module_locus (&m);
1233 /* Read the next atom from the input, requiring that it be a
1237 require_atom (atom_type type)
1243 get_module_locus (&m);
1251 p = _("Expected name");
1254 p = _("Expected left parenthesis");
1257 p = _("Expected right parenthesis");
1260 p = _("Expected integer");
1263 p = _("Expected string");
1266 gfc_internal_error ("require_atom(): bad atom type required");
1269 set_module_locus (&m);
1275 /* Given a pointer to an mstring array, require that the current input
1276 be one of the strings in the array. We return the enum value. */
1279 find_enum (const mstring *m)
1283 i = gfc_string2code (m, atom_name);
1287 bad_module ("find_enum(): Enum not found");
1293 /**************** Module output subroutines ***************************/
1295 /* Output a character to a module file. */
1298 write_char (char out)
1300 if (putc (out, module_fp) == EOF)
1301 gfc_fatal_error ("Error writing modules file: %s", strerror (errno));
1303 /* Add this to our MD5. */
1304 md5_process_bytes (&out, sizeof (out), &ctx);
1316 /* Write an atom to a module. The line wrapping isn't perfect, but it
1317 should work most of the time. This isn't that big of a deal, since
1318 the file really isn't meant to be read by people anyway. */
1321 write_atom (atom_type atom, const void *v)
1331 p = (const char *) v;
1343 i = *((const int *) v);
1345 gfc_internal_error ("write_atom(): Writing negative integer");
1347 sprintf (buffer, "%d", i);
1352 gfc_internal_error ("write_atom(): Trying to write dab atom");
1356 if(p == NULL || *p == '\0')
1361 if (atom != ATOM_RPAREN)
1363 if (module_column + len > 72)
1368 if (last_atom != ATOM_LPAREN && module_column != 1)
1373 if (atom == ATOM_STRING)
1376 while (p != NULL && *p)
1378 if (atom == ATOM_STRING && *p == '\'')
1383 if (atom == ATOM_STRING)
1391 /***************** Mid-level I/O subroutines *****************/
1393 /* These subroutines let their caller read or write atoms without
1394 caring about which of the two is actually happening. This lets a
1395 subroutine concentrate on the actual format of the data being
1398 static void mio_expr (gfc_expr **);
1399 pointer_info *mio_symbol_ref (gfc_symbol **);
1400 pointer_info *mio_interface_rest (gfc_interface **);
1401 static void mio_symtree_ref (gfc_symtree **);
1403 /* Read or write an enumerated value. On writing, we return the input
1404 value for the convenience of callers. We avoid using an integer
1405 pointer because enums are sometimes inside bitfields. */
1408 mio_name (int t, const mstring *m)
1410 if (iomode == IO_OUTPUT)
1411 write_atom (ATOM_NAME, gfc_code2string (m, t));
1414 require_atom (ATOM_NAME);
1421 /* Specialization of mio_name. */
1423 #define DECL_MIO_NAME(TYPE) \
1424 static inline TYPE \
1425 MIO_NAME(TYPE) (TYPE t, const mstring *m) \
1427 return (TYPE) mio_name ((int) t, m); \
1429 #define MIO_NAME(TYPE) mio_name_##TYPE
1434 if (iomode == IO_OUTPUT)
1435 write_atom (ATOM_LPAREN, NULL);
1437 require_atom (ATOM_LPAREN);
1444 if (iomode == IO_OUTPUT)
1445 write_atom (ATOM_RPAREN, NULL);
1447 require_atom (ATOM_RPAREN);
1452 mio_integer (int *ip)
1454 if (iomode == IO_OUTPUT)
1455 write_atom (ATOM_INTEGER, ip);
1458 require_atom (ATOM_INTEGER);
1464 /* Read or write a gfc_intrinsic_op value. */
1467 mio_intrinsic_op (gfc_intrinsic_op* op)
1469 /* FIXME: Would be nicer to do this via the operators symbolic name. */
1470 if (iomode == IO_OUTPUT)
1472 int converted = (int) *op;
1473 write_atom (ATOM_INTEGER, &converted);
1477 require_atom (ATOM_INTEGER);
1478 *op = (gfc_intrinsic_op) atom_int;
1483 /* Read or write a character pointer that points to a string on the heap. */
1486 mio_allocated_string (const char *s)
1488 if (iomode == IO_OUTPUT)
1490 write_atom (ATOM_STRING, s);
1495 require_atom (ATOM_STRING);
1501 /* Functions for quoting and unquoting strings. */
1504 quote_string (const gfc_char_t *s, const size_t slength)
1506 const gfc_char_t *p;
1510 /* Calculate the length we'll need: a backslash takes two ("\\"),
1511 non-printable characters take 10 ("\Uxxxxxxxx") and others take 1. */
1512 for (p = s, i = 0; i < slength; p++, i++)
1516 else if (!gfc_wide_is_printable (*p))
1522 q = res = XCNEWVEC (char, len + 1);
1523 for (p = s, i = 0; i < slength; p++, i++)
1526 *q++ = '\\', *q++ = '\\';
1527 else if (!gfc_wide_is_printable (*p))
1529 sprintf (q, "\\U%08" HOST_WIDE_INT_PRINT "x",
1530 (unsigned HOST_WIDE_INT) *p);
1534 *q++ = (unsigned char) *p;
1542 unquote_string (const char *s)
1548 for (p = s, len = 0; *p; p++, len++)
1555 else if (p[1] == 'U')
1556 p += 9; /* That is a "\U????????". */
1558 gfc_internal_error ("unquote_string(): got bad string");
1561 res = gfc_get_wide_string (len + 1);
1562 for (i = 0, p = s; i < len; i++, p++)
1567 res[i] = (unsigned char) *p;
1568 else if (p[1] == '\\')
1570 res[i] = (unsigned char) '\\';
1575 /* We read the 8-digits hexadecimal constant that follows. */
1580 gcc_assert (p[1] == 'U');
1581 for (j = 0; j < 8; j++)
1584 gcc_assert (sscanf (&p[j+2], "%01x", &n) == 1);
1598 /* Read or write a character pointer that points to a wide string on the
1599 heap, performing quoting/unquoting of nonprintable characters using the
1600 form \U???????? (where each ? is a hexadecimal digit).
1601 Length is the length of the string, only known and used in output mode. */
1603 static const gfc_char_t *
1604 mio_allocated_wide_string (const gfc_char_t *s, const size_t length)
1606 if (iomode == IO_OUTPUT)
1608 char *quoted = quote_string (s, length);
1609 write_atom (ATOM_STRING, quoted);
1615 gfc_char_t *unquoted;
1617 require_atom (ATOM_STRING);
1618 unquoted = unquote_string (atom_string);
1619 gfc_free (atom_string);
1625 /* Read or write a string that is in static memory. */
1628 mio_pool_string (const char **stringp)
1630 /* TODO: one could write the string only once, and refer to it via a
1633 /* As a special case we have to deal with a NULL string. This
1634 happens for the 'module' member of 'gfc_symbol's that are not in a
1635 module. We read / write these as the empty string. */
1636 if (iomode == IO_OUTPUT)
1638 const char *p = *stringp == NULL ? "" : *stringp;
1639 write_atom (ATOM_STRING, p);
1643 require_atom (ATOM_STRING);
1644 *stringp = atom_string[0] == '\0' ? NULL : gfc_get_string (atom_string);
1645 gfc_free (atom_string);
1650 /* Read or write a string that is inside of some already-allocated
1654 mio_internal_string (char *string)
1656 if (iomode == IO_OUTPUT)
1657 write_atom (ATOM_STRING, string);
1660 require_atom (ATOM_STRING);
1661 strcpy (string, atom_string);
1662 gfc_free (atom_string);
1668 { AB_ALLOCATABLE, AB_DIMENSION, AB_EXTERNAL, AB_INTRINSIC, AB_OPTIONAL,
1669 AB_POINTER, AB_TARGET, AB_DUMMY, AB_RESULT, AB_DATA,
1670 AB_IN_NAMELIST, AB_IN_COMMON, AB_FUNCTION, AB_SUBROUTINE, AB_SEQUENCE,
1671 AB_ELEMENTAL, AB_PURE, AB_RECURSIVE, AB_GENERIC, AB_ALWAYS_EXPLICIT,
1672 AB_CRAY_POINTER, AB_CRAY_POINTEE, AB_THREADPRIVATE, AB_ALLOC_COMP,
1673 AB_POINTER_COMP, AB_PRIVATE_COMP, AB_VALUE, AB_VOLATILE, AB_PROTECTED,
1674 AB_IS_BIND_C, AB_IS_C_INTEROP, AB_IS_ISO_C, AB_ABSTRACT, AB_ZERO_COMP,
1675 AB_EXTENSION, AB_IS_CLASS, AB_PROCEDURE, AB_PROC_POINTER
1679 static const mstring attr_bits[] =
1681 minit ("ALLOCATABLE", AB_ALLOCATABLE),
1682 minit ("DIMENSION", AB_DIMENSION),
1683 minit ("EXTERNAL", AB_EXTERNAL),
1684 minit ("INTRINSIC", AB_INTRINSIC),
1685 minit ("OPTIONAL", AB_OPTIONAL),
1686 minit ("POINTER", AB_POINTER),
1687 minit ("VOLATILE", AB_VOLATILE),
1688 minit ("TARGET", AB_TARGET),
1689 minit ("THREADPRIVATE", AB_THREADPRIVATE),
1690 minit ("DUMMY", AB_DUMMY),
1691 minit ("RESULT", AB_RESULT),
1692 minit ("DATA", AB_DATA),
1693 minit ("IN_NAMELIST", AB_IN_NAMELIST),
1694 minit ("IN_COMMON", AB_IN_COMMON),
1695 minit ("FUNCTION", AB_FUNCTION),
1696 minit ("SUBROUTINE", AB_SUBROUTINE),
1697 minit ("SEQUENCE", AB_SEQUENCE),
1698 minit ("ELEMENTAL", AB_ELEMENTAL),
1699 minit ("PURE", AB_PURE),
1700 minit ("RECURSIVE", AB_RECURSIVE),
1701 minit ("GENERIC", AB_GENERIC),
1702 minit ("ALWAYS_EXPLICIT", AB_ALWAYS_EXPLICIT),
1703 minit ("CRAY_POINTER", AB_CRAY_POINTER),
1704 minit ("CRAY_POINTEE", AB_CRAY_POINTEE),
1705 minit ("IS_BIND_C", AB_IS_BIND_C),
1706 minit ("IS_C_INTEROP", AB_IS_C_INTEROP),
1707 minit ("IS_ISO_C", AB_IS_ISO_C),
1708 minit ("VALUE", AB_VALUE),
1709 minit ("ALLOC_COMP", AB_ALLOC_COMP),
1710 minit ("POINTER_COMP", AB_POINTER_COMP),
1711 minit ("PRIVATE_COMP", AB_PRIVATE_COMP),
1712 minit ("ZERO_COMP", AB_ZERO_COMP),
1713 minit ("PROTECTED", AB_PROTECTED),
1714 minit ("ABSTRACT", AB_ABSTRACT),
1715 minit ("EXTENSION", AB_EXTENSION),
1716 minit ("IS_CLASS", AB_IS_CLASS),
1717 minit ("PROCEDURE", AB_PROCEDURE),
1718 minit ("PROC_POINTER", AB_PROC_POINTER),
1722 /* For binding attributes. */
1723 static const mstring binding_passing[] =
1726 minit ("NOPASS", 1),
1729 static const mstring binding_overriding[] =
1731 minit ("OVERRIDABLE", 0),
1732 minit ("NON_OVERRIDABLE", 1),
1733 minit ("DEFERRED", 2),
1736 static const mstring binding_generic[] =
1738 minit ("SPECIFIC", 0),
1739 minit ("GENERIC", 1),
1742 static const mstring binding_ppc[] =
1744 minit ("NO_PPC", 0),
1749 /* Specialization of mio_name. */
1750 DECL_MIO_NAME (ab_attribute)
1751 DECL_MIO_NAME (ar_type)
1752 DECL_MIO_NAME (array_type)
1754 DECL_MIO_NAME (expr_t)
1755 DECL_MIO_NAME (gfc_access)
1756 DECL_MIO_NAME (gfc_intrinsic_op)
1757 DECL_MIO_NAME (ifsrc)
1758 DECL_MIO_NAME (save_state)
1759 DECL_MIO_NAME (procedure_type)
1760 DECL_MIO_NAME (ref_type)
1761 DECL_MIO_NAME (sym_flavor)
1762 DECL_MIO_NAME (sym_intent)
1763 #undef DECL_MIO_NAME
1765 /* Symbol attributes are stored in list with the first three elements
1766 being the enumerated fields, while the remaining elements (if any)
1767 indicate the individual attribute bits. The access field is not
1768 saved-- it controls what symbols are exported when a module is
1772 mio_symbol_attribute (symbol_attribute *attr)
1779 attr->flavor = MIO_NAME (sym_flavor) (attr->flavor, flavors);
1780 attr->intent = MIO_NAME (sym_intent) (attr->intent, intents);
1781 attr->proc = MIO_NAME (procedure_type) (attr->proc, procedures);
1782 attr->if_source = MIO_NAME (ifsrc) (attr->if_source, ifsrc_types);
1783 attr->save = MIO_NAME (save_state) (attr->save, save_status);
1784 ext_attr = attr->ext_attr;
1785 mio_integer ((int *) &ext_attr);
1786 attr->ext_attr = ext_attr;
1788 if (iomode == IO_OUTPUT)
1790 if (attr->allocatable)
1791 MIO_NAME (ab_attribute) (AB_ALLOCATABLE, attr_bits);
1792 if (attr->dimension)
1793 MIO_NAME (ab_attribute) (AB_DIMENSION, attr_bits);
1795 MIO_NAME (ab_attribute) (AB_EXTERNAL, attr_bits);
1796 if (attr->intrinsic)
1797 MIO_NAME (ab_attribute) (AB_INTRINSIC, attr_bits);
1799 MIO_NAME (ab_attribute) (AB_OPTIONAL, attr_bits);
1801 MIO_NAME (ab_attribute) (AB_POINTER, attr_bits);
1802 if (attr->is_protected)
1803 MIO_NAME (ab_attribute) (AB_PROTECTED, attr_bits);
1805 MIO_NAME (ab_attribute) (AB_VALUE, attr_bits);
1806 if (attr->volatile_)
1807 MIO_NAME (ab_attribute) (AB_VOLATILE, attr_bits);
1809 MIO_NAME (ab_attribute) (AB_TARGET, attr_bits);
1810 if (attr->threadprivate)
1811 MIO_NAME (ab_attribute) (AB_THREADPRIVATE, attr_bits);
1813 MIO_NAME (ab_attribute) (AB_DUMMY, attr_bits);
1815 MIO_NAME (ab_attribute) (AB_RESULT, attr_bits);
1816 /* We deliberately don't preserve the "entry" flag. */
1819 MIO_NAME (ab_attribute) (AB_DATA, attr_bits);
1820 if (attr->in_namelist)
1821 MIO_NAME (ab_attribute) (AB_IN_NAMELIST, attr_bits);
1822 if (attr->in_common)
1823 MIO_NAME (ab_attribute) (AB_IN_COMMON, attr_bits);
1826 MIO_NAME (ab_attribute) (AB_FUNCTION, attr_bits);
1827 if (attr->subroutine)
1828 MIO_NAME (ab_attribute) (AB_SUBROUTINE, attr_bits);
1830 MIO_NAME (ab_attribute) (AB_GENERIC, attr_bits);
1832 MIO_NAME (ab_attribute) (AB_ABSTRACT, attr_bits);
1835 MIO_NAME (ab_attribute) (AB_SEQUENCE, attr_bits);
1836 if (attr->elemental)
1837 MIO_NAME (ab_attribute) (AB_ELEMENTAL, attr_bits);
1839 MIO_NAME (ab_attribute) (AB_PURE, attr_bits);
1840 if (attr->recursive)
1841 MIO_NAME (ab_attribute) (AB_RECURSIVE, attr_bits);
1842 if (attr->always_explicit)
1843 MIO_NAME (ab_attribute) (AB_ALWAYS_EXPLICIT, attr_bits);
1844 if (attr->cray_pointer)
1845 MIO_NAME (ab_attribute) (AB_CRAY_POINTER, attr_bits);
1846 if (attr->cray_pointee)
1847 MIO_NAME (ab_attribute) (AB_CRAY_POINTEE, attr_bits);
1848 if (attr->is_bind_c)
1849 MIO_NAME(ab_attribute) (AB_IS_BIND_C, attr_bits);
1850 if (attr->is_c_interop)
1851 MIO_NAME(ab_attribute) (AB_IS_C_INTEROP, attr_bits);
1853 MIO_NAME(ab_attribute) (AB_IS_ISO_C, attr_bits);
1854 if (attr->alloc_comp)
1855 MIO_NAME (ab_attribute) (AB_ALLOC_COMP, attr_bits);
1856 if (attr->pointer_comp)
1857 MIO_NAME (ab_attribute) (AB_POINTER_COMP, attr_bits);
1858 if (attr->private_comp)
1859 MIO_NAME (ab_attribute) (AB_PRIVATE_COMP, attr_bits);
1860 if (attr->zero_comp)
1861 MIO_NAME (ab_attribute) (AB_ZERO_COMP, attr_bits);
1862 if (attr->extension)
1863 MIO_NAME (ab_attribute) (AB_EXTENSION, attr_bits);
1865 MIO_NAME (ab_attribute) (AB_IS_CLASS, attr_bits);
1866 if (attr->procedure)
1867 MIO_NAME (ab_attribute) (AB_PROCEDURE, attr_bits);
1868 if (attr->proc_pointer)
1869 MIO_NAME (ab_attribute) (AB_PROC_POINTER, attr_bits);
1879 if (t == ATOM_RPAREN)
1882 bad_module ("Expected attribute bit name");
1884 switch ((ab_attribute) find_enum (attr_bits))
1886 case AB_ALLOCATABLE:
1887 attr->allocatable = 1;
1890 attr->dimension = 1;
1896 attr->intrinsic = 1;
1905 attr->is_protected = 1;
1911 attr->volatile_ = 1;
1916 case AB_THREADPRIVATE:
1917 attr->threadprivate = 1;
1928 case AB_IN_NAMELIST:
1929 attr->in_namelist = 1;
1932 attr->in_common = 1;
1938 attr->subroutine = 1;
1950 attr->elemental = 1;
1956 attr->recursive = 1;
1958 case AB_ALWAYS_EXPLICIT:
1959 attr->always_explicit = 1;
1961 case AB_CRAY_POINTER:
1962 attr->cray_pointer = 1;
1964 case AB_CRAY_POINTEE:
1965 attr->cray_pointee = 1;
1968 attr->is_bind_c = 1;
1970 case AB_IS_C_INTEROP:
1971 attr->is_c_interop = 1;
1977 attr->alloc_comp = 1;
1979 case AB_POINTER_COMP:
1980 attr->pointer_comp = 1;
1982 case AB_PRIVATE_COMP:
1983 attr->private_comp = 1;
1986 attr->zero_comp = 1;
1989 attr->extension = 1;
1995 attr->procedure = 1;
1997 case AB_PROC_POINTER:
1998 attr->proc_pointer = 1;
2006 static const mstring bt_types[] = {
2007 minit ("INTEGER", BT_INTEGER),
2008 minit ("REAL", BT_REAL),
2009 minit ("COMPLEX", BT_COMPLEX),
2010 minit ("LOGICAL", BT_LOGICAL),
2011 minit ("CHARACTER", BT_CHARACTER),
2012 minit ("DERIVED", BT_DERIVED),
2013 minit ("CLASS", BT_CLASS),
2014 minit ("PROCEDURE", BT_PROCEDURE),
2015 minit ("UNKNOWN", BT_UNKNOWN),
2016 minit ("VOID", BT_VOID),
2022 mio_charlen (gfc_charlen **clp)
2028 if (iomode == IO_OUTPUT)
2032 mio_expr (&cl->length);
2036 if (peek_atom () != ATOM_RPAREN)
2038 cl = gfc_new_charlen (gfc_current_ns, NULL);
2039 mio_expr (&cl->length);
2048 /* See if a name is a generated name. */
2051 check_unique_name (const char *name)
2053 return *name == '@';
2058 mio_typespec (gfc_typespec *ts)
2062 ts->type = MIO_NAME (bt) (ts->type, bt_types);
2064 if (ts->type != BT_DERIVED && ts->type != BT_CLASS)
2065 mio_integer (&ts->kind);
2067 mio_symbol_ref (&ts->u.derived);
2069 /* Add info for C interop and is_iso_c. */
2070 mio_integer (&ts->is_c_interop);
2071 mio_integer (&ts->is_iso_c);
2073 /* If the typespec is for an identifier either from iso_c_binding, or
2074 a constant that was initialized to an identifier from it, use the
2075 f90_type. Otherwise, use the ts->type, since it shouldn't matter. */
2077 ts->f90_type = MIO_NAME (bt) (ts->f90_type, bt_types);
2079 ts->f90_type = MIO_NAME (bt) (ts->type, bt_types);
2081 if (ts->type != BT_CHARACTER)
2083 /* ts->u.cl is only valid for BT_CHARACTER. */
2088 mio_charlen (&ts->u.cl);
2094 static const mstring array_spec_types[] = {
2095 minit ("EXPLICIT", AS_EXPLICIT),
2096 minit ("ASSUMED_SHAPE", AS_ASSUMED_SHAPE),
2097 minit ("DEFERRED", AS_DEFERRED),
2098 minit ("ASSUMED_SIZE", AS_ASSUMED_SIZE),
2104 mio_array_spec (gfc_array_spec **asp)
2111 if (iomode == IO_OUTPUT)
2119 if (peek_atom () == ATOM_RPAREN)
2125 *asp = as = gfc_get_array_spec ();
2128 mio_integer (&as->rank);
2129 as->type = MIO_NAME (array_type) (as->type, array_spec_types);
2131 for (i = 0; i < as->rank; i++)
2133 mio_expr (&as->lower[i]);
2134 mio_expr (&as->upper[i]);
2142 /* Given a pointer to an array reference structure (which lives in a
2143 gfc_ref structure), find the corresponding array specification
2144 structure. Storing the pointer in the ref structure doesn't quite
2145 work when loading from a module. Generating code for an array
2146 reference also needs more information than just the array spec. */
2148 static const mstring array_ref_types[] = {
2149 minit ("FULL", AR_FULL),
2150 minit ("ELEMENT", AR_ELEMENT),
2151 minit ("SECTION", AR_SECTION),
2157 mio_array_ref (gfc_array_ref *ar)
2162 ar->type = MIO_NAME (ar_type) (ar->type, array_ref_types);
2163 mio_integer (&ar->dimen);
2171 for (i = 0; i < ar->dimen; i++)
2172 mio_expr (&ar->start[i]);
2177 for (i = 0; i < ar->dimen; i++)
2179 mio_expr (&ar->start[i]);
2180 mio_expr (&ar->end[i]);
2181 mio_expr (&ar->stride[i]);
2187 gfc_internal_error ("mio_array_ref(): Unknown array ref");
2190 /* Unfortunately, ar->dimen_type is an anonymous enumerated type so
2191 we can't call mio_integer directly. Instead loop over each element
2192 and cast it to/from an integer. */
2193 if (iomode == IO_OUTPUT)
2195 for (i = 0; i < ar->dimen; i++)
2197 int tmp = (int)ar->dimen_type[i];
2198 write_atom (ATOM_INTEGER, &tmp);
2203 for (i = 0; i < ar->dimen; i++)
2205 require_atom (ATOM_INTEGER);
2206 ar->dimen_type[i] = (enum gfc_array_ref_dimen_type) atom_int;
2210 if (iomode == IO_INPUT)
2212 ar->where = gfc_current_locus;
2214 for (i = 0; i < ar->dimen; i++)
2215 ar->c_where[i] = gfc_current_locus;
2222 /* Saves or restores a pointer. The pointer is converted back and
2223 forth from an integer. We return the pointer_info pointer so that
2224 the caller can take additional action based on the pointer type. */
2226 static pointer_info *
2227 mio_pointer_ref (void *gp)
2231 if (iomode == IO_OUTPUT)
2233 p = get_pointer (*((char **) gp));
2234 write_atom (ATOM_INTEGER, &p->integer);
2238 require_atom (ATOM_INTEGER);
2239 p = add_fixup (atom_int, gp);
2246 /* Save and load references to components that occur within
2247 expressions. We have to describe these references by a number and
2248 by name. The number is necessary for forward references during
2249 reading, and the name is necessary if the symbol already exists in
2250 the namespace and is not loaded again. */
2253 mio_component_ref (gfc_component **cp, gfc_symbol *sym)
2255 char name[GFC_MAX_SYMBOL_LEN + 1];
2259 p = mio_pointer_ref (cp);
2260 if (p->type == P_UNKNOWN)
2261 p->type = P_COMPONENT;
2263 if (iomode == IO_OUTPUT)
2264 mio_pool_string (&(*cp)->name);
2267 mio_internal_string (name);
2269 /* It can happen that a component reference can be read before the
2270 associated derived type symbol has been loaded. Return now and
2271 wait for a later iteration of load_needed. */
2275 if (sym->components != NULL && p->u.pointer == NULL)
2277 /* Symbol already loaded, so search by name. */
2278 for (q = sym->components; q; q = q->next)
2279 if (strcmp (q->name, name) == 0)
2283 gfc_internal_error ("mio_component_ref(): Component not found");
2285 associate_integer_pointer (p, q);
2288 /* Make sure this symbol will eventually be loaded. */
2289 p = find_pointer2 (sym);
2290 if (p->u.rsym.state == UNUSED)
2291 p->u.rsym.state = NEEDED;
2296 static void mio_namespace_ref (gfc_namespace **nsp);
2297 static void mio_formal_arglist (gfc_formal_arglist **formal);
2298 static void mio_typebound_proc (gfc_typebound_proc** proc);
2301 mio_component (gfc_component *c)
2305 gfc_formal_arglist *formal;
2309 if (iomode == IO_OUTPUT)
2311 p = get_pointer (c);
2312 mio_integer (&p->integer);
2317 p = get_integer (n);
2318 associate_integer_pointer (p, c);
2321 if (p->type == P_UNKNOWN)
2322 p->type = P_COMPONENT;
2324 mio_pool_string (&c->name);
2325 mio_typespec (&c->ts);
2326 mio_array_spec (&c->as);
2328 mio_symbol_attribute (&c->attr);
2329 c->attr.access = MIO_NAME (gfc_access) (c->attr.access, access_types);
2331 mio_expr (&c->initializer);
2333 if (c->attr.proc_pointer)
2335 if (iomode == IO_OUTPUT)
2338 while (formal && !formal->sym)
2339 formal = formal->next;
2342 mio_namespace_ref (&formal->sym->ns);
2344 mio_namespace_ref (&c->formal_ns);
2348 mio_namespace_ref (&c->formal_ns);
2349 /* TODO: if (c->formal_ns)
2351 c->formal_ns->proc_name = c;
2356 mio_formal_arglist (&c->formal);
2358 mio_typebound_proc (&c->tb);
2366 mio_component_list (gfc_component **cp)
2368 gfc_component *c, *tail;
2372 if (iomode == IO_OUTPUT)
2374 for (c = *cp; c; c = c->next)
2384 if (peek_atom () == ATOM_RPAREN)
2387 c = gfc_get_component ();
2404 mio_actual_arg (gfc_actual_arglist *a)
2407 mio_pool_string (&a->name);
2408 mio_expr (&a->expr);
2414 mio_actual_arglist (gfc_actual_arglist **ap)
2416 gfc_actual_arglist *a, *tail;
2420 if (iomode == IO_OUTPUT)
2422 for (a = *ap; a; a = a->next)
2432 if (peek_atom () != ATOM_LPAREN)
2435 a = gfc_get_actual_arglist ();
2451 /* Read and write formal argument lists. */
2454 mio_formal_arglist (gfc_formal_arglist **formal)
2456 gfc_formal_arglist *f, *tail;
2460 if (iomode == IO_OUTPUT)
2462 for (f = *formal; f; f = f->next)
2463 mio_symbol_ref (&f->sym);
2467 *formal = tail = NULL;
2469 while (peek_atom () != ATOM_RPAREN)
2471 f = gfc_get_formal_arglist ();
2472 mio_symbol_ref (&f->sym);
2474 if (*formal == NULL)
2487 /* Save or restore a reference to a symbol node. */
2490 mio_symbol_ref (gfc_symbol **symp)
2494 p = mio_pointer_ref (symp);
2495 if (p->type == P_UNKNOWN)
2498 if (iomode == IO_OUTPUT)
2500 if (p->u.wsym.state == UNREFERENCED)
2501 p->u.wsym.state = NEEDS_WRITE;
2505 if (p->u.rsym.state == UNUSED)
2506 p->u.rsym.state = NEEDED;
2512 /* Save or restore a reference to a symtree node. */
2515 mio_symtree_ref (gfc_symtree **stp)
2520 if (iomode == IO_OUTPUT)
2521 mio_symbol_ref (&(*stp)->n.sym);
2524 require_atom (ATOM_INTEGER);
2525 p = get_integer (atom_int);
2527 /* An unused equivalence member; make a symbol and a symtree
2529 if (in_load_equiv && p->u.rsym.symtree == NULL)
2531 /* Since this is not used, it must have a unique name. */
2532 p->u.rsym.symtree = gfc_get_unique_symtree (gfc_current_ns);
2534 /* Make the symbol. */
2535 if (p->u.rsym.sym == NULL)
2537 p->u.rsym.sym = gfc_new_symbol (p->u.rsym.true_name,
2539 p->u.rsym.sym->module = gfc_get_string (p->u.rsym.module);
2542 p->u.rsym.symtree->n.sym = p->u.rsym.sym;
2543 p->u.rsym.symtree->n.sym->refs++;
2544 p->u.rsym.referenced = 1;
2546 /* If the symbol is PRIVATE and in COMMON, load_commons will
2547 generate a fixup symbol, which must be associated. */
2549 resolve_fixups (p->fixup, p->u.rsym.sym);
2553 if (p->type == P_UNKNOWN)
2556 if (p->u.rsym.state == UNUSED)
2557 p->u.rsym.state = NEEDED;
2559 if (p->u.rsym.symtree != NULL)
2561 *stp = p->u.rsym.symtree;
2565 f = XCNEW (fixup_t);
2567 f->next = p->u.rsym.stfixup;
2568 p->u.rsym.stfixup = f;
2570 f->pointer = (void **) stp;
2577 mio_iterator (gfc_iterator **ip)
2583 if (iomode == IO_OUTPUT)
2590 if (peek_atom () == ATOM_RPAREN)
2596 *ip = gfc_get_iterator ();
2601 mio_expr (&iter->var);
2602 mio_expr (&iter->start);
2603 mio_expr (&iter->end);
2604 mio_expr (&iter->step);
2612 mio_constructor (gfc_constructor **cp)
2614 gfc_constructor *c, *tail;
2618 if (iomode == IO_OUTPUT)
2620 for (c = *cp; c; c = c->next)
2623 mio_expr (&c->expr);
2624 mio_iterator (&c->iterator);
2633 while (peek_atom () != ATOM_RPAREN)
2635 c = gfc_get_constructor ();
2645 mio_expr (&c->expr);
2646 mio_iterator (&c->iterator);
2655 static const mstring ref_types[] = {
2656 minit ("ARRAY", REF_ARRAY),
2657 minit ("COMPONENT", REF_COMPONENT),
2658 minit ("SUBSTRING", REF_SUBSTRING),
2664 mio_ref (gfc_ref **rp)
2671 r->type = MIO_NAME (ref_type) (r->type, ref_types);
2676 mio_array_ref (&r->u.ar);
2680 mio_symbol_ref (&r->u.c.sym);
2681 mio_component_ref (&r->u.c.component, r->u.c.sym);
2685 mio_expr (&r->u.ss.start);
2686 mio_expr (&r->u.ss.end);
2687 mio_charlen (&r->u.ss.length);
2696 mio_ref_list (gfc_ref **rp)
2698 gfc_ref *ref, *head, *tail;
2702 if (iomode == IO_OUTPUT)
2704 for (ref = *rp; ref; ref = ref->next)
2711 while (peek_atom () != ATOM_RPAREN)
2714 head = tail = gfc_get_ref ();
2717 tail->next = gfc_get_ref ();
2731 /* Read and write an integer value. */
2734 mio_gmp_integer (mpz_t *integer)
2738 if (iomode == IO_INPUT)
2740 if (parse_atom () != ATOM_STRING)
2741 bad_module ("Expected integer string");
2743 mpz_init (*integer);
2744 if (mpz_set_str (*integer, atom_string, 10))
2745 bad_module ("Error converting integer");
2747 gfc_free (atom_string);
2751 p = mpz_get_str (NULL, 10, *integer);
2752 write_atom (ATOM_STRING, p);
2759 mio_gmp_real (mpfr_t *real)
2764 if (iomode == IO_INPUT)
2766 if (parse_atom () != ATOM_STRING)
2767 bad_module ("Expected real string");
2770 mpfr_set_str (*real, atom_string, 16, GFC_RND_MODE);
2771 gfc_free (atom_string);
2775 p = mpfr_get_str (NULL, &exponent, 16, 0, *real, GFC_RND_MODE);
2777 if (mpfr_nan_p (*real) || mpfr_inf_p (*real))
2779 write_atom (ATOM_STRING, p);
2784 atom_string = XCNEWVEC (char, strlen (p) + 20);
2786 sprintf (atom_string, "0.%s@%ld", p, exponent);
2788 /* Fix negative numbers. */
2789 if (atom_string[2] == '-')
2791 atom_string[0] = '-';
2792 atom_string[1] = '0';
2793 atom_string[2] = '.';
2796 write_atom (ATOM_STRING, atom_string);
2798 gfc_free (atom_string);
2804 /* Save and restore the shape of an array constructor. */
2807 mio_shape (mpz_t **pshape, int rank)
2813 /* A NULL shape is represented by (). */
2816 if (iomode == IO_OUTPUT)
2828 if (t == ATOM_RPAREN)
2835 shape = gfc_get_shape (rank);
2839 for (n = 0; n < rank; n++)
2840 mio_gmp_integer (&shape[n]);
2846 static const mstring expr_types[] = {
2847 minit ("OP", EXPR_OP),
2848 minit ("FUNCTION", EXPR_FUNCTION),
2849 minit ("CONSTANT", EXPR_CONSTANT),
2850 minit ("VARIABLE", EXPR_VARIABLE),
2851 minit ("SUBSTRING", EXPR_SUBSTRING),
2852 minit ("STRUCTURE", EXPR_STRUCTURE),
2853 minit ("ARRAY", EXPR_ARRAY),
2854 minit ("NULL", EXPR_NULL),
2855 minit ("COMPCALL", EXPR_COMPCALL),
2859 /* INTRINSIC_ASSIGN is missing because it is used as an index for
2860 generic operators, not in expressions. INTRINSIC_USER is also
2861 replaced by the correct function name by the time we see it. */
2863 static const mstring intrinsics[] =
2865 minit ("UPLUS", INTRINSIC_UPLUS),
2866 minit ("UMINUS", INTRINSIC_UMINUS),
2867 minit ("PLUS", INTRINSIC_PLUS),
2868 minit ("MINUS", INTRINSIC_MINUS),
2869 minit ("TIMES", INTRINSIC_TIMES),
2870 minit ("DIVIDE", INTRINSIC_DIVIDE),
2871 minit ("POWER", INTRINSIC_POWER),
2872 minit ("CONCAT", INTRINSIC_CONCAT),
2873 minit ("AND", INTRINSIC_AND),
2874 minit ("OR", INTRINSIC_OR),
2875 minit ("EQV", INTRINSIC_EQV),
2876 minit ("NEQV", INTRINSIC_NEQV),
2877 minit ("EQ_SIGN", INTRINSIC_EQ),
2878 minit ("EQ", INTRINSIC_EQ_OS),
2879 minit ("NE_SIGN", INTRINSIC_NE),
2880 minit ("NE", INTRINSIC_NE_OS),
2881 minit ("GT_SIGN", INTRINSIC_GT),
2882 minit ("GT", INTRINSIC_GT_OS),
2883 minit ("GE_SIGN", INTRINSIC_GE),
2884 minit ("GE", INTRINSIC_GE_OS),
2885 minit ("LT_SIGN", INTRINSIC_LT),
2886 minit ("LT", INTRINSIC_LT_OS),
2887 minit ("LE_SIGN", INTRINSIC_LE),
2888 minit ("LE", INTRINSIC_LE_OS),
2889 minit ("NOT", INTRINSIC_NOT),
2890 minit ("PARENTHESES", INTRINSIC_PARENTHESES),
2895 /* Remedy a couple of situations where the gfc_expr's can be defective. */
2898 fix_mio_expr (gfc_expr *e)
2900 gfc_symtree *ns_st = NULL;
2903 if (iomode != IO_OUTPUT)
2908 /* If this is a symtree for a symbol that came from a contained module
2909 namespace, it has a unique name and we should look in the current
2910 namespace to see if the required, non-contained symbol is available
2911 yet. If so, the latter should be written. */
2912 if (e->symtree->n.sym && check_unique_name (e->symtree->name))
2913 ns_st = gfc_find_symtree (gfc_current_ns->sym_root,
2914 e->symtree->n.sym->name);
2916 /* On the other hand, if the existing symbol is the module name or the
2917 new symbol is a dummy argument, do not do the promotion. */
2918 if (ns_st && ns_st->n.sym
2919 && ns_st->n.sym->attr.flavor != FL_MODULE
2920 && !e->symtree->n.sym->attr.dummy)
2923 else if (e->expr_type == EXPR_FUNCTION && e->value.function.name)
2925 /* In some circumstances, a function used in an initialization
2926 expression, in one use associated module, can fail to be
2927 coupled to its symtree when used in a specification
2928 expression in another module. */
2929 fname = e->value.function.esym ? e->value.function.esym->name
2930 : e->value.function.isym->name;
2931 e->symtree = gfc_find_symtree (gfc_current_ns->sym_root, fname);
2936 /* Read and write expressions. The form "()" is allowed to indicate a
2940 mio_expr (gfc_expr **ep)
2948 if (iomode == IO_OUTPUT)
2957 MIO_NAME (expr_t) (e->expr_type, expr_types);
2962 if (t == ATOM_RPAREN)
2969 bad_module ("Expected expression type");
2971 e = *ep = gfc_get_expr ();
2972 e->where = gfc_current_locus;
2973 e->expr_type = (expr_t) find_enum (expr_types);
2976 mio_typespec (&e->ts);
2977 mio_integer (&e->rank);
2981 switch (e->expr_type)
2985 = MIO_NAME (gfc_intrinsic_op) (e->value.op.op, intrinsics);
2987 switch (e->value.op.op)
2989 case INTRINSIC_UPLUS:
2990 case INTRINSIC_UMINUS:
2992 case INTRINSIC_PARENTHESES:
2993 mio_expr (&e->value.op.op1);
2996 case INTRINSIC_PLUS:
2997 case INTRINSIC_MINUS:
2998 case INTRINSIC_TIMES:
2999 case INTRINSIC_DIVIDE:
3000 case INTRINSIC_POWER:
3001 case INTRINSIC_CONCAT:
3005 case INTRINSIC_NEQV:
3007 case INTRINSIC_EQ_OS:
3009 case INTRINSIC_NE_OS:
3011 case INTRINSIC_GT_OS:
3013 case INTRINSIC_GE_OS:
3015 case INTRINSIC_LT_OS:
3017 case INTRINSIC_LE_OS:
3018 mio_expr (&e->value.op.op1);
3019 mio_expr (&e->value.op.op2);
3023 bad_module ("Bad operator");
3029 mio_symtree_ref (&e->symtree);
3030 mio_actual_arglist (&e->value.function.actual);
3032 if (iomode == IO_OUTPUT)
3034 e->value.function.name
3035 = mio_allocated_string (e->value.function.name);
3036 flag = e->value.function.esym != NULL;
3037 mio_integer (&flag);
3039 mio_symbol_ref (&e->value.function.esym);
3041 write_atom (ATOM_STRING, e->value.function.isym->name);
3045 require_atom (ATOM_STRING);
3046 e->value.function.name = gfc_get_string (atom_string);
3047 gfc_free (atom_string);
3049 mio_integer (&flag);
3051 mio_symbol_ref (&e->value.function.esym);
3054 require_atom (ATOM_STRING);
3055 e->value.function.isym = gfc_find_function (atom_string);
3056 gfc_free (atom_string);
3063 mio_symtree_ref (&e->symtree);
3064 mio_ref_list (&e->ref);
3067 case EXPR_SUBSTRING:
3068 e->value.character.string
3069 = CONST_CAST (gfc_char_t *,
3070 mio_allocated_wide_string (e->value.character.string,
3071 e->value.character.length));
3072 mio_ref_list (&e->ref);
3075 case EXPR_STRUCTURE:
3077 mio_constructor (&e->value.constructor);
3078 mio_shape (&e->shape, e->rank);
3085 mio_gmp_integer (&e->value.integer);
3089 gfc_set_model_kind (e->ts.kind);
3090 mio_gmp_real (&e->value.real);
3094 gfc_set_model_kind (e->ts.kind);
3095 mio_gmp_real (&mpc_realref (e->value.complex));
3096 mio_gmp_real (&mpc_imagref (e->value.complex));
3100 mio_integer (&e->value.logical);
3104 mio_integer (&e->value.character.length);
3105 e->value.character.string
3106 = CONST_CAST (gfc_char_t *,
3107 mio_allocated_wide_string (e->value.character.string,
3108 e->value.character.length));
3112 bad_module ("Bad type in constant expression");
3130 /* Read and write namelists. */
3133 mio_namelist (gfc_symbol *sym)
3135 gfc_namelist *n, *m;
3136 const char *check_name;
3140 if (iomode == IO_OUTPUT)
3142 for (n = sym->namelist; n; n = n->next)
3143 mio_symbol_ref (&n->sym);
3147 /* This departure from the standard is flagged as an error.
3148 It does, in fact, work correctly. TODO: Allow it
3150 if (sym->attr.flavor == FL_NAMELIST)
3152 check_name = find_use_name (sym->name, false);
3153 if (check_name && strcmp (check_name, sym->name) != 0)
3154 gfc_error ("Namelist %s cannot be renamed by USE "
3155 "association to %s", sym->name, check_name);
3159 while (peek_atom () != ATOM_RPAREN)
3161 n = gfc_get_namelist ();
3162 mio_symbol_ref (&n->sym);
3164 if (sym->namelist == NULL)
3171 sym->namelist_tail = m;
3178 /* Save/restore lists of gfc_interface structures. When loading an
3179 interface, we are really appending to the existing list of
3180 interfaces. Checking for duplicate and ambiguous interfaces has to
3181 be done later when all symbols have been loaded. */
3184 mio_interface_rest (gfc_interface **ip)
3186 gfc_interface *tail, *p;
3187 pointer_info *pi = NULL;
3189 if (iomode == IO_OUTPUT)
3192 for (p = *ip; p; p = p->next)
3193 mio_symbol_ref (&p->sym);
3208 if (peek_atom () == ATOM_RPAREN)
3211 p = gfc_get_interface ();
3212 p->where = gfc_current_locus;
3213 pi = mio_symbol_ref (&p->sym);
3229 /* Save/restore a nameless operator interface. */
3232 mio_interface (gfc_interface **ip)
3235 mio_interface_rest (ip);
3239 /* Save/restore a named operator interface. */
3242 mio_symbol_interface (const char **name, const char **module,
3246 mio_pool_string (name);
3247 mio_pool_string (module);
3248 mio_interface_rest (ip);
3253 mio_namespace_ref (gfc_namespace **nsp)
3258 p = mio_pointer_ref (nsp);
3260 if (p->type == P_UNKNOWN)
3261 p->type = P_NAMESPACE;
3263 if (iomode == IO_INPUT && p->integer != 0)
3265 ns = (gfc_namespace *) p->u.pointer;
3268 ns = gfc_get_namespace (NULL, 0);
3269 associate_integer_pointer (p, ns);
3277 /* Save/restore the f2k_derived namespace of a derived-type symbol. */
3279 static gfc_namespace* current_f2k_derived;
3282 mio_typebound_proc (gfc_typebound_proc** proc)
3285 int overriding_flag;
3287 if (iomode == IO_INPUT)
3289 *proc = gfc_get_typebound_proc ();
3290 (*proc)->where = gfc_current_locus;
3296 (*proc)->access = MIO_NAME (gfc_access) ((*proc)->access, access_types);
3298 /* IO the NON_OVERRIDABLE/DEFERRED combination. */
3299 gcc_assert (!((*proc)->deferred && (*proc)->non_overridable));
3300 overriding_flag = ((*proc)->deferred << 1) | (*proc)->non_overridable;
3301 overriding_flag = mio_name (overriding_flag, binding_overriding);
3302 (*proc)->deferred = ((overriding_flag & 2) != 0);
3303 (*proc)->non_overridable = ((overriding_flag & 1) != 0);
3304 gcc_assert (!((*proc)->deferred && (*proc)->non_overridable));
3306 (*proc)->nopass = mio_name ((*proc)->nopass, binding_passing);
3307 (*proc)->is_generic = mio_name ((*proc)->is_generic, binding_generic);
3308 (*proc)->ppc = mio_name((*proc)->ppc, binding_ppc);
3310 mio_pool_string (&((*proc)->pass_arg));
3312 flag = (int) (*proc)->pass_arg_num;
3313 mio_integer (&flag);
3314 (*proc)->pass_arg_num = (unsigned) flag;
3316 if ((*proc)->is_generic)
3322 if (iomode == IO_OUTPUT)
3323 for (g = (*proc)->u.generic; g; g = g->next)
3324 mio_allocated_string (g->specific_st->name);
3327 (*proc)->u.generic = NULL;
3328 while (peek_atom () != ATOM_RPAREN)
3330 gfc_symtree** sym_root;
3332 g = gfc_get_tbp_generic ();
3335 require_atom (ATOM_STRING);
3336 sym_root = ¤t_f2k_derived->tb_sym_root;
3337 g->specific_st = gfc_get_tbp_symtree (sym_root, atom_string);
3338 gfc_free (atom_string);
3340 g->next = (*proc)->u.generic;
3341 (*proc)->u.generic = g;
3347 else if (!(*proc)->ppc)
3348 mio_symtree_ref (&(*proc)->u.specific);
3353 /* Walker-callback function for this purpose. */
3355 mio_typebound_symtree (gfc_symtree* st)
3357 if (iomode == IO_OUTPUT && !st->n.tb)
3360 if (iomode == IO_OUTPUT)
3363 mio_allocated_string (st->name);
3365 /* For IO_INPUT, the above is done in mio_f2k_derived. */
3367 mio_typebound_proc (&st->n.tb);
3371 /* IO a full symtree (in all depth). */
3373 mio_full_typebound_tree (gfc_symtree** root)
3377 if (iomode == IO_OUTPUT)
3378 gfc_traverse_symtree (*root, &mio_typebound_symtree);
3381 while (peek_atom () == ATOM_LPAREN)
3387 require_atom (ATOM_STRING);
3388 st = gfc_get_tbp_symtree (root, atom_string);
3389 gfc_free (atom_string);
3391 mio_typebound_symtree (st);
3399 mio_finalizer (gfc_finalizer **f)
3401 if (iomode == IO_OUTPUT)
3404 gcc_assert ((*f)->proc_tree); /* Should already be resolved. */
3405 mio_symtree_ref (&(*f)->proc_tree);
3409 *f = gfc_get_finalizer ();
3410 (*f)->where = gfc_current_locus; /* Value should not matter. */
3413 mio_symtree_ref (&(*f)->proc_tree);
3414 (*f)->proc_sym = NULL;
3419 mio_f2k_derived (gfc_namespace *f2k)
3421 current_f2k_derived = f2k;
3423 /* Handle the list of finalizer procedures. */
3425 if (iomode == IO_OUTPUT)
3428 for (f = f2k->finalizers; f; f = f->next)
3433 f2k->finalizers = NULL;
3434 while (peek_atom () != ATOM_RPAREN)
3436 gfc_finalizer *cur = NULL;
3437 mio_finalizer (&cur);
3438 cur->next = f2k->finalizers;
3439 f2k->finalizers = cur;
3444 /* Handle type-bound procedures. */
3445 mio_full_typebound_tree (&f2k->tb_sym_root);
3447 /* Type-bound user operators. */
3448 mio_full_typebound_tree (&f2k->tb_uop_root);
3450 /* Type-bound intrinsic operators. */
3452 if (iomode == IO_OUTPUT)
3455 for (op = GFC_INTRINSIC_BEGIN; op != GFC_INTRINSIC_END; ++op)
3457 gfc_intrinsic_op realop;
3459 if (op == INTRINSIC_USER || !f2k->tb_op[op])
3463 realop = (gfc_intrinsic_op) op;
3464 mio_intrinsic_op (&realop);
3465 mio_typebound_proc (&f2k->tb_op[op]);
3470 while (peek_atom () != ATOM_RPAREN)
3472 gfc_intrinsic_op op;
3475 mio_intrinsic_op (&op);
3476 mio_typebound_proc (&f2k->tb_op[op]);
3483 mio_full_f2k_derived (gfc_symbol *sym)
3487 if (iomode == IO_OUTPUT)
3489 if (sym->f2k_derived)
3490 mio_f2k_derived (sym->f2k_derived);
3494 if (peek_atom () != ATOM_RPAREN)
3496 sym->f2k_derived = gfc_get_namespace (NULL, 0);
3497 mio_f2k_derived (sym->f2k_derived);
3500 gcc_assert (!sym->f2k_derived);
3507 /* Unlike most other routines, the address of the symbol node is already
3508 fixed on input and the name/module has already been filled in. */
3511 mio_symbol (gfc_symbol *sym)
3513 int intmod = INTMOD_NONE;
3517 mio_symbol_attribute (&sym->attr);
3518 mio_typespec (&sym->ts);
3520 if (iomode == IO_OUTPUT)
3521 mio_namespace_ref (&sym->formal_ns);
3524 mio_namespace_ref (&sym->formal_ns);
3527 sym->formal_ns->proc_name = sym;
3532 /* Save/restore common block links. */
3533 mio_symbol_ref (&sym->common_next);
3535 mio_formal_arglist (&sym->formal);
3537 if (sym->attr.flavor == FL_PARAMETER)
3538 mio_expr (&sym->value);
3540 mio_array_spec (&sym->as);
3542 mio_symbol_ref (&sym->result);
3544 if (sym->attr.cray_pointee)
3545 mio_symbol_ref (&sym->cp_pointer);
3547 /* Note that components are always saved, even if they are supposed
3548 to be private. Component access is checked during searching. */
3550 mio_component_list (&sym->components);
3552 if (sym->components != NULL)
3553 sym->component_access
3554 = MIO_NAME (gfc_access) (sym->component_access, access_types);
3556 /* Load/save the f2k_derived namespace of a derived-type symbol. */
3557 mio_full_f2k_derived (sym);
3561 /* Add the fields that say whether this is from an intrinsic module,
3562 and if so, what symbol it is within the module. */
3563 /* mio_integer (&(sym->from_intmod)); */
3564 if (iomode == IO_OUTPUT)
3566 intmod = sym->from_intmod;
3567 mio_integer (&intmod);
3571 mio_integer (&intmod);
3572 sym->from_intmod = (intmod_id) intmod;
3575 mio_integer (&(sym->intmod_sym_id));
3577 if (sym->attr.flavor == FL_DERIVED)
3578 mio_integer (&(sym->vindex));
3584 /************************* Top level subroutines *************************/
3586 /* Given a root symtree node and a symbol, try to find a symtree that
3587 references the symbol that is not a unique name. */
3589 static gfc_symtree *
3590 find_symtree_for_symbol (gfc_symtree *st, gfc_symbol *sym)
3592 gfc_symtree *s = NULL;
3597 s = find_symtree_for_symbol (st->right, sym);
3600 s = find_symtree_for_symbol (st->left, sym);
3604 if (st->n.sym == sym && !check_unique_name (st->name))
3611 /* A recursive function to look for a specific symbol by name and by
3612 module. Whilst several symtrees might point to one symbol, its
3613 is sufficient for the purposes here than one exist. Note that
3614 generic interfaces are distinguished as are symbols that have been
3615 renamed in another module. */
3616 static gfc_symtree *
3617 find_symbol (gfc_symtree *st, const char *name,
3618 const char *module, int generic)
3621 gfc_symtree *retval, *s;
3623 if (st == NULL || st->n.sym == NULL)
3626 c = strcmp (name, st->n.sym->name);
3627 if (c == 0 && st->n.sym->module
3628 && strcmp (module, st->n.sym->module) == 0
3629 && !check_unique_name (st->name))
3631 s = gfc_find_symtree (gfc_current_ns->sym_root, name);
3633 /* Detect symbols that are renamed by use association in another
3634 module by the absence of a symtree and null attr.use_rename,
3635 since the latter is not transmitted in the module file. */
3636 if (((!generic && !st->n.sym->attr.generic)
3637 || (generic && st->n.sym->attr.generic))
3638 && !(s == NULL && !st->n.sym->attr.use_rename))
3642 retval = find_symbol (st->left, name, module, generic);
3645 retval = find_symbol (st->right, name, module, generic);
3651 /* Skip a list between balanced left and right parens. */
3661 switch (parse_atom ())
3672 gfc_free (atom_string);
3684 /* Load operator interfaces from the module. Interfaces are unusual
3685 in that they attach themselves to existing symbols. */
3688 load_operator_interfaces (void)
3691 char name[GFC_MAX_SYMBOL_LEN + 1], module[GFC_MAX_SYMBOL_LEN + 1];
3693 pointer_info *pi = NULL;
3698 while (peek_atom () != ATOM_RPAREN)
3702 mio_internal_string (name);
3703 mio_internal_string (module);
3705 n = number_use_names (name, true);
3708 for (i = 1; i <= n; i++)
3710 /* Decide if we need to load this one or not. */
3711 p = find_use_name_n (name, &i, true);
3715 while (parse_atom () != ATOM_RPAREN);
3721 uop = gfc_get_uop (p);
3722 pi = mio_interface_rest (&uop->op);
3726 if (gfc_find_uop (p, NULL))
3728 uop = gfc_get_uop (p);
3729 uop->op = gfc_get_interface ();
3730 uop->op->where = gfc_current_locus;
3731 add_fixup (pi->integer, &uop->op->sym);
3740 /* Load interfaces from the module. Interfaces are unusual in that
3741 they attach themselves to existing symbols. */
3744 load_generic_interfaces (void)
3747 char name[GFC_MAX_SYMBOL_LEN + 1], module[GFC_MAX_SYMBOL_LEN + 1];
3749 gfc_interface *generic = NULL;
3754 while (peek_atom () != ATOM_RPAREN)
3758 mio_internal_string (name);
3759 mio_internal_string (module);
3761 n = number_use_names (name, false);
3762 renamed = n ? 1 : 0;
3765 for (i = 1; i <= n; i++)
3768 /* Decide if we need to load this one or not. */
3769 p = find_use_name_n (name, &i, false);
3771 st = find_symbol (gfc_current_ns->sym_root,
3772 name, module_name, 1);
3774 if (!p || gfc_find_symbol (p, NULL, 0, &sym))
3776 /* Skip the specific names for these cases. */
3777 while (i == 1 && parse_atom () != ATOM_RPAREN);
3782 /* If the symbol exists already and is being USEd without being
3783 in an ONLY clause, do not load a new symtree(11.3.2). */
3784 if (!only_flag && st)
3789 /* Make the symbol inaccessible if it has been added by a USE
3790 statement without an ONLY(11.3.2). */
3792 && !st->n.sym->attr.use_only
3793 && !st->n.sym->attr.use_rename
3794 && strcmp (st->n.sym->module, module_name) == 0)
3797 gfc_delete_symtree (&gfc_current_ns->sym_root, name);
3798 st = gfc_get_unique_symtree (gfc_current_ns);
3805 if (strcmp (st->name, p) != 0)
3807 st = gfc_new_symtree (&gfc_current_ns->sym_root, p);
3813 /* Since we haven't found a valid generic interface, we had
3817 gfc_get_symbol (p, NULL, &sym);
3818 sym->name = gfc_get_string (name);
3819 sym->module = gfc_get_string (module_name);
3820 sym->attr.flavor = FL_PROCEDURE;
3821 sym->attr.generic = 1;
3822 sym->attr.use_assoc = 1;
3827 /* Unless sym is a generic interface, this reference
3830 st = gfc_find_symtree (gfc_current_ns->sym_root, p);
3834 if (st && !sym->attr.generic
3836 && strcmp(module, sym->module))
3840 sym->attr.use_only = only_flag;
3841 sym->attr.use_rename = renamed;
3845 mio_interface_rest (&sym->generic);
3846 generic = sym->generic;
3848 else if (!sym->generic)
3850 sym->generic = generic;
3851 sym->attr.generic_copy = 1;
3860 /* Load common blocks. */
3865 char name[GFC_MAX_SYMBOL_LEN + 1];
3870 while (peek_atom () != ATOM_RPAREN)
3874 mio_internal_string (name);
3876 p = gfc_get_common (name, 1);
3878 mio_symbol_ref (&p->head);
3879 mio_integer (&flags);
3883 p->threadprivate = 1;
3886 /* Get whether this was a bind(c) common or not. */
3887 mio_integer (&p->is_bind_c);
3888 /* Get the binding label. */
3889 mio_internal_string (p->binding_label);
3898 /* Load equivalences. The flag in_load_equiv informs mio_expr_ref of this
3899 so that unused variables are not loaded and so that the expression can
3905 gfc_equiv *head, *tail, *end, *eq;
3909 in_load_equiv = true;
3911 end = gfc_current_ns->equiv;
3912 while (end != NULL && end->next != NULL)
3915 while (peek_atom () != ATOM_RPAREN) {
3919 while(peek_atom () != ATOM_RPAREN)
3922 head = tail = gfc_get_equiv ();
3925 tail->eq = gfc_get_equiv ();
3929 mio_pool_string (&tail->module);
3930 mio_expr (&tail->expr);
3933 /* Unused equivalence members have a unique name. In addition, it
3934 must be checked that the symbols are from the same module. */
3936 for (eq = head; eq; eq = eq->eq)
3938 if (eq->expr->symtree->n.sym->module
3939 && head->expr->symtree->n.sym->module
3940 && strcmp (head->expr->symtree->n.sym->module,
3941 eq->expr->symtree->n.sym->module) == 0
3942 && !check_unique_name (eq->expr->symtree->name))
3951 for (eq = head; eq; eq = head)
3954 gfc_free_expr (eq->expr);
3960 gfc_current_ns->equiv = head;
3971 in_load_equiv = false;
3975 /* This function loads the sym_root of f2k_derived with the extensions to
3976 the derived type. */
3978 load_derived_extensions (void)
3980 int symbol, nuse, j;
3981 gfc_symbol *derived;
3985 char name[GFC_MAX_SYMBOL_LEN + 1];
3986 char module[GFC_MAX_SYMBOL_LEN + 1];
3990 while (peek_atom () != ATOM_RPAREN)
3993 mio_integer (&symbol);
3994 info = get_integer (symbol);
3995 derived = info->u.rsym.sym;
3997 gcc_assert (derived->attr.flavor == FL_DERIVED);
3998 if (derived->f2k_derived == NULL)
3999 derived->f2k_derived = gfc_get_namespace (NULL, 0);
4001 while (peek_atom () != ATOM_RPAREN)
4004 mio_internal_string (name);
4005 mio_internal_string (module);
4007 /* Only use one use name to find the symbol. */
4008 nuse = number_use_names (name, false);
4010 p = find_use_name_n (name, &j, false);
4011 st = gfc_find_symtree (gfc_current_ns->sym_root, p);
4013 st = gfc_find_symtree (derived->f2k_derived->sym_root, name);
4016 /* Only use the real name in f2k_derived to ensure a single
4018 st = gfc_new_symtree (&derived->f2k_derived->sym_root, name);
4030 /* Recursive function to traverse the pointer_info tree and load a
4031 needed symbol. We return nonzero if we load a symbol and stop the
4032 traversal, because the act of loading can alter the tree. */
4035 load_needed (pointer_info *p)
4046 rv |= load_needed (p->left);
4047 rv |= load_needed (p->right);
4049 if (p->type != P_SYMBOL || p->u.rsym.state != NEEDED)
4052 p->u.rsym.state = USED;
4054 set_module_locus (&p->u.rsym.where);
4056 sym = p->u.rsym.sym;
4059 q = get_integer (p->u.rsym.ns);
4061 ns = (gfc_namespace *) q->u.pointer;
4064 /* Create an interface namespace if necessary. These are
4065 the namespaces that hold the formal parameters of module
4068 ns = gfc_get_namespace (NULL, 0);
4069 associate_integer_pointer (q, ns);
4072 /* Use the module sym as 'proc_name' so that gfc_get_symbol_decl
4073 doesn't go pear-shaped if the symbol is used. */
4075 gfc_find_symbol (p->u.rsym.module, gfc_current_ns,
4078 sym = gfc_new_symbol (p->u.rsym.true_name, ns);
4079 sym->module = gfc_get_string (p->u.rsym.module);
4080 strcpy (sym->binding_label, p->u.rsym.binding_label);
4082 associate_integer_pointer (p, sym);
4086 sym->attr.use_assoc = 1;
4088 sym->attr.use_only = 1;
4089 if (p->u.rsym.renamed)
4090 sym->attr.use_rename = 1;
4096 /* Recursive function for cleaning up things after a module has been read. */
4099 read_cleanup (pointer_info *p)
4107 read_cleanup (p->left);
4108 read_cleanup (p->right);
4110 if (p->type == P_SYMBOL && p->u.rsym.state == USED && !p->u.rsym.referenced)
4112 /* Add hidden symbols to the symtree. */
4113 q = get_integer (p->u.rsym.ns);
4114 st = gfc_get_unique_symtree ((gfc_namespace *) q->u.pointer);
4116 st->n.sym = p->u.rsym.sym;
4119 /* Fixup any symtree references. */
4120 p->u.rsym.symtree = st;
4121 resolve_fixups (p->u.rsym.stfixup, st);
4122 p->u.rsym.stfixup = NULL;
4125 /* Free unused symbols. */
4126 if (p->type == P_SYMBOL && p->u.rsym.state == UNUSED)
4127 gfc_free_symbol (p->u.rsym.sym);
4131 /* It is not quite enough to check for ambiguity in the symbols by
4132 the loaded symbol and the new symbol not being identical. */
4134 check_for_ambiguous (gfc_symbol *st_sym, pointer_info *info)
4138 symbol_attribute attr;
4140 rsym = info->u.rsym.sym;
4144 /* If the existing symbol is generic from a different module and
4145 the new symbol is generic there can be no ambiguity. */
4146 if (st_sym->attr.generic
4148 && strcmp (st_sym->module, module_name))
4150 /* The new symbol's attributes have not yet been read. Since
4151 we need attr.generic, read it directly. */
4152 get_module_locus (&locus);
4153 set_module_locus (&info->u.rsym.where);
4156 mio_symbol_attribute (&attr);
4157 set_module_locus (&locus);
4166 /* Read a module file. */
4171 module_locus operator_interfaces, user_operators, extensions;
4173 char name[GFC_MAX_SYMBOL_LEN + 1];
4175 int ambiguous, j, nuse, symbol;
4176 pointer_info *info, *q;
4181 get_module_locus (&operator_interfaces); /* Skip these for now. */
4184 get_module_locus (&user_operators);
4188 /* Skip commons, equivalences and derived type extensions for now. */
4192 get_module_locus (&extensions);
4197 /* Create the fixup nodes for all the symbols. */
4199 while (peek_atom () != ATOM_RPAREN)
4201 require_atom (ATOM_INTEGER);
4202 info = get_integer (atom_int);
4204 info->type = P_SYMBOL;
4205 info->u.rsym.state = UNUSED;
4207 mio_internal_string (info->u.rsym.true_name);
4208 mio_internal_string (info->u.rsym.module);
4209 mio_internal_string (info->u.rsym.binding_label);
4212 require_atom (ATOM_INTEGER);
4213 info->u.rsym.ns = atom_int;
4215 get_module_locus (&info->u.rsym.where);
4218 /* See if the symbol has already been loaded by a previous module.
4219 If so, we reference the existing symbol and prevent it from
4220 being loaded again. This should not happen if the symbol being
4221 read is an index for an assumed shape dummy array (ns != 1). */
4223 sym = find_true_name (info->u.rsym.true_name, info->u.rsym.module);
4226 || (sym->attr.flavor == FL_VARIABLE && info->u.rsym.ns !=1))
4229 info->u.rsym.state = USED;
4230 info->u.rsym.sym = sym;
4232 /* Some symbols do not have a namespace (eg. formal arguments),
4233 so the automatic "unique symtree" mechanism must be suppressed
4234 by marking them as referenced. */
4235 q = get_integer (info->u.rsym.ns);
4236 if (q->u.pointer == NULL)
4238 info->u.rsym.referenced = 1;
4242 /* If possible recycle the symtree that references the symbol.
4243 If a symtree is not found and the module does not import one,
4244 a unique-name symtree is found by read_cleanup. */
4245 st = find_symtree_for_symbol (gfc_current_ns->sym_root, sym);
4248 info->u.rsym.symtree = st;
4249 info->u.rsym.referenced = 1;
4255 /* Parse the symtree lists. This lets us mark which symbols need to
4256 be loaded. Renaming is also done at this point by replacing the
4261 while (peek_atom () != ATOM_RPAREN)
4263 mio_internal_string (name);
4264 mio_integer (&ambiguous);
4265 mio_integer (&symbol);
4267 info = get_integer (symbol);
4269 /* See how many use names there are. If none, go through the start
4270 of the loop at least once. */
4271 nuse = number_use_names (name, false);
4272 info->u.rsym.renamed = nuse ? 1 : 0;
4277 for (j = 1; j <= nuse; j++)
4279 /* Get the jth local name for this symbol. */
4280 p = find_use_name_n (name, &j, false);
4282 if (p == NULL && strcmp (name, module_name) == 0)
4285 /* Skip symtree nodes not in an ONLY clause, unless there
4286 is an existing symtree loaded from another USE statement. */
4289 st = gfc_find_symtree (gfc_current_ns->sym_root, name);
4291 info->u.rsym.symtree = st;
4295 /* If a symbol of the same name and module exists already,
4296 this symbol, which is not in an ONLY clause, must not be
4297 added to the namespace(11.3.2). Note that find_symbol
4298 only returns the first occurrence that it finds. */
4299 if (!only_flag && !info->u.rsym.renamed
4300 && strcmp (name, module_name) != 0
4301 && find_symbol (gfc_current_ns->sym_root, name,
4305 st = gfc_find_symtree (gfc_current_ns->sym_root, p);
4309 /* Check for ambiguous symbols. */
4310 if (check_for_ambiguous (st->n.sym, info))
4312 info->u.rsym.symtree = st;
4316 st = gfc_find_symtree (gfc_current_ns->sym_root, name);
4318 /* Delete the symtree if the symbol has been added by a USE
4319 statement without an ONLY(11.3.2). Remember that the rsym
4320 will be the same as the symbol found in the symtree, for
4322 if (st && (only_flag || info->u.rsym.renamed)
4323 && !st->n.sym->attr.use_only
4324 && !st->n.sym->attr.use_rename
4325 && info->u.rsym.sym == st->n.sym)
4326 gfc_delete_symtree (&gfc_current_ns->sym_root, name);
4328 /* Create a symtree node in the current namespace for this
4330 st = check_unique_name (p)
4331 ? gfc_get_unique_symtree (gfc_current_ns)
4332 : gfc_new_symtree (&gfc_current_ns->sym_root, p);
4333 st->ambiguous = ambiguous;
4335 sym = info->u.rsym.sym;
4337 /* Create a symbol node if it doesn't already exist. */
4340 info->u.rsym.sym = gfc_new_symbol (info->u.rsym.true_name,
4342 sym = info->u.rsym.sym;
4343 sym->module = gfc_get_string (info->u.rsym.module);
4345 /* TODO: hmm, can we test this? Do we know it will be
4346 initialized to zeros? */
4347 if (info->u.rsym.binding_label[0] != '\0')
4348 strcpy (sym->binding_label, info->u.rsym.binding_label);
4354 if (strcmp (name, p) != 0)
4355 sym->attr.use_rename = 1;
4357 /* We need to set the only_flag here so that symbols from the
4358 same USE...ONLY but earlier are not deleted from the tree in
4359 the gfc_delete_symtree above. */
4360 sym->attr.use_only = only_flag;
4362 /* Store the symtree pointing to this symbol. */
4363 info->u.rsym.symtree = st;
4365 if (info->u.rsym.state == UNUSED)
4366 info->u.rsym.state = NEEDED;
4367 info->u.rsym.referenced = 1;
4374 /* Load intrinsic operator interfaces. */
4375 set_module_locus (&operator_interfaces);
4378 for (i = GFC_INTRINSIC_BEGIN; i != GFC_INTRINSIC_END; i++)
4380 if (i == INTRINSIC_USER)
4385 u = find_use_operator ((gfc_intrinsic_op) i);
4396 mio_interface (&gfc_current_ns->op[i]);
4401 /* Load generic and user operator interfaces. These must follow the
4402 loading of symtree because otherwise symbols can be marked as
4405 set_module_locus (&user_operators);
4407 load_operator_interfaces ();
4408 load_generic_interfaces ();
4413 /* At this point, we read those symbols that are needed but haven't
4414 been loaded yet. If one symbol requires another, the other gets
4415 marked as NEEDED if its previous state was UNUSED. */
4417 while (load_needed (pi_root));
4419 /* Make sure all elements of the rename-list were found in the module. */
4421 for (u = gfc_rename_list; u; u = u->next)
4426 if (u->op == INTRINSIC_NONE)
4428 gfc_error ("Symbol '%s' referenced at %L not found in module '%s'",
4429 u->use_name, &u->where, module_name);
4433 if (u->op == INTRINSIC_USER)
4435 gfc_error ("User operator '%s' referenced at %L not found "
4436 "in module '%s'", u->use_name, &u->where, module_name);
4440 gfc_error ("Intrinsic operator '%s' referenced at %L not found "
4441 "in module '%s'", gfc_op2string (u->op), &u->where,
4445 gfc_check_interfaces (gfc_current_ns);
4447 /* Now we should be in a position to fill f2k_derived with derived type
4448 extensions, since everything has been loaded. */
4449 set_module_locus (&extensions);
4450 load_derived_extensions ();
4452 /* Clean up symbol nodes that were never loaded, create references
4453 to hidden symbols. */
4455 read_cleanup (pi_root);
4459 /* Given an access type that is specific to an entity and the default
4460 access, return nonzero if the entity is publicly accessible. If the
4461 element is declared as PUBLIC, then it is public; if declared
4462 PRIVATE, then private, and otherwise it is public unless the default
4463 access in this context has been declared PRIVATE. */
4466 gfc_check_access (gfc_access specific_access, gfc_access default_access)
4468 if (specific_access == ACCESS_PUBLIC)
4470 if (specific_access == ACCESS_PRIVATE)
4473 if (gfc_option.flag_module_private)
4474 return default_access == ACCESS_PUBLIC;
4476 return default_access != ACCESS_PRIVATE;
4480 /* A structure to remember which commons we've already written. */
4482 struct written_common
4484 BBT_HEADER(written_common);
4485 const char *name, *label;
4488 static struct written_common *written_commons = NULL;
4490 /* Comparison function used for balancing the binary tree. */
4493 compare_written_commons (void *a1, void *b1)
4495 const char *aname = ((struct written_common *) a1)->name;
4496 const char *alabel = ((struct written_common *) a1)->label;
4497 const char *bname = ((struct written_common *) b1)->name;
4498 const char *blabel = ((struct written_common *) b1)->label;
4499 int c = strcmp (aname, bname);
4501 return (c != 0 ? c : strcmp (alabel, blabel));
4504 /* Free a list of written commons. */
4507 free_written_common (struct written_common *w)
4513 free_written_common (w->left);
4515 free_written_common (w->right);
4520 /* Write a common block to the module -- recursive helper function. */
4523 write_common_0 (gfc_symtree *st, bool this_module)
4529 struct written_common *w;
4530 bool write_me = true;
4535 write_common_0 (st->left, this_module);
4537 /* We will write out the binding label, or the name if no label given. */
4538 name = st->n.common->name;
4540 label = p->is_bind_c ? p->binding_label : p->name;
4542 /* Check if we've already output this common. */
4543 w = written_commons;
4546 int c = strcmp (name, w->name);
4547 c = (c != 0 ? c : strcmp (label, w->label));
4551 w = (c < 0) ? w->left : w->right;
4554 if (this_module && p->use_assoc)
4559 /* Write the common to the module. */
4561 mio_pool_string (&name);
4563 mio_symbol_ref (&p->head);
4564 flags = p->saved ? 1 : 0;
4565 if (p->threadprivate)
4567 mio_integer (&flags);
4569 /* Write out whether the common block is bind(c) or not. */
4570 mio_integer (&(p->is_bind_c));
4572 mio_pool_string (&label);
4575 /* Record that we have written this common. */
4576 w = XCNEW (struct written_common);
4579 gfc_insert_bbt (&written_commons, w, compare_written_commons);
4582 write_common_0 (st->right, this_module);
4586 /* Write a common, by initializing the list of written commons, calling
4587 the recursive function write_common_0() and cleaning up afterwards. */
4590 write_common (gfc_symtree *st)
4592 written_commons = NULL;
4593 write_common_0 (st, true);
4594 write_common_0 (st, false);
4595 free_written_common (written_commons);
4596 written_commons = NULL;
4600 /* Write the blank common block to the module. */
4603 write_blank_common (void)
4605 const char * name = BLANK_COMMON_NAME;
4607 /* TODO: Blank commons are not bind(c). The F2003 standard probably says
4608 this, but it hasn't been checked. Just making it so for now. */
4611 if (gfc_current_ns->blank_common.head == NULL)
4616 mio_pool_string (&name);
4618 mio_symbol_ref (&gfc_current_ns->blank_common.head);
4619 saved = gfc_current_ns->blank_common.saved;
4620 mio_integer (&saved);
4622 /* Write out whether the common block is bind(c) or not. */
4623 mio_integer (&is_bind_c);
4625 /* Write out the binding label, which is BLANK_COMMON_NAME, though
4626 it doesn't matter because the label isn't used. */
4627 mio_pool_string (&name);
4633 /* Write equivalences to the module. */
4642 for (eq = gfc_current_ns->equiv; eq; eq = eq->next)
4646 for (e = eq; e; e = e->eq)
4648 if (e->module == NULL)
4649 e->module = gfc_get_string ("%s.eq.%d", module_name, num);
4650 mio_allocated_string (e->module);
4651 mio_expr (&e->expr);
4660 /* Write derived type extensions to the module. */
4663 write_dt_extensions (gfc_symtree *st)
4666 mio_pool_string (&st->n.sym->name);
4667 if (st->n.sym->module != NULL)
4668 mio_pool_string (&st->n.sym->module);
4670 mio_internal_string (module_name);
4675 write_derived_extensions (gfc_symtree *st)
4677 if (!((st->n.sym->attr.flavor == FL_DERIVED)
4678 && (st->n.sym->f2k_derived != NULL)
4679 && (st->n.sym->f2k_derived->sym_root != NULL)))
4683 mio_symbol_ref (&(st->n.sym));
4684 gfc_traverse_symtree (st->n.sym->f2k_derived->sym_root,
4685 write_dt_extensions);
4690 /* Write a symbol to the module. */
4693 write_symbol (int n, gfc_symbol *sym)
4697 if (sym->attr.flavor == FL_UNKNOWN || sym->attr.flavor == FL_LABEL)
4698 gfc_internal_error ("write_symbol(): bad module symbol '%s'", sym->name);
4701 mio_pool_string (&sym->name);
4703 mio_pool_string (&sym->module);
4704 if (sym->attr.is_bind_c || sym->attr.is_iso_c)
4706 label = sym->binding_label;
4707 mio_pool_string (&label);
4710 mio_pool_string (&sym->name);
4712 mio_pointer_ref (&sym->ns);
4719 /* Recursive traversal function to write the initial set of symbols to
4720 the module. We check to see if the symbol should be written
4721 according to the access specification. */
4724 write_symbol0 (gfc_symtree *st)
4728 bool dont_write = false;
4733 write_symbol0 (st->left);
4736 if (sym->module == NULL)
4737 sym->module = gfc_get_string (module_name);
4739 if (sym->attr.flavor == FL_PROCEDURE && sym->attr.generic
4740 && !sym->attr.subroutine && !sym->attr.function)
4743 if (!gfc_check_access (sym->attr.access, sym->ns->default_access))
4748 p = get_pointer (sym);
4749 if (p->type == P_UNKNOWN)
4752 if (p->u.wsym.state != WRITTEN)
4754 write_symbol (p->integer, sym);
4755 p->u.wsym.state = WRITTEN;
4759 write_symbol0 (st->right);
4763 /* Recursive traversal function to write the secondary set of symbols
4764 to the module file. These are symbols that were not public yet are
4765 needed by the public symbols or another dependent symbol. The act
4766 of writing a symbol can modify the pointer_info tree, so we cease
4767 traversal if we find a symbol to write. We return nonzero if a
4768 symbol was written and pass that information upwards. */
4771 write_symbol1 (pointer_info *p)
4778 result = write_symbol1 (p->left);
4780 if (!(p->type != P_SYMBOL || p->u.wsym.state != NEEDS_WRITE))
4782 p->u.wsym.state = WRITTEN;
4783 write_symbol (p->integer, p->u.wsym.sym);
4787 result |= write_symbol1 (p->right);
4792 /* Write operator interfaces associated with a symbol. */
4795 write_operator (gfc_user_op *uop)
4797 static char nullstring[] = "";
4798 const char *p = nullstring;
4801 || !gfc_check_access (uop->access, uop->ns->default_access))
4804 mio_symbol_interface (&uop->name, &p, &uop->op);
4808 /* Write generic interfaces from the namespace sym_root. */
4811 write_generic (gfc_symtree *st)
4818 write_generic (st->left);
4819 write_generic (st->right);
4822 if (!sym || check_unique_name (st->name))
4825 if (sym->generic == NULL
4826 || !gfc_check_access (sym->attr.access, sym->ns->default_access))
4829 if (sym->module == NULL)
4830 sym->module = gfc_get_string (module_name);
4832 mio_symbol_interface (&st->name, &sym->module, &sym->generic);
4837 write_symtree (gfc_symtree *st)
4844 /* A symbol in an interface body must not be visible in the
4846 if (sym->ns != gfc_current_ns
4847 && sym->ns->proc_name
4848 && sym->ns->proc_name->attr.if_source == IFSRC_IFBODY)
4851 if (!gfc_check_access (sym->attr.access, sym->ns->default_access)
4852 || (sym->attr.flavor == FL_PROCEDURE && sym->attr.generic
4853 && !sym->attr.subroutine && !sym->attr.function))
4856 if (check_unique_name (st->name))
4859 p = find_pointer (sym);
4861 gfc_internal_error ("write_symtree(): Symbol not written");
4863 mio_pool_string (&st->name);
4864 mio_integer (&st->ambiguous);
4865 mio_integer (&p->integer);
4874 /* Write the operator interfaces. */
4877 for (i = GFC_INTRINSIC_BEGIN; i != GFC_INTRINSIC_END; i++)
4879 if (i == INTRINSIC_USER)
4882 mio_interface (gfc_check_access (gfc_current_ns->operator_access[i],
4883 gfc_current_ns->default_access)
4884 ? &gfc_current_ns->op[i] : NULL);
4892 gfc_traverse_user_op (gfc_current_ns, write_operator);
4898 write_generic (gfc_current_ns->sym_root);
4904 write_blank_common ();
4905 write_common (gfc_current_ns->common_root);
4917 gfc_traverse_symtree (gfc_current_ns->sym_root,
4918 write_derived_extensions);
4923 /* Write symbol information. First we traverse all symbols in the
4924 primary namespace, writing those that need to be written.
4925 Sometimes writing one symbol will cause another to need to be
4926 written. A list of these symbols ends up on the write stack, and
4927 we end by popping the bottom of the stack and writing the symbol
4928 until the stack is empty. */
4932 write_symbol0 (gfc_current_ns->sym_root);
4933 while (write_symbol1 (pi_root))
4942 gfc_traverse_symtree (gfc_current_ns->sym_root, write_symtree);
4947 /* Read a MD5 sum from the header of a module file. If the file cannot
4948 be opened, or we have any other error, we return -1. */
4951 read_md5_from_module_file (const char * filename, unsigned char md5[16])
4957 /* Open the file. */
4958 if ((file = fopen (filename, "r")) == NULL)
4961 /* Read the first line. */
4962 if (fgets (buf, sizeof (buf) - 1, file) == NULL)
4968 /* The file also needs to be overwritten if the version number changed. */
4969 n = strlen ("GFORTRAN module version '" MOD_VERSION "' created");
4970 if (strncmp (buf, "GFORTRAN module version '" MOD_VERSION "' created", n) != 0)
4976 /* Read a second line. */
4977 if (fgets (buf, sizeof (buf) - 1, file) == NULL)
4983 /* Close the file. */
4986 /* If the header is not what we expect, or is too short, bail out. */
4987 if (strncmp (buf, "MD5:", 4) != 0 || strlen (buf) < 4 + 16)
4990 /* Now, we have a real MD5, read it into the array. */
4991 for (n = 0; n < 16; n++)
4995 if (sscanf (&(buf[4+2*n]), "%02x", &x) != 1)
5005 /* Given module, dump it to disk. If there was an error while
5006 processing the module, dump_flag will be set to zero and we delete
5007 the module file, even if it was already there. */
5010 gfc_dump_module (const char *name, int dump_flag)
5013 char *filename, *filename_tmp, *p;
5016 unsigned char md5_new[16], md5_old[16];
5018 n = strlen (name) + strlen (MODULE_EXTENSION) + 1;
5019 if (gfc_option.module_dir != NULL)
5021 n += strlen (gfc_option.module_dir);
5022 filename = (char *) alloca (n);
5023 strcpy (filename, gfc_option.module_dir);
5024 strcat (filename, name);
5028 filename = (char *) alloca (n);
5029 strcpy (filename, name);
5031 strcat (filename, MODULE_EXTENSION);
5033 /* Name of the temporary file used to write the module. */
5034 filename_tmp = (char *) alloca (n + 1);
5035 strcpy (filename_tmp, filename);
5036 strcat (filename_tmp, "0");
5038 /* There was an error while processing the module. We delete the
5039 module file, even if it was already there. */
5046 /* Write the module to the temporary file. */
5047 module_fp = fopen (filename_tmp, "w");
5048 if (module_fp == NULL)
5049 gfc_fatal_error ("Can't open module file '%s' for writing at %C: %s",
5050 filename_tmp, strerror (errno));
5052 /* Write the header, including space reserved for the MD5 sum. */
5056 *strchr (p, '\n') = '\0';
5058 fprintf (module_fp, "GFORTRAN module version '%s' created from %s on %s\n"
5059 "MD5:", MOD_VERSION, gfc_source_file, p);
5060 fgetpos (module_fp, &md5_pos);
5061 fputs ("00000000000000000000000000000000 -- "
5062 "If you edit this, you'll get what you deserve.\n\n", module_fp);
5064 /* Initialize the MD5 context that will be used for output. */
5065 md5_init_ctx (&ctx);
5067 /* Write the module itself. */
5069 strcpy (module_name, name);
5075 free_pi_tree (pi_root);
5080 /* Write the MD5 sum to the header of the module file. */
5081 md5_finish_ctx (&ctx, md5_new);
5082 fsetpos (module_fp, &md5_pos);
5083 for (n = 0; n < 16; n++)
5084 fprintf (module_fp, "%02x", md5_new[n]);
5086 if (fclose (module_fp))
5087 gfc_fatal_error ("Error writing module file '%s' for writing: %s",
5088 filename_tmp, strerror (errno));
5090 /* Read the MD5 from the header of the old module file and compare. */
5091 if (read_md5_from_module_file (filename, md5_old) != 0
5092 || memcmp (md5_old, md5_new, sizeof (md5_old)) != 0)
5094 /* Module file have changed, replace the old one. */
5095 if (unlink (filename) && errno != ENOENT)
5096 gfc_fatal_error ("Can't delete module file '%s': %s", filename,
5098 if (rename (filename_tmp, filename))
5099 gfc_fatal_error ("Can't rename module file '%s' to '%s': %s",
5100 filename_tmp, filename, strerror (errno));
5104 if (unlink (filename_tmp))
5105 gfc_fatal_error ("Can't delete temporary module file '%s': %s",
5106 filename_tmp, strerror (errno));
5112 sort_iso_c_rename_list (void)
5114 gfc_use_rename *tmp_list = NULL;
5115 gfc_use_rename *curr;
5116 gfc_use_rename *kinds_used[ISOCBINDING_NUMBER] = {NULL};
5120 for (curr = gfc_rename_list; curr; curr = curr->next)
5122 c_kind = get_c_kind (curr->use_name, c_interop_kinds_table);
5123 if (c_kind == ISOCBINDING_INVALID || c_kind == ISOCBINDING_LAST)
5125 gfc_error ("Symbol '%s' referenced at %L does not exist in "
5126 "intrinsic module ISO_C_BINDING.", curr->use_name,
5130 /* Put it in the list. */
5131 kinds_used[c_kind] = curr;
5134 /* Make a new (sorted) rename list. */
5136 while (i < ISOCBINDING_NUMBER && kinds_used[i] == NULL)
5139 if (i < ISOCBINDING_NUMBER)
5141 tmp_list = kinds_used[i];
5145 for (; i < ISOCBINDING_NUMBER; i++)
5146 if (kinds_used[i] != NULL)
5148 curr->next = kinds_used[i];
5154 gfc_rename_list = tmp_list;
5158 /* Import the intrinsic ISO_C_BINDING module, generating symbols in
5159 the current namespace for all named constants, pointer types, and
5160 procedures in the module unless the only clause was used or a rename
5161 list was provided. */
5164 import_iso_c_binding_module (void)
5166 gfc_symbol *mod_sym = NULL;
5167 gfc_symtree *mod_symtree = NULL;
5168 const char *iso_c_module_name = "__iso_c_binding";
5173 /* Look only in the current namespace. */
5174 mod_symtree = gfc_find_symtree (gfc_current_ns->sym_root, iso_c_module_name);
5176 if (mod_symtree == NULL)
5178 /* symtree doesn't already exist in current namespace. */
5179 gfc_get_sym_tree (iso_c_module_name, gfc_current_ns, &mod_symtree,
5182 if (mod_symtree != NULL)
5183 mod_sym = mod_symtree->n.sym;
5185 gfc_internal_error ("import_iso_c_binding_module(): Unable to "
5186 "create symbol for %s", iso_c_module_name);
5188 mod_sym->attr.flavor = FL_MODULE;
5189 mod_sym->attr.intrinsic = 1;
5190 mod_sym->module = gfc_get_string (iso_c_module_name);
5191 mod_sym->from_intmod = INTMOD_ISO_C_BINDING;
5194 /* Generate the symbols for the named constants representing
5195 the kinds for intrinsic data types. */
5198 /* Sort the rename list because there are dependencies between types
5199 and procedures (e.g., c_loc needs c_ptr). */
5200 sort_iso_c_rename_list ();
5202 for (u = gfc_rename_list; u; u = u->next)
5204 i = get_c_kind (u->use_name, c_interop_kinds_table);
5206 if (i == ISOCBINDING_INVALID || i == ISOCBINDING_LAST)
5208 gfc_error ("Symbol '%s' referenced at %L does not exist in "
5209 "intrinsic module ISO_C_BINDING.", u->use_name,
5214 generate_isocbinding_symbol (iso_c_module_name,
5215 (iso_c_binding_symbol) i,
5221 for (i = 0; i < ISOCBINDING_NUMBER; i++)
5224 for (u = gfc_rename_list; u; u = u->next)
5226 if (strcmp (c_interop_kinds_table[i].name, u->use_name) == 0)
5228 local_name = u->local_name;
5233 generate_isocbinding_symbol (iso_c_module_name,
5234 (iso_c_binding_symbol) i,
5238 for (u = gfc_rename_list; u; u = u->next)
5243 gfc_error ("Symbol '%s' referenced at %L not found in intrinsic "
5244 "module ISO_C_BINDING", u->use_name, &u->where);
5250 /* Add an integer named constant from a given module. */
5253 create_int_parameter (const char *name, int value, const char *modname,
5254 intmod_id module, int id)
5256 gfc_symtree *tmp_symtree;
5259 tmp_symtree = gfc_find_symtree (gfc_current_ns->sym_root, name);
5260 if (tmp_symtree != NULL)
5262 if (strcmp (modname, tmp_symtree->n.sym->module) == 0)
5265 gfc_error ("Symbol '%s' already declared", name);
5268 gfc_get_sym_tree (name, gfc_current_ns, &tmp_symtree, false);
5269 sym = tmp_symtree->n.sym;
5271 sym->module = gfc_get_string (modname);
5272 sym->attr.flavor = FL_PARAMETER;
5273 sym->ts.type = BT_INTEGER;
5274 sym->ts.kind = gfc_default_integer_kind;
5275 sym->value = gfc_int_expr (value);
5276 sym->attr.use_assoc = 1;
5277 sym->from_intmod = module;
5278 sym->intmod_sym_id = id;
5282 /* USE the ISO_FORTRAN_ENV intrinsic module. */
5285 use_iso_fortran_env_module (void)
5287 static char mod[] = "iso_fortran_env";
5288 const char *local_name;
5290 gfc_symbol *mod_sym;
5291 gfc_symtree *mod_symtree;
5294 intmod_sym symbol[] = {
5295 #define NAMED_INTCST(a,b,c,d) { a, b, 0, d },
5296 #include "iso-fortran-env.def"
5298 { ISOFORTRANENV_INVALID, NULL, -1234, 0 } };
5301 #define NAMED_INTCST(a,b,c,d) symbol[i++].value = c;
5302 #include "iso-fortran-env.def"
5305 /* Generate the symbol for the module itself. */
5306 mod_symtree = gfc_find_symtree (gfc_current_ns->sym_root, mod);
5307 if (mod_symtree == NULL)
5309 gfc_get_sym_tree (mod, gfc_current_ns, &mod_symtree, false);
5310 gcc_assert (mod_symtree);
5311 mod_sym = mod_symtree->n.sym;
5313 mod_sym->attr.flavor = FL_MODULE;
5314 mod_sym->attr.intrinsic = 1;
5315 mod_sym->module = gfc_get_string (mod);
5316 mod_sym->from_intmod = INTMOD_ISO_FORTRAN_ENV;
5319 if (!mod_symtree->n.sym->attr.intrinsic)
5320 gfc_error ("Use of intrinsic module '%s' at %C conflicts with "
5321 "non-intrinsic module name used previously", mod);
5323 /* Generate the symbols for the module integer named constants. */
5325 for (u = gfc_rename_list; u; u = u->next)
5327 for (i = 0; symbol[i].name; i++)
5328 if (strcmp (symbol[i].name, u->use_name) == 0)
5331 if (symbol[i].name == NULL)
5333 gfc_error ("Symbol '%s' referenced at %L does not exist in "
5334 "intrinsic module ISO_FORTRAN_ENV", u->use_name,
5339 if ((gfc_option.flag_default_integer || gfc_option.flag_default_real)
5340 && symbol[i].id == ISOFORTRANENV_NUMERIC_STORAGE_SIZE)
5341 gfc_warning_now ("Use of the NUMERIC_STORAGE_SIZE named constant "
5342 "from intrinsic module ISO_FORTRAN_ENV at %L is "
5343 "incompatible with option %s", &u->where,
5344 gfc_option.flag_default_integer
5345 ? "-fdefault-integer-8" : "-fdefault-real-8");
5347 create_int_parameter (u->local_name[0] ? u->local_name
5349 symbol[i].value, mod, INTMOD_ISO_FORTRAN_ENV,
5354 for (i = 0; symbol[i].name; i++)
5357 for (u = gfc_rename_list; u; u = u->next)
5359 if (strcmp (symbol[i].name, u->use_name) == 0)
5361 local_name = u->local_name;
5367 if ((gfc_option.flag_default_integer || gfc_option.flag_default_real)
5368 && symbol[i].id == ISOFORTRANENV_NUMERIC_STORAGE_SIZE)
5369 gfc_warning_now ("Use of the NUMERIC_STORAGE_SIZE named constant "
5370 "from intrinsic module ISO_FORTRAN_ENV at %C is "
5371 "incompatible with option %s",
5372 gfc_option.flag_default_integer
5373 ? "-fdefault-integer-8" : "-fdefault-real-8");
5375 create_int_parameter (local_name ? local_name : symbol[i].name,
5376 symbol[i].value, mod, INTMOD_ISO_FORTRAN_ENV,
5380 for (u = gfc_rename_list; u; u = u->next)
5385 gfc_error ("Symbol '%s' referenced at %L not found in intrinsic "
5386 "module ISO_FORTRAN_ENV", u->use_name, &u->where);
5392 /* Process a USE directive. */
5395 gfc_use_module (void)
5400 gfc_symtree *mod_symtree;
5401 gfc_use_list *use_stmt;
5403 filename = (char *) alloca (strlen (module_name) + strlen (MODULE_EXTENSION)
5405 strcpy (filename, module_name);
5406 strcat (filename, MODULE_EXTENSION);
5408 /* First, try to find an non-intrinsic module, unless the USE statement
5409 specified that the module is intrinsic. */
5412 module_fp = gfc_open_included_file (filename, true, true);
5414 /* Then, see if it's an intrinsic one, unless the USE statement
5415 specified that the module is non-intrinsic. */
5416 if (module_fp == NULL && !specified_nonint)
5418 if (strcmp (module_name, "iso_fortran_env") == 0
5419 && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: ISO_FORTRAN_ENV "
5420 "intrinsic module at %C") != FAILURE)
5422 use_iso_fortran_env_module ();
5426 if (strcmp (module_name, "iso_c_binding") == 0
5427 && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: "
5428 "ISO_C_BINDING module at %C") != FAILURE)
5430 import_iso_c_binding_module();
5434 module_fp = gfc_open_intrinsic_module (filename);
5436 if (module_fp == NULL && specified_int)
5437 gfc_fatal_error ("Can't find an intrinsic module named '%s' at %C",
5441 if (module_fp == NULL)
5442 gfc_fatal_error ("Can't open module file '%s' for reading at %C: %s",
5443 filename, strerror (errno));
5445 /* Check that we haven't already USEd an intrinsic module with the
5448 mod_symtree = gfc_find_symtree (gfc_current_ns->sym_root, module_name);
5449 if (mod_symtree && mod_symtree->n.sym->attr.intrinsic)
5450 gfc_error ("Use of non-intrinsic module '%s' at %C conflicts with "
5451 "intrinsic module name used previously", module_name);
5458 /* Skip the first two lines of the module, after checking that this is
5459 a gfortran module file. */
5465 bad_module ("Unexpected end of module");
5468 if ((start == 1 && strcmp (atom_name, "GFORTRAN") != 0)
5469 || (start == 2 && strcmp (atom_name, " module") != 0))
5470 gfc_fatal_error ("File '%s' opened at %C is not a GFORTRAN module "
5474 if (strcmp (atom_name, " version") != 0
5475 || module_char () != ' '
5476 || parse_atom () != ATOM_STRING)
5477 gfc_fatal_error ("Parse error when checking module version"
5478 " for file '%s' opened at %C", filename);
5480 if (strcmp (atom_string, MOD_VERSION))
5482 gfc_fatal_error ("Wrong module version '%s' (expected '"
5483 MOD_VERSION "') for file '%s' opened"
5484 " at %C", atom_string, filename);
5492 /* Make sure we're not reading the same module that we may be building. */
5493 for (p = gfc_state_stack; p; p = p->previous)
5494 if (p->state == COMP_MODULE && strcmp (p->sym->name, module_name) == 0)
5495 gfc_fatal_error ("Can't USE the same module we're building!");
5498 init_true_name_tree ();
5502 free_true_name (true_name_root);
5503 true_name_root = NULL;
5505 free_pi_tree (pi_root);
5510 use_stmt = gfc_get_use_list ();
5511 use_stmt->module_name = gfc_get_string (module_name);
5512 use_stmt->only_flag = only_flag;
5513 use_stmt->rename = gfc_rename_list;
5514 use_stmt->where = use_locus;
5515 gfc_rename_list = NULL;
5516 use_stmt->next = gfc_current_ns->use_stmts;
5517 gfc_current_ns->use_stmts = use_stmt;
5522 gfc_free_use_stmts (gfc_use_list *use_stmts)
5525 for (; use_stmts; use_stmts = next)
5527 gfc_use_rename *next_rename;
5529 for (; use_stmts->rename; use_stmts->rename = next_rename)
5531 next_rename = use_stmts->rename->next;
5532 gfc_free (use_stmts->rename);
5534 next = use_stmts->next;
5535 gfc_free (use_stmts);
5541 gfc_module_init_2 (void)
5543 last_atom = ATOM_LPAREN;
5548 gfc_module_done_2 (void)