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 "0"
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 character pointer that points to a string on the heap. */
1467 mio_allocated_string (const char *s)
1469 if (iomode == IO_OUTPUT)
1471 write_atom (ATOM_STRING, s);
1476 require_atom (ATOM_STRING);
1482 /* Functions for quoting and unquoting strings. */
1485 quote_string (const gfc_char_t *s, const size_t slength)
1487 const gfc_char_t *p;
1491 /* Calculate the length we'll need: a backslash takes two ("\\"),
1492 non-printable characters take 10 ("\Uxxxxxxxx") and others take 1. */
1493 for (p = s, i = 0; i < slength; p++, i++)
1497 else if (!gfc_wide_is_printable (*p))
1503 q = res = XCNEWVEC (char, len + 1);
1504 for (p = s, i = 0; i < slength; p++, i++)
1507 *q++ = '\\', *q++ = '\\';
1508 else if (!gfc_wide_is_printable (*p))
1510 sprintf (q, "\\U%08" HOST_WIDE_INT_PRINT "x",
1511 (unsigned HOST_WIDE_INT) *p);
1515 *q++ = (unsigned char) *p;
1523 unquote_string (const char *s)
1529 for (p = s, len = 0; *p; p++, len++)
1536 else if (p[1] == 'U')
1537 p += 9; /* That is a "\U????????". */
1539 gfc_internal_error ("unquote_string(): got bad string");
1542 res = gfc_get_wide_string (len + 1);
1543 for (i = 0, p = s; i < len; i++, p++)
1548 res[i] = (unsigned char) *p;
1549 else if (p[1] == '\\')
1551 res[i] = (unsigned char) '\\';
1556 /* We read the 8-digits hexadecimal constant that follows. */
1561 gcc_assert (p[1] == 'U');
1562 for (j = 0; j < 8; j++)
1565 gcc_assert (sscanf (&p[j+2], "%01x", &n) == 1);
1579 /* Read or write a character pointer that points to a wide string on the
1580 heap, performing quoting/unquoting of nonprintable characters using the
1581 form \U???????? (where each ? is a hexadecimal digit).
1582 Length is the length of the string, only known and used in output mode. */
1584 static const gfc_char_t *
1585 mio_allocated_wide_string (const gfc_char_t *s, const size_t length)
1587 if (iomode == IO_OUTPUT)
1589 char *quoted = quote_string (s, length);
1590 write_atom (ATOM_STRING, quoted);
1596 gfc_char_t *unquoted;
1598 require_atom (ATOM_STRING);
1599 unquoted = unquote_string (atom_string);
1600 gfc_free (atom_string);
1606 /* Read or write a string that is in static memory. */
1609 mio_pool_string (const char **stringp)
1611 /* TODO: one could write the string only once, and refer to it via a
1614 /* As a special case we have to deal with a NULL string. This
1615 happens for the 'module' member of 'gfc_symbol's that are not in a
1616 module. We read / write these as the empty string. */
1617 if (iomode == IO_OUTPUT)
1619 const char *p = *stringp == NULL ? "" : *stringp;
1620 write_atom (ATOM_STRING, p);
1624 require_atom (ATOM_STRING);
1625 *stringp = atom_string[0] == '\0' ? NULL : gfc_get_string (atom_string);
1626 gfc_free (atom_string);
1631 /* Read or write a string that is inside of some already-allocated
1635 mio_internal_string (char *string)
1637 if (iomode == IO_OUTPUT)
1638 write_atom (ATOM_STRING, string);
1641 require_atom (ATOM_STRING);
1642 strcpy (string, atom_string);
1643 gfc_free (atom_string);
1649 { AB_ALLOCATABLE, AB_DIMENSION, AB_EXTERNAL, AB_INTRINSIC, AB_OPTIONAL,
1650 AB_POINTER, AB_TARGET, AB_DUMMY, AB_RESULT, AB_DATA,
1651 AB_IN_NAMELIST, AB_IN_COMMON, AB_FUNCTION, AB_SUBROUTINE, AB_SEQUENCE,
1652 AB_ELEMENTAL, AB_PURE, AB_RECURSIVE, AB_GENERIC, AB_ALWAYS_EXPLICIT,
1653 AB_CRAY_POINTER, AB_CRAY_POINTEE, AB_THREADPRIVATE, AB_ALLOC_COMP,
1654 AB_POINTER_COMP, AB_PRIVATE_COMP, AB_VALUE, AB_VOLATILE, AB_PROTECTED,
1655 AB_IS_BIND_C, AB_IS_C_INTEROP, AB_IS_ISO_C, AB_ABSTRACT, AB_ZERO_COMP,
1656 AB_EXTENSION, AB_PROCEDURE, AB_PROC_POINTER
1660 static const mstring attr_bits[] =
1662 minit ("ALLOCATABLE", AB_ALLOCATABLE),
1663 minit ("DIMENSION", AB_DIMENSION),
1664 minit ("EXTERNAL", AB_EXTERNAL),
1665 minit ("INTRINSIC", AB_INTRINSIC),
1666 minit ("OPTIONAL", AB_OPTIONAL),
1667 minit ("POINTER", AB_POINTER),
1668 minit ("VOLATILE", AB_VOLATILE),
1669 minit ("TARGET", AB_TARGET),
1670 minit ("THREADPRIVATE", AB_THREADPRIVATE),
1671 minit ("DUMMY", AB_DUMMY),
1672 minit ("RESULT", AB_RESULT),
1673 minit ("DATA", AB_DATA),
1674 minit ("IN_NAMELIST", AB_IN_NAMELIST),
1675 minit ("IN_COMMON", AB_IN_COMMON),
1676 minit ("FUNCTION", AB_FUNCTION),
1677 minit ("SUBROUTINE", AB_SUBROUTINE),
1678 minit ("SEQUENCE", AB_SEQUENCE),
1679 minit ("ELEMENTAL", AB_ELEMENTAL),
1680 minit ("PURE", AB_PURE),
1681 minit ("RECURSIVE", AB_RECURSIVE),
1682 minit ("GENERIC", AB_GENERIC),
1683 minit ("ALWAYS_EXPLICIT", AB_ALWAYS_EXPLICIT),
1684 minit ("CRAY_POINTER", AB_CRAY_POINTER),
1685 minit ("CRAY_POINTEE", AB_CRAY_POINTEE),
1686 minit ("IS_BIND_C", AB_IS_BIND_C),
1687 minit ("IS_C_INTEROP", AB_IS_C_INTEROP),
1688 minit ("IS_ISO_C", AB_IS_ISO_C),
1689 minit ("VALUE", AB_VALUE),
1690 minit ("ALLOC_COMP", AB_ALLOC_COMP),
1691 minit ("POINTER_COMP", AB_POINTER_COMP),
1692 minit ("PRIVATE_COMP", AB_PRIVATE_COMP),
1693 minit ("ZERO_COMP", AB_ZERO_COMP),
1694 minit ("PROTECTED", AB_PROTECTED),
1695 minit ("ABSTRACT", AB_ABSTRACT),
1696 minit ("EXTENSION", AB_EXTENSION),
1697 minit ("PROCEDURE", AB_PROCEDURE),
1698 minit ("PROC_POINTER", AB_PROC_POINTER),
1702 /* For binding attributes. */
1703 static const mstring binding_passing[] =
1706 minit ("NOPASS", 1),
1709 static const mstring binding_overriding[] =
1711 minit ("OVERRIDABLE", 0),
1712 minit ("NON_OVERRIDABLE", 1),
1713 minit ("DEFERRED", 2),
1716 static const mstring binding_generic[] =
1718 minit ("SPECIFIC", 0),
1719 minit ("GENERIC", 1),
1724 /* Specialization of mio_name. */
1725 DECL_MIO_NAME (ab_attribute)
1726 DECL_MIO_NAME (ar_type)
1727 DECL_MIO_NAME (array_type)
1729 DECL_MIO_NAME (expr_t)
1730 DECL_MIO_NAME (gfc_access)
1731 DECL_MIO_NAME (gfc_intrinsic_op)
1732 DECL_MIO_NAME (ifsrc)
1733 DECL_MIO_NAME (save_state)
1734 DECL_MIO_NAME (procedure_type)
1735 DECL_MIO_NAME (ref_type)
1736 DECL_MIO_NAME (sym_flavor)
1737 DECL_MIO_NAME (sym_intent)
1738 #undef DECL_MIO_NAME
1740 /* Symbol attributes are stored in list with the first three elements
1741 being the enumerated fields, while the remaining elements (if any)
1742 indicate the individual attribute bits. The access field is not
1743 saved-- it controls what symbols are exported when a module is
1747 mio_symbol_attribute (symbol_attribute *attr)
1753 attr->flavor = MIO_NAME (sym_flavor) (attr->flavor, flavors);
1754 attr->intent = MIO_NAME (sym_intent) (attr->intent, intents);
1755 attr->proc = MIO_NAME (procedure_type) (attr->proc, procedures);
1756 attr->if_source = MIO_NAME (ifsrc) (attr->if_source, ifsrc_types);
1757 attr->save = MIO_NAME (save_state) (attr->save, save_status);
1759 if (iomode == IO_OUTPUT)
1761 if (attr->allocatable)
1762 MIO_NAME (ab_attribute) (AB_ALLOCATABLE, attr_bits);
1763 if (attr->dimension)
1764 MIO_NAME (ab_attribute) (AB_DIMENSION, attr_bits);
1766 MIO_NAME (ab_attribute) (AB_EXTERNAL, attr_bits);
1767 if (attr->intrinsic)
1768 MIO_NAME (ab_attribute) (AB_INTRINSIC, attr_bits);
1770 MIO_NAME (ab_attribute) (AB_OPTIONAL, attr_bits);
1772 MIO_NAME (ab_attribute) (AB_POINTER, attr_bits);
1773 if (attr->is_protected)
1774 MIO_NAME (ab_attribute) (AB_PROTECTED, attr_bits);
1776 MIO_NAME (ab_attribute) (AB_VALUE, attr_bits);
1777 if (attr->volatile_)
1778 MIO_NAME (ab_attribute) (AB_VOLATILE, attr_bits);
1780 MIO_NAME (ab_attribute) (AB_TARGET, attr_bits);
1781 if (attr->threadprivate)
1782 MIO_NAME (ab_attribute) (AB_THREADPRIVATE, attr_bits);
1784 MIO_NAME (ab_attribute) (AB_DUMMY, attr_bits);
1786 MIO_NAME (ab_attribute) (AB_RESULT, attr_bits);
1787 /* We deliberately don't preserve the "entry" flag. */
1790 MIO_NAME (ab_attribute) (AB_DATA, attr_bits);
1791 if (attr->in_namelist)
1792 MIO_NAME (ab_attribute) (AB_IN_NAMELIST, attr_bits);
1793 if (attr->in_common)
1794 MIO_NAME (ab_attribute) (AB_IN_COMMON, attr_bits);
1797 MIO_NAME (ab_attribute) (AB_FUNCTION, attr_bits);
1798 if (attr->subroutine)
1799 MIO_NAME (ab_attribute) (AB_SUBROUTINE, attr_bits);
1801 MIO_NAME (ab_attribute) (AB_GENERIC, attr_bits);
1803 MIO_NAME (ab_attribute) (AB_ABSTRACT, attr_bits);
1806 MIO_NAME (ab_attribute) (AB_SEQUENCE, attr_bits);
1807 if (attr->elemental)
1808 MIO_NAME (ab_attribute) (AB_ELEMENTAL, attr_bits);
1810 MIO_NAME (ab_attribute) (AB_PURE, attr_bits);
1811 if (attr->recursive)
1812 MIO_NAME (ab_attribute) (AB_RECURSIVE, attr_bits);
1813 if (attr->always_explicit)
1814 MIO_NAME (ab_attribute) (AB_ALWAYS_EXPLICIT, attr_bits);
1815 if (attr->cray_pointer)
1816 MIO_NAME (ab_attribute) (AB_CRAY_POINTER, attr_bits);
1817 if (attr->cray_pointee)
1818 MIO_NAME (ab_attribute) (AB_CRAY_POINTEE, attr_bits);
1819 if (attr->is_bind_c)
1820 MIO_NAME(ab_attribute) (AB_IS_BIND_C, attr_bits);
1821 if (attr->is_c_interop)
1822 MIO_NAME(ab_attribute) (AB_IS_C_INTEROP, attr_bits);
1824 MIO_NAME(ab_attribute) (AB_IS_ISO_C, attr_bits);
1825 if (attr->alloc_comp)
1826 MIO_NAME (ab_attribute) (AB_ALLOC_COMP, attr_bits);
1827 if (attr->pointer_comp)
1828 MIO_NAME (ab_attribute) (AB_POINTER_COMP, attr_bits);
1829 if (attr->private_comp)
1830 MIO_NAME (ab_attribute) (AB_PRIVATE_COMP, attr_bits);
1831 if (attr->zero_comp)
1832 MIO_NAME (ab_attribute) (AB_ZERO_COMP, attr_bits);
1833 if (attr->extension)
1834 MIO_NAME (ab_attribute) (AB_EXTENSION, attr_bits);
1835 if (attr->procedure)
1836 MIO_NAME (ab_attribute) (AB_PROCEDURE, attr_bits);
1837 if (attr->proc_pointer)
1838 MIO_NAME (ab_attribute) (AB_PROC_POINTER, attr_bits);
1848 if (t == ATOM_RPAREN)
1851 bad_module ("Expected attribute bit name");
1853 switch ((ab_attribute) find_enum (attr_bits))
1855 case AB_ALLOCATABLE:
1856 attr->allocatable = 1;
1859 attr->dimension = 1;
1865 attr->intrinsic = 1;
1874 attr->is_protected = 1;
1880 attr->volatile_ = 1;
1885 case AB_THREADPRIVATE:
1886 attr->threadprivate = 1;
1897 case AB_IN_NAMELIST:
1898 attr->in_namelist = 1;
1901 attr->in_common = 1;
1907 attr->subroutine = 1;
1919 attr->elemental = 1;
1925 attr->recursive = 1;
1927 case AB_ALWAYS_EXPLICIT:
1928 attr->always_explicit = 1;
1930 case AB_CRAY_POINTER:
1931 attr->cray_pointer = 1;
1933 case AB_CRAY_POINTEE:
1934 attr->cray_pointee = 1;
1937 attr->is_bind_c = 1;
1939 case AB_IS_C_INTEROP:
1940 attr->is_c_interop = 1;
1946 attr->alloc_comp = 1;
1948 case AB_POINTER_COMP:
1949 attr->pointer_comp = 1;
1951 case AB_PRIVATE_COMP:
1952 attr->private_comp = 1;
1955 attr->zero_comp = 1;
1958 attr->extension = 1;
1961 attr->procedure = 1;
1963 case AB_PROC_POINTER:
1964 attr->proc_pointer = 1;
1972 static const mstring bt_types[] = {
1973 minit ("INTEGER", BT_INTEGER),
1974 minit ("REAL", BT_REAL),
1975 minit ("COMPLEX", BT_COMPLEX),
1976 minit ("LOGICAL", BT_LOGICAL),
1977 minit ("CHARACTER", BT_CHARACTER),
1978 minit ("DERIVED", BT_DERIVED),
1979 minit ("PROCEDURE", BT_PROCEDURE),
1980 minit ("UNKNOWN", BT_UNKNOWN),
1981 minit ("VOID", BT_VOID),
1987 mio_charlen (gfc_charlen **clp)
1993 if (iomode == IO_OUTPUT)
1997 mio_expr (&cl->length);
2001 if (peek_atom () != ATOM_RPAREN)
2003 cl = gfc_get_charlen ();
2004 mio_expr (&cl->length);
2008 cl->next = gfc_current_ns->cl_list;
2009 gfc_current_ns->cl_list = cl;
2017 /* See if a name is a generated name. */
2020 check_unique_name (const char *name)
2022 return *name == '@';
2027 mio_typespec (gfc_typespec *ts)
2031 ts->type = MIO_NAME (bt) (ts->type, bt_types);
2033 if (ts->type != BT_DERIVED)
2034 mio_integer (&ts->kind);
2036 mio_symbol_ref (&ts->derived);
2038 /* Add info for C interop and is_iso_c. */
2039 mio_integer (&ts->is_c_interop);
2040 mio_integer (&ts->is_iso_c);
2042 /* If the typespec is for an identifier either from iso_c_binding, or
2043 a constant that was initialized to an identifier from it, use the
2044 f90_type. Otherwise, use the ts->type, since it shouldn't matter. */
2046 ts->f90_type = MIO_NAME (bt) (ts->f90_type, bt_types);
2048 ts->f90_type = MIO_NAME (bt) (ts->type, bt_types);
2050 if (ts->type != BT_CHARACTER)
2052 /* ts->cl is only valid for BT_CHARACTER. */
2057 mio_charlen (&ts->cl);
2063 static const mstring array_spec_types[] = {
2064 minit ("EXPLICIT", AS_EXPLICIT),
2065 minit ("ASSUMED_SHAPE", AS_ASSUMED_SHAPE),
2066 minit ("DEFERRED", AS_DEFERRED),
2067 minit ("ASSUMED_SIZE", AS_ASSUMED_SIZE),
2073 mio_array_spec (gfc_array_spec **asp)
2080 if (iomode == IO_OUTPUT)
2088 if (peek_atom () == ATOM_RPAREN)
2094 *asp = as = gfc_get_array_spec ();
2097 mio_integer (&as->rank);
2098 as->type = MIO_NAME (array_type) (as->type, array_spec_types);
2100 for (i = 0; i < as->rank; i++)
2102 mio_expr (&as->lower[i]);
2103 mio_expr (&as->upper[i]);
2111 /* Given a pointer to an array reference structure (which lives in a
2112 gfc_ref structure), find the corresponding array specification
2113 structure. Storing the pointer in the ref structure doesn't quite
2114 work when loading from a module. Generating code for an array
2115 reference also needs more information than just the array spec. */
2117 static const mstring array_ref_types[] = {
2118 minit ("FULL", AR_FULL),
2119 minit ("ELEMENT", AR_ELEMENT),
2120 minit ("SECTION", AR_SECTION),
2126 mio_array_ref (gfc_array_ref *ar)
2131 ar->type = MIO_NAME (ar_type) (ar->type, array_ref_types);
2132 mio_integer (&ar->dimen);
2140 for (i = 0; i < ar->dimen; i++)
2141 mio_expr (&ar->start[i]);
2146 for (i = 0; i < ar->dimen; i++)
2148 mio_expr (&ar->start[i]);
2149 mio_expr (&ar->end[i]);
2150 mio_expr (&ar->stride[i]);
2156 gfc_internal_error ("mio_array_ref(): Unknown array ref");
2159 /* Unfortunately, ar->dimen_type is an anonymous enumerated type so
2160 we can't call mio_integer directly. Instead loop over each element
2161 and cast it to/from an integer. */
2162 if (iomode == IO_OUTPUT)
2164 for (i = 0; i < ar->dimen; i++)
2166 int tmp = (int)ar->dimen_type[i];
2167 write_atom (ATOM_INTEGER, &tmp);
2172 for (i = 0; i < ar->dimen; i++)
2174 require_atom (ATOM_INTEGER);
2175 ar->dimen_type[i] = (enum gfc_array_ref_dimen_type) atom_int;
2179 if (iomode == IO_INPUT)
2181 ar->where = gfc_current_locus;
2183 for (i = 0; i < ar->dimen; i++)
2184 ar->c_where[i] = gfc_current_locus;
2191 /* Saves or restores a pointer. The pointer is converted back and
2192 forth from an integer. We return the pointer_info pointer so that
2193 the caller can take additional action based on the pointer type. */
2195 static pointer_info *
2196 mio_pointer_ref (void *gp)
2200 if (iomode == IO_OUTPUT)
2202 p = get_pointer (*((char **) gp));
2203 write_atom (ATOM_INTEGER, &p->integer);
2207 require_atom (ATOM_INTEGER);
2208 p = add_fixup (atom_int, gp);
2215 /* Save and load references to components that occur within
2216 expressions. We have to describe these references by a number and
2217 by name. The number is necessary for forward references during
2218 reading, and the name is necessary if the symbol already exists in
2219 the namespace and is not loaded again. */
2222 mio_component_ref (gfc_component **cp, gfc_symbol *sym)
2224 char name[GFC_MAX_SYMBOL_LEN + 1];
2228 p = mio_pointer_ref (cp);
2229 if (p->type == P_UNKNOWN)
2230 p->type = P_COMPONENT;
2232 if (iomode == IO_OUTPUT)
2233 mio_pool_string (&(*cp)->name);
2236 mio_internal_string (name);
2238 /* It can happen that a component reference can be read before the
2239 associated derived type symbol has been loaded. Return now and
2240 wait for a later iteration of load_needed. */
2244 if (sym->components != NULL && p->u.pointer == NULL)
2246 /* Symbol already loaded, so search by name. */
2247 for (q = sym->components; q; q = q->next)
2248 if (strcmp (q->name, name) == 0)
2252 gfc_internal_error ("mio_component_ref(): Component not found");
2254 associate_integer_pointer (p, q);
2257 /* Make sure this symbol will eventually be loaded. */
2258 p = find_pointer2 (sym);
2259 if (p->u.rsym.state == UNUSED)
2260 p->u.rsym.state = NEEDED;
2266 mio_component (gfc_component *c)
2273 if (iomode == IO_OUTPUT)
2275 p = get_pointer (c);
2276 mio_integer (&p->integer);
2281 p = get_integer (n);
2282 associate_integer_pointer (p, c);
2285 if (p->type == P_UNKNOWN)
2286 p->type = P_COMPONENT;
2288 mio_pool_string (&c->name);
2289 mio_typespec (&c->ts);
2290 mio_array_spec (&c->as);
2292 mio_symbol_attribute (&c->attr);
2293 c->attr.access = MIO_NAME (gfc_access) (c->attr.access, access_types);
2295 mio_expr (&c->initializer);
2301 mio_component_list (gfc_component **cp)
2303 gfc_component *c, *tail;
2307 if (iomode == IO_OUTPUT)
2309 for (c = *cp; c; c = c->next)
2319 if (peek_atom () == ATOM_RPAREN)
2322 c = gfc_get_component ();
2339 mio_actual_arg (gfc_actual_arglist *a)
2342 mio_pool_string (&a->name);
2343 mio_expr (&a->expr);
2349 mio_actual_arglist (gfc_actual_arglist **ap)
2351 gfc_actual_arglist *a, *tail;
2355 if (iomode == IO_OUTPUT)
2357 for (a = *ap; a; a = a->next)
2367 if (peek_atom () != ATOM_LPAREN)
2370 a = gfc_get_actual_arglist ();
2386 /* Read and write formal argument lists. */
2389 mio_formal_arglist (gfc_symbol *sym)
2391 gfc_formal_arglist *f, *tail;
2395 if (iomode == IO_OUTPUT)
2397 for (f = sym->formal; f; f = f->next)
2398 mio_symbol_ref (&f->sym);
2402 sym->formal = tail = NULL;
2404 while (peek_atom () != ATOM_RPAREN)
2406 f = gfc_get_formal_arglist ();
2407 mio_symbol_ref (&f->sym);
2409 if (sym->formal == NULL)
2422 /* Save or restore a reference to a symbol node. */
2425 mio_symbol_ref (gfc_symbol **symp)
2429 p = mio_pointer_ref (symp);
2430 if (p->type == P_UNKNOWN)
2433 if (iomode == IO_OUTPUT)
2435 if (p->u.wsym.state == UNREFERENCED)
2436 p->u.wsym.state = NEEDS_WRITE;
2440 if (p->u.rsym.state == UNUSED)
2441 p->u.rsym.state = NEEDED;
2447 /* Save or restore a reference to a symtree node. */
2450 mio_symtree_ref (gfc_symtree **stp)
2455 if (iomode == IO_OUTPUT)
2456 mio_symbol_ref (&(*stp)->n.sym);
2459 require_atom (ATOM_INTEGER);
2460 p = get_integer (atom_int);
2462 /* An unused equivalence member; make a symbol and a symtree
2464 if (in_load_equiv && p->u.rsym.symtree == NULL)
2466 /* Since this is not used, it must have a unique name. */
2467 p->u.rsym.symtree = gfc_get_unique_symtree (gfc_current_ns);
2469 /* Make the symbol. */
2470 if (p->u.rsym.sym == NULL)
2472 p->u.rsym.sym = gfc_new_symbol (p->u.rsym.true_name,
2474 p->u.rsym.sym->module = gfc_get_string (p->u.rsym.module);
2477 p->u.rsym.symtree->n.sym = p->u.rsym.sym;
2478 p->u.rsym.symtree->n.sym->refs++;
2479 p->u.rsym.referenced = 1;
2481 /* If the symbol is PRIVATE and in COMMON, load_commons will
2482 generate a fixup symbol, which must be associated. */
2484 resolve_fixups (p->fixup, p->u.rsym.sym);
2488 if (p->type == P_UNKNOWN)
2491 if (p->u.rsym.state == UNUSED)
2492 p->u.rsym.state = NEEDED;
2494 if (p->u.rsym.symtree != NULL)
2496 *stp = p->u.rsym.symtree;
2500 f = XCNEW (fixup_t);
2502 f->next = p->u.rsym.stfixup;
2503 p->u.rsym.stfixup = f;
2505 f->pointer = (void **) stp;
2512 mio_iterator (gfc_iterator **ip)
2518 if (iomode == IO_OUTPUT)
2525 if (peek_atom () == ATOM_RPAREN)
2531 *ip = gfc_get_iterator ();
2536 mio_expr (&iter->var);
2537 mio_expr (&iter->start);
2538 mio_expr (&iter->end);
2539 mio_expr (&iter->step);
2547 mio_constructor (gfc_constructor **cp)
2549 gfc_constructor *c, *tail;
2553 if (iomode == IO_OUTPUT)
2555 for (c = *cp; c; c = c->next)
2558 mio_expr (&c->expr);
2559 mio_iterator (&c->iterator);
2568 while (peek_atom () != ATOM_RPAREN)
2570 c = gfc_get_constructor ();
2580 mio_expr (&c->expr);
2581 mio_iterator (&c->iterator);
2590 static const mstring ref_types[] = {
2591 minit ("ARRAY", REF_ARRAY),
2592 minit ("COMPONENT", REF_COMPONENT),
2593 minit ("SUBSTRING", REF_SUBSTRING),
2599 mio_ref (gfc_ref **rp)
2606 r->type = MIO_NAME (ref_type) (r->type, ref_types);
2611 mio_array_ref (&r->u.ar);
2615 mio_symbol_ref (&r->u.c.sym);
2616 mio_component_ref (&r->u.c.component, r->u.c.sym);
2620 mio_expr (&r->u.ss.start);
2621 mio_expr (&r->u.ss.end);
2622 mio_charlen (&r->u.ss.length);
2631 mio_ref_list (gfc_ref **rp)
2633 gfc_ref *ref, *head, *tail;
2637 if (iomode == IO_OUTPUT)
2639 for (ref = *rp; ref; ref = ref->next)
2646 while (peek_atom () != ATOM_RPAREN)
2649 head = tail = gfc_get_ref ();
2652 tail->next = gfc_get_ref ();
2666 /* Read and write an integer value. */
2669 mio_gmp_integer (mpz_t *integer)
2673 if (iomode == IO_INPUT)
2675 if (parse_atom () != ATOM_STRING)
2676 bad_module ("Expected integer string");
2678 mpz_init (*integer);
2679 if (mpz_set_str (*integer, atom_string, 10))
2680 bad_module ("Error converting integer");
2682 gfc_free (atom_string);
2686 p = mpz_get_str (NULL, 10, *integer);
2687 write_atom (ATOM_STRING, p);
2694 mio_gmp_real (mpfr_t *real)
2699 if (iomode == IO_INPUT)
2701 if (parse_atom () != ATOM_STRING)
2702 bad_module ("Expected real string");
2705 mpfr_set_str (*real, atom_string, 16, GFC_RND_MODE);
2706 gfc_free (atom_string);
2710 p = mpfr_get_str (NULL, &exponent, 16, 0, *real, GFC_RND_MODE);
2712 if (mpfr_nan_p (*real) || mpfr_inf_p (*real))
2714 write_atom (ATOM_STRING, p);
2719 atom_string = XCNEWVEC (char, strlen (p) + 20);
2721 sprintf (atom_string, "0.%s@%ld", p, exponent);
2723 /* Fix negative numbers. */
2724 if (atom_string[2] == '-')
2726 atom_string[0] = '-';
2727 atom_string[1] = '0';
2728 atom_string[2] = '.';
2731 write_atom (ATOM_STRING, atom_string);
2733 gfc_free (atom_string);
2739 /* Save and restore the shape of an array constructor. */
2742 mio_shape (mpz_t **pshape, int rank)
2748 /* A NULL shape is represented by (). */
2751 if (iomode == IO_OUTPUT)
2763 if (t == ATOM_RPAREN)
2770 shape = gfc_get_shape (rank);
2774 for (n = 0; n < rank; n++)
2775 mio_gmp_integer (&shape[n]);
2781 static const mstring expr_types[] = {
2782 minit ("OP", EXPR_OP),
2783 minit ("FUNCTION", EXPR_FUNCTION),
2784 minit ("CONSTANT", EXPR_CONSTANT),
2785 minit ("VARIABLE", EXPR_VARIABLE),
2786 minit ("SUBSTRING", EXPR_SUBSTRING),
2787 minit ("STRUCTURE", EXPR_STRUCTURE),
2788 minit ("ARRAY", EXPR_ARRAY),
2789 minit ("NULL", EXPR_NULL),
2790 minit ("COMPCALL", EXPR_COMPCALL),
2794 /* INTRINSIC_ASSIGN is missing because it is used as an index for
2795 generic operators, not in expressions. INTRINSIC_USER is also
2796 replaced by the correct function name by the time we see it. */
2798 static const mstring intrinsics[] =
2800 minit ("UPLUS", INTRINSIC_UPLUS),
2801 minit ("UMINUS", INTRINSIC_UMINUS),
2802 minit ("PLUS", INTRINSIC_PLUS),
2803 minit ("MINUS", INTRINSIC_MINUS),
2804 minit ("TIMES", INTRINSIC_TIMES),
2805 minit ("DIVIDE", INTRINSIC_DIVIDE),
2806 minit ("POWER", INTRINSIC_POWER),
2807 minit ("CONCAT", INTRINSIC_CONCAT),
2808 minit ("AND", INTRINSIC_AND),
2809 minit ("OR", INTRINSIC_OR),
2810 minit ("EQV", INTRINSIC_EQV),
2811 minit ("NEQV", INTRINSIC_NEQV),
2812 minit ("EQ_SIGN", INTRINSIC_EQ),
2813 minit ("EQ", INTRINSIC_EQ_OS),
2814 minit ("NE_SIGN", INTRINSIC_NE),
2815 minit ("NE", INTRINSIC_NE_OS),
2816 minit ("GT_SIGN", INTRINSIC_GT),
2817 minit ("GT", INTRINSIC_GT_OS),
2818 minit ("GE_SIGN", INTRINSIC_GE),
2819 minit ("GE", INTRINSIC_GE_OS),
2820 minit ("LT_SIGN", INTRINSIC_LT),
2821 minit ("LT", INTRINSIC_LT_OS),
2822 minit ("LE_SIGN", INTRINSIC_LE),
2823 minit ("LE", INTRINSIC_LE_OS),
2824 minit ("NOT", INTRINSIC_NOT),
2825 minit ("PARENTHESES", INTRINSIC_PARENTHESES),
2830 /* Remedy a couple of situations where the gfc_expr's can be defective. */
2833 fix_mio_expr (gfc_expr *e)
2835 gfc_symtree *ns_st = NULL;
2838 if (iomode != IO_OUTPUT)
2843 /* If this is a symtree for a symbol that came from a contained module
2844 namespace, it has a unique name and we should look in the current
2845 namespace to see if the required, non-contained symbol is available
2846 yet. If so, the latter should be written. */
2847 if (e->symtree->n.sym && check_unique_name (e->symtree->name))
2848 ns_st = gfc_find_symtree (gfc_current_ns->sym_root,
2849 e->symtree->n.sym->name);
2851 /* On the other hand, if the existing symbol is the module name or the
2852 new symbol is a dummy argument, do not do the promotion. */
2853 if (ns_st && ns_st->n.sym
2854 && ns_st->n.sym->attr.flavor != FL_MODULE
2855 && !e->symtree->n.sym->attr.dummy)
2858 else if (e->expr_type == EXPR_FUNCTION && e->value.function.name)
2860 /* In some circumstances, a function used in an initialization
2861 expression, in one use associated module, can fail to be
2862 coupled to its symtree when used in a specification
2863 expression in another module. */
2864 fname = e->value.function.esym ? e->value.function.esym->name
2865 : e->value.function.isym->name;
2866 e->symtree = gfc_find_symtree (gfc_current_ns->sym_root, fname);
2871 /* Read and write expressions. The form "()" is allowed to indicate a
2875 mio_expr (gfc_expr **ep)
2883 if (iomode == IO_OUTPUT)
2892 MIO_NAME (expr_t) (e->expr_type, expr_types);
2897 if (t == ATOM_RPAREN)
2904 bad_module ("Expected expression type");
2906 e = *ep = gfc_get_expr ();
2907 e->where = gfc_current_locus;
2908 e->expr_type = (expr_t) find_enum (expr_types);
2911 mio_typespec (&e->ts);
2912 mio_integer (&e->rank);
2916 switch (e->expr_type)
2920 = MIO_NAME (gfc_intrinsic_op) (e->value.op.op, intrinsics);
2922 switch (e->value.op.op)
2924 case INTRINSIC_UPLUS:
2925 case INTRINSIC_UMINUS:
2927 case INTRINSIC_PARENTHESES:
2928 mio_expr (&e->value.op.op1);
2931 case INTRINSIC_PLUS:
2932 case INTRINSIC_MINUS:
2933 case INTRINSIC_TIMES:
2934 case INTRINSIC_DIVIDE:
2935 case INTRINSIC_POWER:
2936 case INTRINSIC_CONCAT:
2940 case INTRINSIC_NEQV:
2942 case INTRINSIC_EQ_OS:
2944 case INTRINSIC_NE_OS:
2946 case INTRINSIC_GT_OS:
2948 case INTRINSIC_GE_OS:
2950 case INTRINSIC_LT_OS:
2952 case INTRINSIC_LE_OS:
2953 mio_expr (&e->value.op.op1);
2954 mio_expr (&e->value.op.op2);
2958 bad_module ("Bad operator");
2964 mio_symtree_ref (&e->symtree);
2965 mio_actual_arglist (&e->value.function.actual);
2967 if (iomode == IO_OUTPUT)
2969 e->value.function.name
2970 = mio_allocated_string (e->value.function.name);
2971 flag = e->value.function.esym != NULL;
2972 mio_integer (&flag);
2974 mio_symbol_ref (&e->value.function.esym);
2976 write_atom (ATOM_STRING, e->value.function.isym->name);
2980 require_atom (ATOM_STRING);
2981 e->value.function.name = gfc_get_string (atom_string);
2982 gfc_free (atom_string);
2984 mio_integer (&flag);
2986 mio_symbol_ref (&e->value.function.esym);
2989 require_atom (ATOM_STRING);
2990 e->value.function.isym = gfc_find_function (atom_string);
2991 gfc_free (atom_string);
2998 mio_symtree_ref (&e->symtree);
2999 mio_ref_list (&e->ref);
3002 case EXPR_SUBSTRING:
3003 e->value.character.string
3004 = CONST_CAST (gfc_char_t *,
3005 mio_allocated_wide_string (e->value.character.string,
3006 e->value.character.length));
3007 mio_ref_list (&e->ref);
3010 case EXPR_STRUCTURE:
3012 mio_constructor (&e->value.constructor);
3013 mio_shape (&e->shape, e->rank);
3020 mio_gmp_integer (&e->value.integer);
3024 gfc_set_model_kind (e->ts.kind);
3025 mio_gmp_real (&e->value.real);
3029 gfc_set_model_kind (e->ts.kind);
3030 mio_gmp_real (&e->value.complex.r);
3031 mio_gmp_real (&e->value.complex.i);
3035 mio_integer (&e->value.logical);
3039 mio_integer (&e->value.character.length);
3040 e->value.character.string
3041 = CONST_CAST (gfc_char_t *,
3042 mio_allocated_wide_string (e->value.character.string,
3043 e->value.character.length));
3047 bad_module ("Bad type in constant expression");
3065 /* Read and write namelists. */
3068 mio_namelist (gfc_symbol *sym)
3070 gfc_namelist *n, *m;
3071 const char *check_name;
3075 if (iomode == IO_OUTPUT)
3077 for (n = sym->namelist; n; n = n->next)
3078 mio_symbol_ref (&n->sym);
3082 /* This departure from the standard is flagged as an error.
3083 It does, in fact, work correctly. TODO: Allow it
3085 if (sym->attr.flavor == FL_NAMELIST)
3087 check_name = find_use_name (sym->name, false);
3088 if (check_name && strcmp (check_name, sym->name) != 0)
3089 gfc_error ("Namelist %s cannot be renamed by USE "
3090 "association to %s", sym->name, check_name);
3094 while (peek_atom () != ATOM_RPAREN)
3096 n = gfc_get_namelist ();
3097 mio_symbol_ref (&n->sym);
3099 if (sym->namelist == NULL)
3106 sym->namelist_tail = m;
3113 /* Save/restore lists of gfc_interface structures. When loading an
3114 interface, we are really appending to the existing list of
3115 interfaces. Checking for duplicate and ambiguous interfaces has to
3116 be done later when all symbols have been loaded. */
3119 mio_interface_rest (gfc_interface **ip)
3121 gfc_interface *tail, *p;
3122 pointer_info *pi = NULL;
3124 if (iomode == IO_OUTPUT)
3127 for (p = *ip; p; p = p->next)
3128 mio_symbol_ref (&p->sym);
3143 if (peek_atom () == ATOM_RPAREN)
3146 p = gfc_get_interface ();
3147 p->where = gfc_current_locus;
3148 pi = mio_symbol_ref (&p->sym);
3164 /* Save/restore a nameless operator interface. */
3167 mio_interface (gfc_interface **ip)
3170 mio_interface_rest (ip);
3174 /* Save/restore a named operator interface. */
3177 mio_symbol_interface (const char **name, const char **module,
3181 mio_pool_string (name);
3182 mio_pool_string (module);
3183 mio_interface_rest (ip);
3188 mio_namespace_ref (gfc_namespace **nsp)
3193 p = mio_pointer_ref (nsp);
3195 if (p->type == P_UNKNOWN)
3196 p->type = P_NAMESPACE;
3198 if (iomode == IO_INPUT && p->integer != 0)
3200 ns = (gfc_namespace *) p->u.pointer;
3203 ns = gfc_get_namespace (NULL, 0);
3204 associate_integer_pointer (p, ns);
3212 /* Save/restore the f2k_derived namespace of a derived-type symbol. */
3214 static gfc_namespace* current_f2k_derived;
3217 mio_typebound_proc (gfc_typebound_proc** proc)
3220 int overriding_flag;
3222 if (iomode == IO_INPUT)
3224 *proc = gfc_get_typebound_proc ();
3225 (*proc)->where = gfc_current_locus;
3231 (*proc)->access = MIO_NAME (gfc_access) ((*proc)->access, access_types);
3233 /* IO the NON_OVERRIDABLE/DEFERRED combination. */
3234 gcc_assert (!((*proc)->deferred && (*proc)->non_overridable));
3235 overriding_flag = ((*proc)->deferred << 1) | (*proc)->non_overridable;
3236 overriding_flag = mio_name (overriding_flag, binding_overriding);
3237 (*proc)->deferred = ((overriding_flag & 2) != 0);
3238 (*proc)->non_overridable = ((overriding_flag & 1) != 0);
3239 gcc_assert (!((*proc)->deferred && (*proc)->non_overridable));
3241 (*proc)->nopass = mio_name ((*proc)->nopass, binding_passing);
3242 (*proc)->is_generic = mio_name ((*proc)->is_generic, binding_generic);
3244 if (iomode == IO_INPUT)
3245 (*proc)->pass_arg = NULL;
3247 flag = (int) (*proc)->pass_arg_num;
3248 mio_integer (&flag);
3249 (*proc)->pass_arg_num = (unsigned) flag;
3251 if ((*proc)->is_generic)
3257 if (iomode == IO_OUTPUT)
3258 for (g = (*proc)->u.generic; g; g = g->next)
3259 mio_allocated_string (g->specific_st->name);
3262 (*proc)->u.generic = NULL;
3263 while (peek_atom () != ATOM_RPAREN)
3265 gfc_symtree** sym_root;
3267 g = gfc_get_tbp_generic ();
3270 require_atom (ATOM_STRING);
3271 sym_root = ¤t_f2k_derived->tb_sym_root;
3272 g->specific_st = gfc_get_tbp_symtree (sym_root, atom_string);
3273 gfc_free (atom_string);
3275 g->next = (*proc)->u.generic;
3276 (*proc)->u.generic = g;
3283 mio_symtree_ref (&(*proc)->u.specific);
3289 mio_typebound_symtree (gfc_symtree* st)
3291 if (iomode == IO_OUTPUT && !st->n.tb)
3294 if (iomode == IO_OUTPUT)
3297 mio_allocated_string (st->name);
3299 /* For IO_INPUT, the above is done in mio_f2k_derived. */
3301 mio_typebound_proc (&st->n.tb);
3306 mio_finalizer (gfc_finalizer **f)
3308 if (iomode == IO_OUTPUT)
3311 gcc_assert ((*f)->proc_tree); /* Should already be resolved. */
3312 mio_symtree_ref (&(*f)->proc_tree);
3316 *f = gfc_get_finalizer ();
3317 (*f)->where = gfc_current_locus; /* Value should not matter. */
3320 mio_symtree_ref (&(*f)->proc_tree);
3321 (*f)->proc_sym = NULL;
3326 mio_f2k_derived (gfc_namespace *f2k)
3328 current_f2k_derived = f2k;
3330 /* Handle the list of finalizer procedures. */
3332 if (iomode == IO_OUTPUT)
3335 for (f = f2k->finalizers; f; f = f->next)
3340 f2k->finalizers = NULL;
3341 while (peek_atom () != ATOM_RPAREN)
3344 mio_finalizer (&cur);
3345 cur->next = f2k->finalizers;
3346 f2k->finalizers = cur;
3351 /* Handle type-bound procedures. */
3353 if (iomode == IO_OUTPUT)
3354 gfc_traverse_symtree (f2k->tb_sym_root, &mio_typebound_symtree);
3357 while (peek_atom () == ATOM_LPAREN)
3363 require_atom (ATOM_STRING);
3364 st = gfc_get_tbp_symtree (&f2k->tb_sym_root, atom_string);
3365 gfc_free (atom_string);
3367 mio_typebound_symtree (st);
3374 mio_full_f2k_derived (gfc_symbol *sym)
3378 if (iomode == IO_OUTPUT)
3380 if (sym->f2k_derived)
3381 mio_f2k_derived (sym->f2k_derived);
3385 if (peek_atom () != ATOM_RPAREN)
3387 sym->f2k_derived = gfc_get_namespace (NULL, 0);
3388 mio_f2k_derived (sym->f2k_derived);
3391 gcc_assert (!sym->f2k_derived);
3398 /* Unlike most other routines, the address of the symbol node is already
3399 fixed on input and the name/module has already been filled in. */
3402 mio_symbol (gfc_symbol *sym)
3404 int intmod = INTMOD_NONE;
3406 gfc_formal_arglist *formal;
3410 mio_symbol_attribute (&sym->attr);
3411 mio_typespec (&sym->ts);
3413 /* Contained procedures don't have formal namespaces. Instead we output the
3414 procedure namespace. The will contain the formal arguments. */
3415 if (iomode == IO_OUTPUT)
3417 formal = sym->formal;
3418 while (formal && !formal->sym)
3419 formal = formal->next;
3422 mio_namespace_ref (&formal->sym->ns);
3424 mio_namespace_ref (&sym->formal_ns);
3428 mio_namespace_ref (&sym->formal_ns);
3431 sym->formal_ns->proc_name = sym;
3436 /* Save/restore common block links. */
3437 mio_symbol_ref (&sym->common_next);
3439 mio_formal_arglist (sym);
3441 if (sym->attr.flavor == FL_PARAMETER)
3442 mio_expr (&sym->value);
3444 mio_array_spec (&sym->as);
3446 mio_symbol_ref (&sym->result);
3448 if (sym->attr.cray_pointee)
3449 mio_symbol_ref (&sym->cp_pointer);
3451 /* Note that components are always saved, even if they are supposed
3452 to be private. Component access is checked during searching. */
3454 mio_component_list (&sym->components);
3456 if (sym->components != NULL)
3457 sym->component_access
3458 = MIO_NAME (gfc_access) (sym->component_access, access_types);
3460 /* Load/save the f2k_derived namespace of a derived-type symbol. */
3461 mio_full_f2k_derived (sym);
3465 /* Add the fields that say whether this is from an intrinsic module,
3466 and if so, what symbol it is within the module. */
3467 /* mio_integer (&(sym->from_intmod)); */
3468 if (iomode == IO_OUTPUT)
3470 intmod = sym->from_intmod;
3471 mio_integer (&intmod);
3475 mio_integer (&intmod);
3476 sym->from_intmod = (intmod_id) intmod;
3479 mio_integer (&(sym->intmod_sym_id));
3485 /************************* Top level subroutines *************************/
3487 /* Given a root symtree node and a symbol, try to find a symtree that
3488 references the symbol that is not a unique name. */
3490 static gfc_symtree *
3491 find_symtree_for_symbol (gfc_symtree *st, gfc_symbol *sym)
3493 gfc_symtree *s = NULL;
3498 s = find_symtree_for_symbol (st->right, sym);
3501 s = find_symtree_for_symbol (st->left, sym);
3505 if (st->n.sym == sym && !check_unique_name (st->name))
3512 /* A recursive function to look for a specific symbol by name and by
3513 module. Whilst several symtrees might point to one symbol, its
3514 is sufficient for the purposes here than one exist. Note that
3515 generic interfaces are distinguished as are symbols that have been
3516 renamed in another module. */
3517 static gfc_symtree *
3518 find_symbol (gfc_symtree *st, const char *name,
3519 const char *module, int generic)
3522 gfc_symtree *retval, *s;
3524 if (st == NULL || st->n.sym == NULL)
3527 c = strcmp (name, st->n.sym->name);
3528 if (c == 0 && st->n.sym->module
3529 && strcmp (module, st->n.sym->module) == 0
3530 && !check_unique_name (st->name))
3532 s = gfc_find_symtree (gfc_current_ns->sym_root, name);
3534 /* Detect symbols that are renamed by use association in another
3535 module by the absence of a symtree and null attr.use_rename,
3536 since the latter is not transmitted in the module file. */
3537 if (((!generic && !st->n.sym->attr.generic)
3538 || (generic && st->n.sym->attr.generic))
3539 && !(s == NULL && !st->n.sym->attr.use_rename))
3543 retval = find_symbol (st->left, name, module, generic);
3546 retval = find_symbol (st->right, name, module, generic);
3552 /* Skip a list between balanced left and right parens. */
3562 switch (parse_atom ())
3573 gfc_free (atom_string);
3585 /* Load operator interfaces from the module. Interfaces are unusual
3586 in that they attach themselves to existing symbols. */
3589 load_operator_interfaces (void)
3592 char name[GFC_MAX_SYMBOL_LEN + 1], module[GFC_MAX_SYMBOL_LEN + 1];
3594 pointer_info *pi = NULL;
3599 while (peek_atom () != ATOM_RPAREN)
3603 mio_internal_string (name);
3604 mio_internal_string (module);
3606 n = number_use_names (name, true);
3609 for (i = 1; i <= n; i++)
3611 /* Decide if we need to load this one or not. */
3612 p = find_use_name_n (name, &i, true);
3616 while (parse_atom () != ATOM_RPAREN);
3622 uop = gfc_get_uop (p);
3623 pi = mio_interface_rest (&uop->op);
3627 if (gfc_find_uop (p, NULL))
3629 uop = gfc_get_uop (p);
3630 uop->op = gfc_get_interface ();
3631 uop->op->where = gfc_current_locus;
3632 add_fixup (pi->integer, &uop->op->sym);
3641 /* Load interfaces from the module. Interfaces are unusual in that
3642 they attach themselves to existing symbols. */
3645 load_generic_interfaces (void)
3648 char name[GFC_MAX_SYMBOL_LEN + 1], module[GFC_MAX_SYMBOL_LEN + 1];
3650 gfc_interface *generic = NULL;
3655 while (peek_atom () != ATOM_RPAREN)
3659 mio_internal_string (name);
3660 mio_internal_string (module);
3662 n = number_use_names (name, false);
3663 renamed = n ? 1 : 0;
3666 for (i = 1; i <= n; i++)
3669 /* Decide if we need to load this one or not. */
3670 p = find_use_name_n (name, &i, false);
3672 st = find_symbol (gfc_current_ns->sym_root,
3673 name, module_name, 1);
3675 if (!p || gfc_find_symbol (p, NULL, 0, &sym))
3677 /* Skip the specific names for these cases. */
3678 while (i == 1 && parse_atom () != ATOM_RPAREN);
3683 /* If the symbol exists already and is being USEd without being
3684 in an ONLY clause, do not load a new symtree(11.3.2). */
3685 if (!only_flag && st)
3690 /* Make the symbol inaccessible if it has been added by a USE
3691 statement without an ONLY(11.3.2). */
3693 && !st->n.sym->attr.use_only
3694 && !st->n.sym->attr.use_rename
3695 && strcmp (st->n.sym->module, module_name) == 0)
3698 gfc_delete_symtree (&gfc_current_ns->sym_root, name);
3699 st = gfc_get_unique_symtree (gfc_current_ns);
3706 if (strcmp (st->name, p) != 0)
3708 st = gfc_new_symtree (&gfc_current_ns->sym_root, p);
3714 /* Since we haven't found a valid generic interface, we had
3718 gfc_get_symbol (p, NULL, &sym);
3719 sym->name = gfc_get_string (name);
3720 sym->module = gfc_get_string (module_name);
3721 sym->attr.flavor = FL_PROCEDURE;
3722 sym->attr.generic = 1;
3723 sym->attr.use_assoc = 1;
3728 /* Unless sym is a generic interface, this reference
3731 st = gfc_find_symtree (gfc_current_ns->sym_root, p);
3735 if (st && !sym->attr.generic
3737 && strcmp(module, sym->module))
3741 sym->attr.use_only = only_flag;
3742 sym->attr.use_rename = renamed;
3746 mio_interface_rest (&sym->generic);
3747 generic = sym->generic;
3749 else if (!sym->generic)
3751 sym->generic = generic;
3752 sym->attr.generic_copy = 1;
3761 /* Load common blocks. */
3766 char name[GFC_MAX_SYMBOL_LEN + 1];
3771 while (peek_atom () != ATOM_RPAREN)
3775 mio_internal_string (name);
3777 p = gfc_get_common (name, 1);
3779 mio_symbol_ref (&p->head);
3780 mio_integer (&flags);
3784 p->threadprivate = 1;
3787 /* Get whether this was a bind(c) common or not. */
3788 mio_integer (&p->is_bind_c);
3789 /* Get the binding label. */
3790 mio_internal_string (p->binding_label);
3799 /* Load equivalences. The flag in_load_equiv informs mio_expr_ref of this
3800 so that unused variables are not loaded and so that the expression can
3806 gfc_equiv *head, *tail, *end, *eq;
3810 in_load_equiv = true;
3812 end = gfc_current_ns->equiv;
3813 while (end != NULL && end->next != NULL)
3816 while (peek_atom () != ATOM_RPAREN) {
3820 while(peek_atom () != ATOM_RPAREN)
3823 head = tail = gfc_get_equiv ();
3826 tail->eq = gfc_get_equiv ();
3830 mio_pool_string (&tail->module);
3831 mio_expr (&tail->expr);
3834 /* Unused equivalence members have a unique name. In addition, it
3835 must be checked that the symbols are from the same module. */
3837 for (eq = head; eq; eq = eq->eq)
3839 if (eq->expr->symtree->n.sym->module
3840 && head->expr->symtree->n.sym->module
3841 && strcmp (head->expr->symtree->n.sym->module,
3842 eq->expr->symtree->n.sym->module) == 0
3843 && !check_unique_name (eq->expr->symtree->name))
3852 for (eq = head; eq; eq = head)
3855 gfc_free_expr (eq->expr);
3861 gfc_current_ns->equiv = head;
3872 in_load_equiv = false;
3876 /* Recursive function to traverse the pointer_info tree and load a
3877 needed symbol. We return nonzero if we load a symbol and stop the
3878 traversal, because the act of loading can alter the tree. */
3881 load_needed (pointer_info *p)
3892 rv |= load_needed (p->left);
3893 rv |= load_needed (p->right);
3895 if (p->type != P_SYMBOL || p->u.rsym.state != NEEDED)
3898 p->u.rsym.state = USED;
3900 set_module_locus (&p->u.rsym.where);
3902 sym = p->u.rsym.sym;
3905 q = get_integer (p->u.rsym.ns);
3907 ns = (gfc_namespace *) q->u.pointer;
3910 /* Create an interface namespace if necessary. These are
3911 the namespaces that hold the formal parameters of module
3914 ns = gfc_get_namespace (NULL, 0);
3915 associate_integer_pointer (q, ns);
3918 /* Use the module sym as 'proc_name' so that gfc_get_symbol_decl
3919 doesn't go pear-shaped if the symbol is used. */
3921 gfc_find_symbol (p->u.rsym.module, gfc_current_ns,
3924 sym = gfc_new_symbol (p->u.rsym.true_name, ns);
3925 sym->module = gfc_get_string (p->u.rsym.module);
3926 strcpy (sym->binding_label, p->u.rsym.binding_label);
3928 associate_integer_pointer (p, sym);
3932 sym->attr.use_assoc = 1;
3934 sym->attr.use_only = 1;
3935 if (p->u.rsym.renamed)
3936 sym->attr.use_rename = 1;
3942 /* Recursive function for cleaning up things after a module has been read. */
3945 read_cleanup (pointer_info *p)
3953 read_cleanup (p->left);
3954 read_cleanup (p->right);
3956 if (p->type == P_SYMBOL && p->u.rsym.state == USED && !p->u.rsym.referenced)
3958 /* Add hidden symbols to the symtree. */
3959 q = get_integer (p->u.rsym.ns);
3960 st = gfc_get_unique_symtree ((gfc_namespace *) q->u.pointer);
3962 st->n.sym = p->u.rsym.sym;
3965 /* Fixup any symtree references. */
3966 p->u.rsym.symtree = st;
3967 resolve_fixups (p->u.rsym.stfixup, st);
3968 p->u.rsym.stfixup = NULL;
3971 /* Free unused symbols. */
3972 if (p->type == P_SYMBOL && p->u.rsym.state == UNUSED)
3973 gfc_free_symbol (p->u.rsym.sym);
3977 /* It is not quite enough to check for ambiguity in the symbols by
3978 the loaded symbol and the new symbol not being identical. */
3980 check_for_ambiguous (gfc_symbol *st_sym, pointer_info *info)
3984 symbol_attribute attr;
3986 rsym = info->u.rsym.sym;
3990 /* If the existing symbol is generic from a different module and
3991 the new symbol is generic there can be no ambiguity. */
3992 if (st_sym->attr.generic
3994 && strcmp (st_sym->module, module_name))
3996 /* The new symbol's attributes have not yet been read. Since
3997 we need attr.generic, read it directly. */
3998 get_module_locus (&locus);
3999 set_module_locus (&info->u.rsym.where);
4002 mio_symbol_attribute (&attr);
4003 set_module_locus (&locus);
4012 /* Read a module file. */
4017 module_locus operator_interfaces, user_operators;
4019 char name[GFC_MAX_SYMBOL_LEN + 1];
4021 int ambiguous, j, nuse, symbol;
4022 pointer_info *info, *q;
4027 get_module_locus (&operator_interfaces); /* Skip these for now. */
4030 get_module_locus (&user_operators);
4034 /* Skip commons and equivalences for now. */
4040 /* Create the fixup nodes for all the symbols. */
4042 while (peek_atom () != ATOM_RPAREN)
4044 require_atom (ATOM_INTEGER);
4045 info = get_integer (atom_int);
4047 info->type = P_SYMBOL;
4048 info->u.rsym.state = UNUSED;
4050 mio_internal_string (info->u.rsym.true_name);
4051 mio_internal_string (info->u.rsym.module);
4052 mio_internal_string (info->u.rsym.binding_label);
4055 require_atom (ATOM_INTEGER);
4056 info->u.rsym.ns = atom_int;
4058 get_module_locus (&info->u.rsym.where);
4061 /* See if the symbol has already been loaded by a previous module.
4062 If so, we reference the existing symbol and prevent it from
4063 being loaded again. This should not happen if the symbol being
4064 read is an index for an assumed shape dummy array (ns != 1). */
4066 sym = find_true_name (info->u.rsym.true_name, info->u.rsym.module);
4069 || (sym->attr.flavor == FL_VARIABLE && info->u.rsym.ns !=1))
4072 info->u.rsym.state = USED;
4073 info->u.rsym.sym = sym;
4075 /* Some symbols do not have a namespace (eg. formal arguments),
4076 so the automatic "unique symtree" mechanism must be suppressed
4077 by marking them as referenced. */
4078 q = get_integer (info->u.rsym.ns);
4079 if (q->u.pointer == NULL)
4081 info->u.rsym.referenced = 1;
4085 /* If possible recycle the symtree that references the symbol.
4086 If a symtree is not found and the module does not import one,
4087 a unique-name symtree is found by read_cleanup. */
4088 st = find_symtree_for_symbol (gfc_current_ns->sym_root, sym);
4091 info->u.rsym.symtree = st;
4092 info->u.rsym.referenced = 1;
4098 /* Parse the symtree lists. This lets us mark which symbols need to
4099 be loaded. Renaming is also done at this point by replacing the
4104 while (peek_atom () != ATOM_RPAREN)
4106 mio_internal_string (name);
4107 mio_integer (&ambiguous);
4108 mio_integer (&symbol);
4110 info = get_integer (symbol);
4112 /* See how many use names there are. If none, go through the start
4113 of the loop at least once. */
4114 nuse = number_use_names (name, false);
4115 info->u.rsym.renamed = nuse ? 1 : 0;
4120 for (j = 1; j <= nuse; j++)
4122 /* Get the jth local name for this symbol. */
4123 p = find_use_name_n (name, &j, false);
4125 if (p == NULL && strcmp (name, module_name) == 0)
4128 /* Skip symtree nodes not in an ONLY clause, unless there
4129 is an existing symtree loaded from another USE statement. */
4132 st = gfc_find_symtree (gfc_current_ns->sym_root, name);
4134 info->u.rsym.symtree = st;
4138 /* If a symbol of the same name and module exists already,
4139 this symbol, which is not in an ONLY clause, must not be
4140 added to the namespace(11.3.2). Note that find_symbol
4141 only returns the first occurrence that it finds. */
4142 if (!only_flag && !info->u.rsym.renamed
4143 && strcmp (name, module_name) != 0
4144 && find_symbol (gfc_current_ns->sym_root, name,
4148 st = gfc_find_symtree (gfc_current_ns->sym_root, p);
4152 /* Check for ambiguous symbols. */
4153 if (check_for_ambiguous (st->n.sym, info))
4155 info->u.rsym.symtree = st;
4159 st = gfc_find_symtree (gfc_current_ns->sym_root, name);
4161 /* Delete the symtree if the symbol has been added by a USE
4162 statement without an ONLY(11.3.2). Remember that the rsym
4163 will be the same as the symbol found in the symtree, for
4165 if (st && (only_flag || info->u.rsym.renamed)
4166 && !st->n.sym->attr.use_only
4167 && !st->n.sym->attr.use_rename
4168 && info->u.rsym.sym == st->n.sym)
4169 gfc_delete_symtree (&gfc_current_ns->sym_root, name);
4171 /* Create a symtree node in the current namespace for this
4173 st = check_unique_name (p)
4174 ? gfc_get_unique_symtree (gfc_current_ns)
4175 : gfc_new_symtree (&gfc_current_ns->sym_root, p);
4176 st->ambiguous = ambiguous;
4178 sym = info->u.rsym.sym;
4180 /* Create a symbol node if it doesn't already exist. */
4183 info->u.rsym.sym = gfc_new_symbol (info->u.rsym.true_name,
4185 sym = info->u.rsym.sym;
4186 sym->module = gfc_get_string (info->u.rsym.module);
4188 /* TODO: hmm, can we test this? Do we know it will be
4189 initialized to zeros? */
4190 if (info->u.rsym.binding_label[0] != '\0')
4191 strcpy (sym->binding_label, info->u.rsym.binding_label);
4197 if (strcmp (name, p) != 0)
4198 sym->attr.use_rename = 1;
4200 /* We need to set the only_flag here so that symbols from the
4201 same USE...ONLY but earlier are not deleted from the tree in
4202 the gfc_delete_symtree above. */
4203 sym->attr.use_only = only_flag;
4205 /* Store the symtree pointing to this symbol. */
4206 info->u.rsym.symtree = st;
4208 if (info->u.rsym.state == UNUSED)
4209 info->u.rsym.state = NEEDED;
4210 info->u.rsym.referenced = 1;
4217 /* Load intrinsic operator interfaces. */
4218 set_module_locus (&operator_interfaces);
4221 for (i = GFC_INTRINSIC_BEGIN; i != GFC_INTRINSIC_END; i++)
4223 if (i == INTRINSIC_USER)
4228 u = find_use_operator ((gfc_intrinsic_op) i);
4239 mio_interface (&gfc_current_ns->op[i]);
4244 /* Load generic and user operator interfaces. These must follow the
4245 loading of symtree because otherwise symbols can be marked as
4248 set_module_locus (&user_operators);
4250 load_operator_interfaces ();
4251 load_generic_interfaces ();
4256 /* At this point, we read those symbols that are needed but haven't
4257 been loaded yet. If one symbol requires another, the other gets
4258 marked as NEEDED if its previous state was UNUSED. */
4260 while (load_needed (pi_root));
4262 /* Make sure all elements of the rename-list were found in the module. */
4264 for (u = gfc_rename_list; u; u = u->next)
4269 if (u->op == INTRINSIC_NONE)
4271 gfc_error ("Symbol '%s' referenced at %L not found in module '%s'",
4272 u->use_name, &u->where, module_name);
4276 if (u->op == INTRINSIC_USER)
4278 gfc_error ("User operator '%s' referenced at %L not found "
4279 "in module '%s'", u->use_name, &u->where, module_name);
4283 gfc_error ("Intrinsic operator '%s' referenced at %L not found "
4284 "in module '%s'", gfc_op2string (u->op), &u->where,
4288 gfc_check_interfaces (gfc_current_ns);
4290 /* Clean up symbol nodes that were never loaded, create references
4291 to hidden symbols. */
4293 read_cleanup (pi_root);
4297 /* Given an access type that is specific to an entity and the default
4298 access, return nonzero if the entity is publicly accessible. If the
4299 element is declared as PUBLIC, then it is public; if declared
4300 PRIVATE, then private, and otherwise it is public unless the default
4301 access in this context has been declared PRIVATE. */
4304 gfc_check_access (gfc_access specific_access, gfc_access default_access)
4306 if (specific_access == ACCESS_PUBLIC)
4308 if (specific_access == ACCESS_PRIVATE)
4311 if (gfc_option.flag_module_private)
4312 return default_access == ACCESS_PUBLIC;
4314 return default_access != ACCESS_PRIVATE;
4318 /* A structure to remember which commons we've already written. */
4320 struct written_common
4322 BBT_HEADER(written_common);
4323 const char *name, *label;
4326 static struct written_common *written_commons = NULL;
4328 /* Comparison function used for balancing the binary tree. */
4331 compare_written_commons (void *a1, void *b1)
4333 const char *aname = ((struct written_common *) a1)->name;
4334 const char *alabel = ((struct written_common *) a1)->label;
4335 const char *bname = ((struct written_common *) b1)->name;
4336 const char *blabel = ((struct written_common *) b1)->label;
4337 int c = strcmp (aname, bname);
4339 return (c != 0 ? c : strcmp (alabel, blabel));
4342 /* Free a list of written commons. */
4345 free_written_common (struct written_common *w)
4351 free_written_common (w->left);
4353 free_written_common (w->right);
4358 /* Write a common block to the module -- recursive helper function. */
4361 write_common_0 (gfc_symtree *st, bool this_module)
4367 struct written_common *w;
4368 bool write_me = true;
4373 write_common_0 (st->left, this_module);
4375 /* We will write out the binding label, or the name if no label given. */
4376 name = st->n.common->name;
4378 label = p->is_bind_c ? p->binding_label : p->name;
4380 /* Check if we've already output this common. */
4381 w = written_commons;
4384 int c = strcmp (name, w->name);
4385 c = (c != 0 ? c : strcmp (label, w->label));
4389 w = (c < 0) ? w->left : w->right;
4392 if (this_module && p->use_assoc)
4397 /* Write the common to the module. */
4399 mio_pool_string (&name);
4401 mio_symbol_ref (&p->head);
4402 flags = p->saved ? 1 : 0;
4403 if (p->threadprivate)
4405 mio_integer (&flags);
4407 /* Write out whether the common block is bind(c) or not. */
4408 mio_integer (&(p->is_bind_c));
4410 mio_pool_string (&label);
4413 /* Record that we have written this common. */
4414 w = XCNEW (struct written_common);
4417 gfc_insert_bbt (&written_commons, w, compare_written_commons);
4420 write_common_0 (st->right, this_module);
4424 /* Write a common, by initializing the list of written commons, calling
4425 the recursive function write_common_0() and cleaning up afterwards. */
4428 write_common (gfc_symtree *st)
4430 written_commons = NULL;
4431 write_common_0 (st, true);
4432 write_common_0 (st, false);
4433 free_written_common (written_commons);
4434 written_commons = NULL;
4438 /* Write the blank common block to the module. */
4441 write_blank_common (void)
4443 const char * name = BLANK_COMMON_NAME;
4445 /* TODO: Blank commons are not bind(c). The F2003 standard probably says
4446 this, but it hasn't been checked. Just making it so for now. */
4449 if (gfc_current_ns->blank_common.head == NULL)
4454 mio_pool_string (&name);
4456 mio_symbol_ref (&gfc_current_ns->blank_common.head);
4457 saved = gfc_current_ns->blank_common.saved;
4458 mio_integer (&saved);
4460 /* Write out whether the common block is bind(c) or not. */
4461 mio_integer (&is_bind_c);
4463 /* Write out the binding label, which is BLANK_COMMON_NAME, though
4464 it doesn't matter because the label isn't used. */
4465 mio_pool_string (&name);
4471 /* Write equivalences to the module. */
4480 for (eq = gfc_current_ns->equiv; eq; eq = eq->next)
4484 for (e = eq; e; e = e->eq)
4486 if (e->module == NULL)
4487 e->module = gfc_get_string ("%s.eq.%d", module_name, num);
4488 mio_allocated_string (e->module);
4489 mio_expr (&e->expr);
4498 /* Write a symbol to the module. */
4501 write_symbol (int n, gfc_symbol *sym)
4505 if (sym->attr.flavor == FL_UNKNOWN || sym->attr.flavor == FL_LABEL)
4506 gfc_internal_error ("write_symbol(): bad module symbol '%s'", sym->name);
4509 mio_pool_string (&sym->name);
4511 mio_pool_string (&sym->module);
4512 if (sym->attr.is_bind_c || sym->attr.is_iso_c)
4514 label = sym->binding_label;
4515 mio_pool_string (&label);
4518 mio_pool_string (&sym->name);
4520 mio_pointer_ref (&sym->ns);
4527 /* Recursive traversal function to write the initial set of symbols to
4528 the module. We check to see if the symbol should be written
4529 according to the access specification. */
4532 write_symbol0 (gfc_symtree *st)
4536 bool dont_write = false;
4541 write_symbol0 (st->left);
4544 if (sym->module == NULL)
4545 sym->module = gfc_get_string (module_name);
4547 if (sym->attr.flavor == FL_PROCEDURE && sym->attr.generic
4548 && !sym->attr.subroutine && !sym->attr.function)
4551 if (!gfc_check_access (sym->attr.access, sym->ns->default_access))
4556 p = get_pointer (sym);
4557 if (p->type == P_UNKNOWN)
4560 if (p->u.wsym.state != WRITTEN)
4562 write_symbol (p->integer, sym);
4563 p->u.wsym.state = WRITTEN;
4567 write_symbol0 (st->right);
4571 /* Recursive traversal function to write the secondary set of symbols
4572 to the module file. These are symbols that were not public yet are
4573 needed by the public symbols or another dependent symbol. The act
4574 of writing a symbol can modify the pointer_info tree, so we cease
4575 traversal if we find a symbol to write. We return nonzero if a
4576 symbol was written and pass that information upwards. */
4579 write_symbol1 (pointer_info *p)
4586 result = write_symbol1 (p->left);
4588 if (!(p->type != P_SYMBOL || p->u.wsym.state != NEEDS_WRITE))
4590 p->u.wsym.state = WRITTEN;
4591 write_symbol (p->integer, p->u.wsym.sym);
4595 result |= write_symbol1 (p->right);
4600 /* Write operator interfaces associated with a symbol. */
4603 write_operator (gfc_user_op *uop)
4605 static char nullstring[] = "";
4606 const char *p = nullstring;
4609 || !gfc_check_access (uop->access, uop->ns->default_access))
4612 mio_symbol_interface (&uop->name, &p, &uop->op);
4616 /* Write generic interfaces from the namespace sym_root. */
4619 write_generic (gfc_symtree *st)
4626 write_generic (st->left);
4627 write_generic (st->right);
4630 if (!sym || check_unique_name (st->name))
4633 if (sym->generic == NULL
4634 || !gfc_check_access (sym->attr.access, sym->ns->default_access))
4637 if (sym->module == NULL)
4638 sym->module = gfc_get_string (module_name);
4640 mio_symbol_interface (&st->name, &sym->module, &sym->generic);
4645 write_symtree (gfc_symtree *st)
4652 /* A symbol in an interface body must not be visible in the
4654 if (sym->ns != gfc_current_ns
4655 && sym->ns->proc_name
4656 && sym->ns->proc_name->attr.if_source == IFSRC_IFBODY)
4659 if (!gfc_check_access (sym->attr.access, sym->ns->default_access)
4660 || (sym->attr.flavor == FL_PROCEDURE && sym->attr.generic
4661 && !sym->attr.subroutine && !sym->attr.function))
4664 if (check_unique_name (st->name))
4667 p = find_pointer (sym);
4669 gfc_internal_error ("write_symtree(): Symbol not written");
4671 mio_pool_string (&st->name);
4672 mio_integer (&st->ambiguous);
4673 mio_integer (&p->integer);
4682 /* Write the operator interfaces. */
4685 for (i = GFC_INTRINSIC_BEGIN; i != GFC_INTRINSIC_END; i++)
4687 if (i == INTRINSIC_USER)
4690 mio_interface (gfc_check_access (gfc_current_ns->operator_access[i],
4691 gfc_current_ns->default_access)
4692 ? &gfc_current_ns->op[i] : NULL);
4700 gfc_traverse_user_op (gfc_current_ns, write_operator);
4706 write_generic (gfc_current_ns->sym_root);
4712 write_blank_common ();
4713 write_common (gfc_current_ns->common_root);
4724 /* Write symbol information. First we traverse all symbols in the
4725 primary namespace, writing those that need to be written.
4726 Sometimes writing one symbol will cause another to need to be
4727 written. A list of these symbols ends up on the write stack, and
4728 we end by popping the bottom of the stack and writing the symbol
4729 until the stack is empty. */
4733 write_symbol0 (gfc_current_ns->sym_root);
4734 while (write_symbol1 (pi_root))
4743 gfc_traverse_symtree (gfc_current_ns->sym_root, write_symtree);
4748 /* Read a MD5 sum from the header of a module file. If the file cannot
4749 be opened, or we have any other error, we return -1. */
4752 read_md5_from_module_file (const char * filename, unsigned char md5[16])
4758 /* Open the file. */
4759 if ((file = fopen (filename, "r")) == NULL)
4762 /* Read the first line. */
4763 if (fgets (buf, sizeof (buf) - 1, file) == NULL)
4769 /* The file also needs to be overwritten if the version number changed. */
4770 n = strlen ("GFORTRAN module version '" MOD_VERSION "' created");
4771 if (strncmp (buf, "GFORTRAN module version '" MOD_VERSION "' created", n) != 0)
4777 /* Read a second line. */
4778 if (fgets (buf, sizeof (buf) - 1, file) == NULL)
4784 /* Close the file. */
4787 /* If the header is not what we expect, or is too short, bail out. */
4788 if (strncmp (buf, "MD5:", 4) != 0 || strlen (buf) < 4 + 16)
4791 /* Now, we have a real MD5, read it into the array. */
4792 for (n = 0; n < 16; n++)
4796 if (sscanf (&(buf[4+2*n]), "%02x", &x) != 1)
4806 /* Given module, dump it to disk. If there was an error while
4807 processing the module, dump_flag will be set to zero and we delete
4808 the module file, even if it was already there. */
4811 gfc_dump_module (const char *name, int dump_flag)
4814 char *filename, *filename_tmp, *p;
4817 unsigned char md5_new[16], md5_old[16];
4819 n = strlen (name) + strlen (MODULE_EXTENSION) + 1;
4820 if (gfc_option.module_dir != NULL)
4822 n += strlen (gfc_option.module_dir);
4823 filename = (char *) alloca (n);
4824 strcpy (filename, gfc_option.module_dir);
4825 strcat (filename, name);
4829 filename = (char *) alloca (n);
4830 strcpy (filename, name);
4832 strcat (filename, MODULE_EXTENSION);
4834 /* Name of the temporary file used to write the module. */
4835 filename_tmp = (char *) alloca (n + 1);
4836 strcpy (filename_tmp, filename);
4837 strcat (filename_tmp, "0");
4839 /* There was an error while processing the module. We delete the
4840 module file, even if it was already there. */
4847 /* Write the module to the temporary file. */
4848 module_fp = fopen (filename_tmp, "w");
4849 if (module_fp == NULL)
4850 gfc_fatal_error ("Can't open module file '%s' for writing at %C: %s",
4851 filename_tmp, strerror (errno));
4853 /* Write the header, including space reserved for the MD5 sum. */
4857 *strchr (p, '\n') = '\0';
4859 fprintf (module_fp, "GFORTRAN module version '%s' created from %s on %s\n"
4860 "MD5:", MOD_VERSION, gfc_source_file, p);
4861 fgetpos (module_fp, &md5_pos);
4862 fputs ("00000000000000000000000000000000 -- "
4863 "If you edit this, you'll get what you deserve.\n\n", module_fp);
4865 /* Initialize the MD5 context that will be used for output. */
4866 md5_init_ctx (&ctx);
4868 /* Write the module itself. */
4870 strcpy (module_name, name);
4876 free_pi_tree (pi_root);
4881 /* Write the MD5 sum to the header of the module file. */
4882 md5_finish_ctx (&ctx, md5_new);
4883 fsetpos (module_fp, &md5_pos);
4884 for (n = 0; n < 16; n++)
4885 fprintf (module_fp, "%02x", md5_new[n]);
4887 if (fclose (module_fp))
4888 gfc_fatal_error ("Error writing module file '%s' for writing: %s",
4889 filename_tmp, strerror (errno));
4891 /* Read the MD5 from the header of the old module file and compare. */
4892 if (read_md5_from_module_file (filename, md5_old) != 0
4893 || memcmp (md5_old, md5_new, sizeof (md5_old)) != 0)
4895 /* Module file have changed, replace the old one. */
4896 if (unlink (filename) && errno != ENOENT)
4897 gfc_fatal_error ("Can't delete module file '%s': %s", filename,
4899 if (rename (filename_tmp, filename))
4900 gfc_fatal_error ("Can't rename module file '%s' to '%s': %s",
4901 filename_tmp, filename, strerror (errno));
4905 if (unlink (filename_tmp))
4906 gfc_fatal_error ("Can't delete temporary module file '%s': %s",
4907 filename_tmp, strerror (errno));
4913 sort_iso_c_rename_list (void)
4915 gfc_use_rename *tmp_list = NULL;
4916 gfc_use_rename *curr;
4917 gfc_use_rename *kinds_used[ISOCBINDING_NUMBER] = {NULL};
4921 for (curr = gfc_rename_list; curr; curr = curr->next)
4923 c_kind = get_c_kind (curr->use_name, c_interop_kinds_table);
4924 if (c_kind == ISOCBINDING_INVALID || c_kind == ISOCBINDING_LAST)
4926 gfc_error ("Symbol '%s' referenced at %L does not exist in "
4927 "intrinsic module ISO_C_BINDING.", curr->use_name,
4931 /* Put it in the list. */
4932 kinds_used[c_kind] = curr;
4935 /* Make a new (sorted) rename list. */
4937 while (i < ISOCBINDING_NUMBER && kinds_used[i] == NULL)
4940 if (i < ISOCBINDING_NUMBER)
4942 tmp_list = kinds_used[i];
4946 for (; i < ISOCBINDING_NUMBER; i++)
4947 if (kinds_used[i] != NULL)
4949 curr->next = kinds_used[i];
4955 gfc_rename_list = tmp_list;
4959 /* Import the intrinsic ISO_C_BINDING module, generating symbols in
4960 the current namespace for all named constants, pointer types, and
4961 procedures in the module unless the only clause was used or a rename
4962 list was provided. */
4965 import_iso_c_binding_module (void)
4967 gfc_symbol *mod_sym = NULL;
4968 gfc_symtree *mod_symtree = NULL;
4969 const char *iso_c_module_name = "__iso_c_binding";
4974 /* Look only in the current namespace. */
4975 mod_symtree = gfc_find_symtree (gfc_current_ns->sym_root, iso_c_module_name);
4977 if (mod_symtree == NULL)
4979 /* symtree doesn't already exist in current namespace. */
4980 gfc_get_sym_tree (iso_c_module_name, gfc_current_ns, &mod_symtree);
4982 if (mod_symtree != NULL)
4983 mod_sym = mod_symtree->n.sym;
4985 gfc_internal_error ("import_iso_c_binding_module(): Unable to "
4986 "create symbol for %s", iso_c_module_name);
4988 mod_sym->attr.flavor = FL_MODULE;
4989 mod_sym->attr.intrinsic = 1;
4990 mod_sym->module = gfc_get_string (iso_c_module_name);
4991 mod_sym->from_intmod = INTMOD_ISO_C_BINDING;
4994 /* Generate the symbols for the named constants representing
4995 the kinds for intrinsic data types. */
4998 /* Sort the rename list because there are dependencies between types
4999 and procedures (e.g., c_loc needs c_ptr). */
5000 sort_iso_c_rename_list ();
5002 for (u = gfc_rename_list; u; u = u->next)
5004 i = get_c_kind (u->use_name, c_interop_kinds_table);
5006 if (i == ISOCBINDING_INVALID || i == ISOCBINDING_LAST)
5008 gfc_error ("Symbol '%s' referenced at %L does not exist in "
5009 "intrinsic module ISO_C_BINDING.", u->use_name,
5014 generate_isocbinding_symbol (iso_c_module_name,
5015 (iso_c_binding_symbol) i,
5021 for (i = 0; i < ISOCBINDING_NUMBER; i++)
5024 for (u = gfc_rename_list; u; u = u->next)
5026 if (strcmp (c_interop_kinds_table[i].name, u->use_name) == 0)
5028 local_name = u->local_name;
5033 generate_isocbinding_symbol (iso_c_module_name,
5034 (iso_c_binding_symbol) i,
5038 for (u = gfc_rename_list; u; u = u->next)
5043 gfc_error ("Symbol '%s' referenced at %L not found in intrinsic "
5044 "module ISO_C_BINDING", u->use_name, &u->where);
5050 /* Add an integer named constant from a given module. */
5053 create_int_parameter (const char *name, int value, const char *modname,
5054 intmod_id module, int id)
5056 gfc_symtree *tmp_symtree;
5059 tmp_symtree = gfc_find_symtree (gfc_current_ns->sym_root, name);
5060 if (tmp_symtree != NULL)
5062 if (strcmp (modname, tmp_symtree->n.sym->module) == 0)
5065 gfc_error ("Symbol '%s' already declared", name);
5068 gfc_get_sym_tree (name, gfc_current_ns, &tmp_symtree);
5069 sym = tmp_symtree->n.sym;
5071 sym->module = gfc_get_string (modname);
5072 sym->attr.flavor = FL_PARAMETER;
5073 sym->ts.type = BT_INTEGER;
5074 sym->ts.kind = gfc_default_integer_kind;
5075 sym->value = gfc_int_expr (value);
5076 sym->attr.use_assoc = 1;
5077 sym->from_intmod = module;
5078 sym->intmod_sym_id = id;
5082 /* USE the ISO_FORTRAN_ENV intrinsic module. */
5085 use_iso_fortran_env_module (void)
5087 static char mod[] = "iso_fortran_env";
5088 const char *local_name;
5090 gfc_symbol *mod_sym;
5091 gfc_symtree *mod_symtree;
5094 intmod_sym symbol[] = {
5095 #define NAMED_INTCST(a,b,c,d) { a, b, 0, d },
5096 #include "iso-fortran-env.def"
5098 { ISOFORTRANENV_INVALID, NULL, -1234, 0 } };
5101 #define NAMED_INTCST(a,b,c,d) symbol[i++].value = c;
5102 #include "iso-fortran-env.def"
5105 /* Generate the symbol for the module itself. */
5106 mod_symtree = gfc_find_symtree (gfc_current_ns->sym_root, mod);
5107 if (mod_symtree == NULL)
5109 gfc_get_sym_tree (mod, gfc_current_ns, &mod_symtree);
5110 gcc_assert (mod_symtree);
5111 mod_sym = mod_symtree->n.sym;
5113 mod_sym->attr.flavor = FL_MODULE;
5114 mod_sym->attr.intrinsic = 1;
5115 mod_sym->module = gfc_get_string (mod);
5116 mod_sym->from_intmod = INTMOD_ISO_FORTRAN_ENV;
5119 if (!mod_symtree->n.sym->attr.intrinsic)
5120 gfc_error ("Use of intrinsic module '%s' at %C conflicts with "
5121 "non-intrinsic module name used previously", mod);
5123 /* Generate the symbols for the module integer named constants. */
5125 for (u = gfc_rename_list; u; u = u->next)
5127 for (i = 0; symbol[i].name; i++)
5128 if (strcmp (symbol[i].name, u->use_name) == 0)
5131 if (symbol[i].name == NULL)
5133 gfc_error ("Symbol '%s' referenced at %L does not exist in "
5134 "intrinsic module ISO_FORTRAN_ENV", u->use_name,
5139 if ((gfc_option.flag_default_integer || gfc_option.flag_default_real)
5140 && symbol[i].id == ISOFORTRANENV_NUMERIC_STORAGE_SIZE)
5141 gfc_warning_now ("Use of the NUMERIC_STORAGE_SIZE named constant "
5142 "from intrinsic module ISO_FORTRAN_ENV at %L is "
5143 "incompatible with option %s", &u->where,
5144 gfc_option.flag_default_integer
5145 ? "-fdefault-integer-8" : "-fdefault-real-8");
5147 create_int_parameter (u->local_name[0] ? u->local_name
5149 symbol[i].value, mod, INTMOD_ISO_FORTRAN_ENV,
5154 for (i = 0; symbol[i].name; i++)
5157 for (u = gfc_rename_list; u; u = u->next)
5159 if (strcmp (symbol[i].name, u->use_name) == 0)
5161 local_name = u->local_name;
5167 if ((gfc_option.flag_default_integer || gfc_option.flag_default_real)
5168 && symbol[i].id == ISOFORTRANENV_NUMERIC_STORAGE_SIZE)
5169 gfc_warning_now ("Use of the NUMERIC_STORAGE_SIZE named constant "
5170 "from intrinsic module ISO_FORTRAN_ENV at %C is "
5171 "incompatible with option %s",
5172 gfc_option.flag_default_integer
5173 ? "-fdefault-integer-8" : "-fdefault-real-8");
5175 create_int_parameter (local_name ? local_name : symbol[i].name,
5176 symbol[i].value, mod, INTMOD_ISO_FORTRAN_ENV,
5180 for (u = gfc_rename_list; u; u = u->next)
5185 gfc_error ("Symbol '%s' referenced at %L not found in intrinsic "
5186 "module ISO_FORTRAN_ENV", u->use_name, &u->where);
5192 /* Process a USE directive. */
5195 gfc_use_module (void)
5200 gfc_symtree *mod_symtree;
5201 gfc_use_list *use_stmt;
5203 filename = (char *) alloca (strlen (module_name) + strlen (MODULE_EXTENSION)
5205 strcpy (filename, module_name);
5206 strcat (filename, MODULE_EXTENSION);
5208 /* First, try to find an non-intrinsic module, unless the USE statement
5209 specified that the module is intrinsic. */
5212 module_fp = gfc_open_included_file (filename, true, true);
5214 /* Then, see if it's an intrinsic one, unless the USE statement
5215 specified that the module is non-intrinsic. */
5216 if (module_fp == NULL && !specified_nonint)
5218 if (strcmp (module_name, "iso_fortran_env") == 0
5219 && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: ISO_FORTRAN_ENV "
5220 "intrinsic module at %C") != FAILURE)
5222 use_iso_fortran_env_module ();
5226 if (strcmp (module_name, "iso_c_binding") == 0
5227 && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: "
5228 "ISO_C_BINDING module at %C") != FAILURE)
5230 import_iso_c_binding_module();
5234 module_fp = gfc_open_intrinsic_module (filename);
5236 if (module_fp == NULL && specified_int)
5237 gfc_fatal_error ("Can't find an intrinsic module named '%s' at %C",
5241 if (module_fp == NULL)
5242 gfc_fatal_error ("Can't open module file '%s' for reading at %C: %s",
5243 filename, strerror (errno));
5245 /* Check that we haven't already USEd an intrinsic module with the
5248 mod_symtree = gfc_find_symtree (gfc_current_ns->sym_root, module_name);
5249 if (mod_symtree && mod_symtree->n.sym->attr.intrinsic)
5250 gfc_error ("Use of non-intrinsic module '%s' at %C conflicts with "
5251 "intrinsic module name used previously", module_name);
5258 /* Skip the first two lines of the module, after checking that this is
5259 a gfortran module file. */
5265 bad_module ("Unexpected end of module");
5268 if ((start == 1 && strcmp (atom_name, "GFORTRAN") != 0)
5269 || (start == 2 && strcmp (atom_name, " module") != 0))
5270 gfc_fatal_error ("File '%s' opened at %C is not a GFORTRAN module "
5274 if (strcmp (atom_name, " version") != 0
5275 || module_char () != ' '
5276 || parse_atom () != ATOM_STRING)
5277 gfc_fatal_error ("Parse error when checking module version"
5278 " for file '%s' opened at %C", filename);
5280 if (strcmp (atom_string, MOD_VERSION))
5282 gfc_fatal_error ("Wrong module version '%s' (expected '"
5283 MOD_VERSION "') for file '%s' opened"
5284 " at %C", atom_string, filename);
5292 /* Make sure we're not reading the same module that we may be building. */
5293 for (p = gfc_state_stack; p; p = p->previous)
5294 if (p->state == COMP_MODULE && strcmp (p->sym->name, module_name) == 0)
5295 gfc_fatal_error ("Can't USE the same module we're building!");
5298 init_true_name_tree ();
5302 free_true_name (true_name_root);
5303 true_name_root = NULL;
5305 free_pi_tree (pi_root);
5310 use_stmt = gfc_get_use_list ();
5311 use_stmt->module_name = gfc_get_string (module_name);
5312 use_stmt->only_flag = only_flag;
5313 use_stmt->rename = gfc_rename_list;
5314 use_stmt->where = use_locus;
5315 gfc_rename_list = NULL;
5316 use_stmt->next = gfc_current_ns->use_stmts;
5317 gfc_current_ns->use_stmts = use_stmt;
5322 gfc_free_use_stmts (gfc_use_list *use_stmts)
5325 for (; use_stmts; use_stmts = next)
5327 gfc_use_rename *next_rename;
5329 for (; use_stmts->rename; use_stmts->rename = next_rename)
5331 next_rename = use_stmts->rename->next;
5332 gfc_free (use_stmts->rename);
5334 next = use_stmts->next;
5335 gfc_free (use_stmts);
5341 gfc_module_init_2 (void)
5343 last_atom = ATOM_LPAREN;
5348 gfc_module_done_2 (void)