1 /* Handle modules, which amounts to loading and saving symbols and
2 their attendant structures.
3 Copyright (C) 2000-2013 Free Software Foundation, Inc.
4 Contributed by Andy Vaught
6 This file is part of GCC.
8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 3, or (at your option) any later
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3. If not see
20 <http://www.gnu.org/licenses/>. */
22 /* The syntax of gfortran modules resembles that of lisp lists, i.e. a
23 sequence of atoms, which can be left or right parenthesis, names,
24 integers or strings. Parenthesis are always matched which allows
25 us to skip over sections at high speed without having to know
26 anything about the internal structure of the lists. A "name" is
27 usually a fortran 95 identifier, but can also start with '@' in
28 order to reference a hidden symbol.
30 The first line of a module is an informational message about what
31 created the module, the file it came from and when it was created.
32 The second line is a warning for people not to edit the module.
33 The rest of the module looks like:
35 ( ( <Interface info for UPLUS> )
36 ( <Interface info for UMINUS> )
39 ( ( <name of operator interface> <module of op interface> <i/f1> ... )
42 ( ( <name of generic interface> <module of generic interface> <i/f1> ... )
45 ( ( <common name> <symbol> <saved flag>)
51 ( <Symbol Number (in no particular order)>
53 <Module name of symbol>
54 ( <symbol information> )
63 In general, symbols refer to other symbols by their symbol number,
64 which are zero based. Symbols are written to the module in no
69 #include "coretypes.h"
73 #include "parse.h" /* FIXME */
74 #include "constructor.h"
80 #define MODULE_EXTENSION ".mod"
82 /* Don't put any single quote (') in MOD_VERSION, if you want it to be
84 TODO: When the version is bumped, remove the extra empty line at
85 the beginning of module files. */
86 #define MOD_VERSION "10"
89 /* Structure that describes a position within a module file. */
98 /* Structure for list of symbols of intrinsic modules. */
111 P_UNKNOWN
= 0, P_OTHER
, P_NAMESPACE
, P_COMPONENT
, P_SYMBOL
115 /* The fixup structure lists pointers to pointers that have to
116 be updated when a pointer value becomes known. */
118 typedef struct fixup_t
121 struct fixup_t
*next
;
126 /* Structure for holding extra info needed for pointers being read. */
142 typedef struct pointer_info
144 BBT_HEADER (pointer_info
);
148 /* The first component of each member of the union is the pointer
155 void *pointer
; /* Member for doing pointer searches. */
160 char *true_name
, *module
, *binding_label
;
162 gfc_symtree
*symtree
;
163 enum gfc_rsym_state state
;
164 int ns
, referenced
, renamed
;
172 enum gfc_wsym_state state
;
181 #define gfc_get_pointer_info() XCNEW (pointer_info)
184 /* Local variables */
186 /* The gzFile for the module we're reading or writing. */
187 static gzFile module_fp
;
190 /* The name of the module we're reading (USE'ing) or writing. */
191 static const char *module_name
;
192 static gfc_use_list
*module_list
;
194 /* Content of module. */
195 static char* module_content
;
197 static long module_pos
;
198 static int module_line
, module_column
, only_flag
;
199 static int prev_module_line
, prev_module_column
;
202 { IO_INPUT
, IO_OUTPUT
}
205 static gfc_use_rename
*gfc_rename_list
;
206 static pointer_info
*pi_root
;
207 static int symbol_number
; /* Counter for assigning symbol numbers */
209 /* Tells mio_expr_ref to make symbols for unused equivalence members. */
210 static bool in_load_equiv
;
214 /*****************************************************************/
216 /* Pointer/integer conversion. Pointers between structures are stored
217 as integers in the module file. The next couple of subroutines
218 handle this translation for reading and writing. */
220 /* Recursively free the tree of pointer structures. */
223 free_pi_tree (pointer_info
*p
)
228 if (p
->fixup
!= NULL
)
229 gfc_internal_error ("free_pi_tree(): Unresolved fixup");
231 free_pi_tree (p
->left
);
232 free_pi_tree (p
->right
);
234 if (iomode
== IO_INPUT
)
236 XDELETEVEC (p
->u
.rsym
.true_name
);
237 XDELETEVEC (p
->u
.rsym
.module
);
238 XDELETEVEC (p
->u
.rsym
.binding_label
);
245 /* Compare pointers when searching by pointer. Used when writing a
249 compare_pointers (void *_sn1
, void *_sn2
)
251 pointer_info
*sn1
, *sn2
;
253 sn1
= (pointer_info
*) _sn1
;
254 sn2
= (pointer_info
*) _sn2
;
256 if (sn1
->u
.pointer
< sn2
->u
.pointer
)
258 if (sn1
->u
.pointer
> sn2
->u
.pointer
)
265 /* Compare integers when searching by integer. Used when reading a
269 compare_integers (void *_sn1
, void *_sn2
)
271 pointer_info
*sn1
, *sn2
;
273 sn1
= (pointer_info
*) _sn1
;
274 sn2
= (pointer_info
*) _sn2
;
276 if (sn1
->integer
< sn2
->integer
)
278 if (sn1
->integer
> sn2
->integer
)
285 /* Initialize the pointer_info tree. */
294 compare
= (iomode
== IO_INPUT
) ? compare_integers
: compare_pointers
;
296 /* Pointer 0 is the NULL pointer. */
297 p
= gfc_get_pointer_info ();
302 gfc_insert_bbt (&pi_root
, p
, compare
);
304 /* Pointer 1 is the current namespace. */
305 p
= gfc_get_pointer_info ();
306 p
->u
.pointer
= gfc_current_ns
;
308 p
->type
= P_NAMESPACE
;
310 gfc_insert_bbt (&pi_root
, p
, compare
);
316 /* During module writing, call here with a pointer to something,
317 returning the pointer_info node. */
319 static pointer_info
*
320 find_pointer (void *gp
)
327 if (p
->u
.pointer
== gp
)
329 p
= (gp
< p
->u
.pointer
) ? p
->left
: p
->right
;
336 /* Given a pointer while writing, returns the pointer_info tree node,
337 creating it if it doesn't exist. */
339 static pointer_info
*
340 get_pointer (void *gp
)
344 p
= find_pointer (gp
);
348 /* Pointer doesn't have an integer. Give it one. */
349 p
= gfc_get_pointer_info ();
352 p
->integer
= symbol_number
++;
354 gfc_insert_bbt (&pi_root
, p
, compare_pointers
);
360 /* Given an integer during reading, find it in the pointer_info tree,
361 creating the node if not found. */
363 static pointer_info
*
364 get_integer (int integer
)
374 c
= compare_integers (&t
, p
);
378 p
= (c
< 0) ? p
->left
: p
->right
;
384 p
= gfc_get_pointer_info ();
385 p
->integer
= integer
;
388 gfc_insert_bbt (&pi_root
, p
, compare_integers
);
394 /* Recursive function to find a pointer within a tree by brute force. */
396 static pointer_info
*
397 fp2 (pointer_info
*p
, const void *target
)
404 if (p
->u
.pointer
== target
)
407 q
= fp2 (p
->left
, target
);
411 return fp2 (p
->right
, target
);
415 /* During reading, find a pointer_info node from the pointer value.
416 This amounts to a brute-force search. */
418 static pointer_info
*
419 find_pointer2 (void *p
)
421 return fp2 (pi_root
, p
);
425 /* Resolve any fixups using a known pointer. */
428 resolve_fixups (fixup_t
*f
, void *gp
)
441 /* Convert a string such that it starts with a lower-case character. Used
442 to convert the symtree name of a derived-type to the symbol name or to
443 the name of the associated generic function. */
446 dt_lower_string (const char *name
)
448 if (name
[0] != (char) TOLOWER ((unsigned char) name
[0]))
449 return gfc_get_string ("%c%s", (char) TOLOWER ((unsigned char) name
[0]),
451 return gfc_get_string (name
);
455 /* Convert a string such that it starts with an upper-case character. Used to
456 return the symtree-name for a derived type; the symbol name itself and the
457 symtree/symbol name of the associated generic function start with a lower-
461 dt_upper_string (const char *name
)
463 if (name
[0] != (char) TOUPPER ((unsigned char) name
[0]))
464 return gfc_get_string ("%c%s", (char) TOUPPER ((unsigned char) name
[0]),
466 return gfc_get_string (name
);
469 /* Call here during module reading when we know what pointer to
470 associate with an integer. Any fixups that exist are resolved at
474 associate_integer_pointer (pointer_info
*p
, void *gp
)
476 if (p
->u
.pointer
!= NULL
)
477 gfc_internal_error ("associate_integer_pointer(): Already associated");
481 resolve_fixups (p
->fixup
, gp
);
487 /* During module reading, given an integer and a pointer to a pointer,
488 either store the pointer from an already-known value or create a
489 fixup structure in order to store things later. Returns zero if
490 the reference has been actually stored, or nonzero if the reference
491 must be fixed later (i.e., associate_integer_pointer must be called
492 sometime later. Returns the pointer_info structure. */
494 static pointer_info
*
495 add_fixup (int integer
, void *gp
)
501 p
= get_integer (integer
);
503 if (p
->integer
== 0 || p
->u
.pointer
!= NULL
)
506 *cp
= (char *) p
->u
.pointer
;
515 f
->pointer
= (void **) gp
;
522 /*****************************************************************/
524 /* Parser related subroutines */
526 /* Free the rename list left behind by a USE statement. */
529 free_rename (gfc_use_rename
*list
)
531 gfc_use_rename
*next
;
533 for (; list
; list
= next
)
541 /* Match a USE statement. */
546 char name
[GFC_MAX_SYMBOL_LEN
+ 1], module_nature
[GFC_MAX_SYMBOL_LEN
+ 1];
547 gfc_use_rename
*tail
= NULL
, *new_use
;
548 interface_type type
, type2
;
551 gfc_use_list
*use_list
;
553 use_list
= gfc_get_use_list ();
555 if (gfc_match (" , ") == MATCH_YES
)
557 if ((m
= gfc_match (" %n ::", module_nature
)) == MATCH_YES
)
559 if (!gfc_notify_std (GFC_STD_F2003
, "module "
560 "nature in USE statement at %C"))
563 if (strcmp (module_nature
, "intrinsic") == 0)
564 use_list
->intrinsic
= true;
567 if (strcmp (module_nature
, "non_intrinsic") == 0)
568 use_list
->non_intrinsic
= true;
571 gfc_error ("Module nature in USE statement at %C shall "
572 "be either INTRINSIC or NON_INTRINSIC");
579 /* Help output a better error message than "Unclassifiable
581 gfc_match (" %n", module_nature
);
582 if (strcmp (module_nature
, "intrinsic") == 0
583 || strcmp (module_nature
, "non_intrinsic") == 0)
584 gfc_error ("\"::\" was expected after module nature at %C "
585 "but was not found");
592 m
= gfc_match (" ::");
593 if (m
== MATCH_YES
&&
594 !gfc_notify_std(GFC_STD_F2003
, "\"USE :: module\" at %C"))
599 m
= gfc_match ("% ");
608 use_list
->where
= gfc_current_locus
;
610 m
= gfc_match_name (name
);
617 use_list
->module_name
= gfc_get_string (name
);
619 if (gfc_match_eos () == MATCH_YES
)
622 if (gfc_match_char (',') != MATCH_YES
)
625 if (gfc_match (" only :") == MATCH_YES
)
626 use_list
->only_flag
= true;
628 if (gfc_match_eos () == MATCH_YES
)
633 /* Get a new rename struct and add it to the rename list. */
634 new_use
= gfc_get_use_rename ();
635 new_use
->where
= gfc_current_locus
;
638 if (use_list
->rename
== NULL
)
639 use_list
->rename
= new_use
;
641 tail
->next
= new_use
;
644 /* See what kind of interface we're dealing with. Assume it is
646 new_use
->op
= INTRINSIC_NONE
;
647 if (gfc_match_generic_spec (&type
, name
, &op
) == MATCH_ERROR
)
652 case INTERFACE_NAMELESS
:
653 gfc_error ("Missing generic specification in USE statement at %C");
656 case INTERFACE_USER_OP
:
657 case INTERFACE_GENERIC
:
658 m
= gfc_match (" =>");
660 if (type
== INTERFACE_USER_OP
&& m
== MATCH_YES
661 && (!gfc_notify_std(GFC_STD_F2003
, "Renaming "
662 "operators in USE statements at %C")))
665 if (type
== INTERFACE_USER_OP
)
666 new_use
->op
= INTRINSIC_USER
;
668 if (use_list
->only_flag
)
671 strcpy (new_use
->use_name
, name
);
674 strcpy (new_use
->local_name
, name
);
675 m
= gfc_match_generic_spec (&type2
, new_use
->use_name
, &op
);
680 if (m
== MATCH_ERROR
)
688 strcpy (new_use
->local_name
, name
);
690 m
= gfc_match_generic_spec (&type2
, new_use
->use_name
, &op
);
695 if (m
== MATCH_ERROR
)
699 if (strcmp (new_use
->use_name
, use_list
->module_name
) == 0
700 || strcmp (new_use
->local_name
, use_list
->module_name
) == 0)
702 gfc_error ("The name '%s' at %C has already been used as "
703 "an external module name.", use_list
->module_name
);
708 case INTERFACE_INTRINSIC_OP
:
716 if (gfc_match_eos () == MATCH_YES
)
718 if (gfc_match_char (',') != MATCH_YES
)
725 gfc_use_list
*last
= module_list
;
728 last
->next
= use_list
;
731 module_list
= use_list
;
736 gfc_syntax_error (ST_USE
);
739 free_rename (use_list
->rename
);
745 /* Given a name and a number, inst, return the inst name
746 under which to load this symbol. Returns NULL if this
747 symbol shouldn't be loaded. If inst is zero, returns
748 the number of instances of this name. If interface is
749 true, a user-defined operator is sought, otherwise only
750 non-operators are sought. */
753 find_use_name_n (const char *name
, int *inst
, bool interface
)
756 const char *low_name
= NULL
;
759 /* For derived types. */
760 if (name
[0] != (char) TOLOWER ((unsigned char) name
[0]))
761 low_name
= dt_lower_string (name
);
764 for (u
= gfc_rename_list
; u
; u
= u
->next
)
766 if ((!low_name
&& strcmp (u
->use_name
, name
) != 0)
767 || (low_name
&& strcmp (u
->use_name
, low_name
) != 0)
768 || (u
->op
== INTRINSIC_USER
&& !interface
)
769 || (u
->op
!= INTRINSIC_USER
&& interface
))
782 return only_flag
? NULL
: name
;
788 if (u
->local_name
[0] == '\0')
790 return dt_upper_string (u
->local_name
);
793 return (u
->local_name
[0] != '\0') ? u
->local_name
: name
;
797 /* Given a name, return the name under which to load this symbol.
798 Returns NULL if this symbol shouldn't be loaded. */
801 find_use_name (const char *name
, bool interface
)
804 return find_use_name_n (name
, &i
, interface
);
808 /* Given a real name, return the number of use names associated with it. */
811 number_use_names (const char *name
, bool interface
)
814 find_use_name_n (name
, &i
, interface
);
819 /* Try to find the operator in the current list. */
821 static gfc_use_rename
*
822 find_use_operator (gfc_intrinsic_op op
)
826 for (u
= gfc_rename_list
; u
; u
= u
->next
)
834 /*****************************************************************/
836 /* The next couple of subroutines maintain a tree used to avoid a
837 brute-force search for a combination of true name and module name.
838 While symtree names, the name that a particular symbol is known by
839 can changed with USE statements, we still have to keep track of the
840 true names to generate the correct reference, and also avoid
841 loading the same real symbol twice in a program unit.
843 When we start reading, the true name tree is built and maintained
844 as symbols are read. The tree is searched as we load new symbols
845 to see if it already exists someplace in the namespace. */
847 typedef struct true_name
849 BBT_HEADER (true_name
);
855 static true_name
*true_name_root
;
858 /* Compare two true_name structures. */
861 compare_true_names (void *_t1
, void *_t2
)
866 t1
= (true_name
*) _t1
;
867 t2
= (true_name
*) _t2
;
869 c
= ((t1
->sym
->module
> t2
->sym
->module
)
870 - (t1
->sym
->module
< t2
->sym
->module
));
874 return strcmp (t1
->name
, t2
->name
);
878 /* Given a true name, search the true name tree to see if it exists
879 within the main namespace. */
882 find_true_name (const char *name
, const char *module
)
888 t
.name
= gfc_get_string (name
);
890 sym
.module
= gfc_get_string (module
);
898 c
= compare_true_names ((void *) (&t
), (void *) p
);
902 p
= (c
< 0) ? p
->left
: p
->right
;
909 /* Given a gfc_symbol pointer that is not in the true name tree, add it. */
912 add_true_name (gfc_symbol
*sym
)
916 t
= XCNEW (true_name
);
918 if (sym
->attr
.flavor
== FL_DERIVED
)
919 t
->name
= dt_upper_string (sym
->name
);
923 gfc_insert_bbt (&true_name_root
, t
, compare_true_names
);
927 /* Recursive function to build the initial true name tree by
928 recursively traversing the current namespace. */
931 build_tnt (gfc_symtree
*st
)
937 build_tnt (st
->left
);
938 build_tnt (st
->right
);
940 if (st
->n
.sym
->attr
.flavor
== FL_DERIVED
)
941 name
= dt_upper_string (st
->n
.sym
->name
);
943 name
= st
->n
.sym
->name
;
945 if (find_true_name (name
, st
->n
.sym
->module
) != NULL
)
948 add_true_name (st
->n
.sym
);
952 /* Initialize the true name tree with the current namespace. */
955 init_true_name_tree (void)
957 true_name_root
= NULL
;
958 build_tnt (gfc_current_ns
->sym_root
);
962 /* Recursively free a true name tree node. */
965 free_true_name (true_name
*t
)
969 free_true_name (t
->left
);
970 free_true_name (t
->right
);
976 /*****************************************************************/
978 /* Module reading and writing. */
980 /* The following are versions similar to the ones in scanner.c, but
981 for dealing with compressed module files. */
984 gzopen_included_file_1 (const char *name
, gfc_directorylist
*list
,
985 bool module
, bool system
)
988 gfc_directorylist
*p
;
991 for (p
= list
; p
; p
= p
->next
)
993 if (module
&& !p
->use_for_modules
)
996 fullname
= (char *) alloca(strlen (p
->path
) + strlen (name
) + 1);
997 strcpy (fullname
, p
->path
);
998 strcat (fullname
, name
);
1000 f
= gzopen (fullname
, "r");
1003 if (gfc_cpp_makedep ())
1004 gfc_cpp_add_dep (fullname
, system
);
1014 gzopen_included_file (const char *name
, bool include_cwd
, bool module
)
1018 if (IS_ABSOLUTE_PATH (name
) || include_cwd
)
1020 f
= gzopen (name
, "r");
1021 if (f
&& gfc_cpp_makedep ())
1022 gfc_cpp_add_dep (name
, false);
1026 f
= gzopen_included_file_1 (name
, include_dirs
, module
, false);
1032 gzopen_intrinsic_module (const char* name
)
1036 if (IS_ABSOLUTE_PATH (name
))
1038 f
= gzopen (name
, "r");
1039 if (f
&& gfc_cpp_makedep ())
1040 gfc_cpp_add_dep (name
, true);
1044 f
= gzopen_included_file_1 (name
, intrinsic_modules_dirs
, true, true);
1052 ATOM_NAME
, ATOM_LPAREN
, ATOM_RPAREN
, ATOM_INTEGER
, ATOM_STRING
1056 static atom_type last_atom
;
1059 /* The name buffer must be at least as long as a symbol name. Right
1060 now it's not clear how we're going to store numeric constants--
1061 probably as a hexadecimal string, since this will allow the exact
1062 number to be preserved (this can't be done by a decimal
1063 representation). Worry about that later. TODO! */
1065 #define MAX_ATOM_SIZE 100
1067 static int atom_int
;
1068 static char *atom_string
, atom_name
[MAX_ATOM_SIZE
];
1071 /* Report problems with a module. Error reporting is not very
1072 elaborate, since this sorts of errors shouldn't really happen.
1073 This subroutine never returns. */
1075 static void bad_module (const char *) ATTRIBUTE_NORETURN
;
1078 bad_module (const char *msgid
)
1080 XDELETEVEC (module_content
);
1081 module_content
= NULL
;
1086 gfc_fatal_error ("Reading module %s at line %d column %d: %s",
1087 module_name
, module_line
, module_column
, msgid
);
1090 gfc_fatal_error ("Writing module %s at line %d column %d: %s",
1091 module_name
, module_line
, module_column
, msgid
);
1094 gfc_fatal_error ("Module %s at line %d column %d: %s",
1095 module_name
, module_line
, module_column
, msgid
);
1101 /* Set the module's input pointer. */
1104 set_module_locus (module_locus
*m
)
1106 module_column
= m
->column
;
1107 module_line
= m
->line
;
1108 module_pos
= m
->pos
;
1112 /* Get the module's input pointer so that we can restore it later. */
1115 get_module_locus (module_locus
*m
)
1117 m
->column
= module_column
;
1118 m
->line
= module_line
;
1119 m
->pos
= module_pos
;
1123 /* Get the next character in the module, updating our reckoning of
1129 const char c
= module_content
[module_pos
++];
1131 bad_module ("Unexpected EOF");
1133 prev_module_line
= module_line
;
1134 prev_module_column
= module_column
;
1146 /* Unget a character while remembering the line and column. Works for
1147 a single character only. */
1150 module_unget_char (void)
1152 module_line
= prev_module_line
;
1153 module_column
= prev_module_column
;
1157 /* Parse a string constant. The delimiter is guaranteed to be a
1167 atom_string
= XNEWVEC (char, cursz
);
1175 int c2
= module_char ();
1178 module_unget_char ();
1186 atom_string
= XRESIZEVEC (char, atom_string
, cursz
);
1188 atom_string
[len
] = c
;
1192 atom_string
= XRESIZEVEC (char, atom_string
, len
+ 1);
1193 atom_string
[len
] = '\0'; /* C-style string for debug purposes. */
1197 /* Parse a small integer. */
1200 parse_integer (int c
)
1209 module_unget_char ();
1213 atom_int
= 10 * atom_int
+ c
- '0';
1214 if (atom_int
> 99999999)
1215 bad_module ("Integer overflow");
1237 if (!ISALNUM (c
) && c
!= '_' && c
!= '-')
1239 module_unget_char ();
1244 if (++len
> GFC_MAX_SYMBOL_LEN
)
1245 bad_module ("Name too long");
1253 /* Read the next atom in the module's input stream. */
1264 while (c
== ' ' || c
== '\r' || c
== '\n');
1289 return ATOM_INTEGER
;
1347 bad_module ("Bad name");
1354 /* Peek at the next atom on the input. */
1365 while (c
== ' ' || c
== '\r' || c
== '\n');
1370 module_unget_char ();
1374 module_unget_char ();
1378 module_unget_char ();
1391 module_unget_char ();
1392 return ATOM_INTEGER
;
1446 module_unget_char ();
1450 bad_module ("Bad name");
1455 /* Read the next atom from the input, requiring that it be a
1459 require_atom (atom_type type
)
1465 column
= module_column
;
1474 p
= _("Expected name");
1477 p
= _("Expected left parenthesis");
1480 p
= _("Expected right parenthesis");
1483 p
= _("Expected integer");
1486 p
= _("Expected string");
1489 gfc_internal_error ("require_atom(): bad atom type required");
1492 module_column
= column
;
1499 /* Given a pointer to an mstring array, require that the current input
1500 be one of the strings in the array. We return the enum value. */
1503 find_enum (const mstring
*m
)
1507 i
= gfc_string2code (m
, atom_name
);
1511 bad_module ("find_enum(): Enum not found");
1517 /* Read a string. The caller is responsible for freeing. */
1523 require_atom (ATOM_STRING
);
1530 /**************** Module output subroutines ***************************/
1532 /* Output a character to a module file. */
1535 write_char (char out
)
1537 if (gzputc (module_fp
, out
) == EOF
)
1538 gfc_fatal_error ("Error writing modules file: %s", xstrerror (errno
));
1550 /* Write an atom to a module. The line wrapping isn't perfect, but it
1551 should work most of the time. This isn't that big of a deal, since
1552 the file really isn't meant to be read by people anyway. */
1555 write_atom (atom_type atom
, const void *v
)
1565 p
= (const char *) v
;
1577 i
= *((const int *) v
);
1579 gfc_internal_error ("write_atom(): Writing negative integer");
1581 sprintf (buffer
, "%d", i
);
1586 gfc_internal_error ("write_atom(): Trying to write dab atom");
1590 if(p
== NULL
|| *p
== '\0')
1595 if (atom
!= ATOM_RPAREN
)
1597 if (module_column
+ len
> 72)
1602 if (last_atom
!= ATOM_LPAREN
&& module_column
!= 1)
1607 if (atom
== ATOM_STRING
)
1610 while (p
!= NULL
&& *p
)
1612 if (atom
== ATOM_STRING
&& *p
== '\'')
1617 if (atom
== ATOM_STRING
)
1625 /***************** Mid-level I/O subroutines *****************/
1627 /* These subroutines let their caller read or write atoms without
1628 caring about which of the two is actually happening. This lets a
1629 subroutine concentrate on the actual format of the data being
1632 static void mio_expr (gfc_expr
**);
1633 pointer_info
*mio_symbol_ref (gfc_symbol
**);
1634 pointer_info
*mio_interface_rest (gfc_interface
**);
1635 static void mio_symtree_ref (gfc_symtree
**);
1637 /* Read or write an enumerated value. On writing, we return the input
1638 value for the convenience of callers. We avoid using an integer
1639 pointer because enums are sometimes inside bitfields. */
1642 mio_name (int t
, const mstring
*m
)
1644 if (iomode
== IO_OUTPUT
)
1645 write_atom (ATOM_NAME
, gfc_code2string (m
, t
));
1648 require_atom (ATOM_NAME
);
1655 /* Specialization of mio_name. */
1657 #define DECL_MIO_NAME(TYPE) \
1658 static inline TYPE \
1659 MIO_NAME(TYPE) (TYPE t, const mstring *m) \
1661 return (TYPE) mio_name ((int) t, m); \
1663 #define MIO_NAME(TYPE) mio_name_##TYPE
1668 if (iomode
== IO_OUTPUT
)
1669 write_atom (ATOM_LPAREN
, NULL
);
1671 require_atom (ATOM_LPAREN
);
1678 if (iomode
== IO_OUTPUT
)
1679 write_atom (ATOM_RPAREN
, NULL
);
1681 require_atom (ATOM_RPAREN
);
1686 mio_integer (int *ip
)
1688 if (iomode
== IO_OUTPUT
)
1689 write_atom (ATOM_INTEGER
, ip
);
1692 require_atom (ATOM_INTEGER
);
1698 /* Read or write a gfc_intrinsic_op value. */
1701 mio_intrinsic_op (gfc_intrinsic_op
* op
)
1703 /* FIXME: Would be nicer to do this via the operators symbolic name. */
1704 if (iomode
== IO_OUTPUT
)
1706 int converted
= (int) *op
;
1707 write_atom (ATOM_INTEGER
, &converted
);
1711 require_atom (ATOM_INTEGER
);
1712 *op
= (gfc_intrinsic_op
) atom_int
;
1717 /* Read or write a character pointer that points to a string on the heap. */
1720 mio_allocated_string (const char *s
)
1722 if (iomode
== IO_OUTPUT
)
1724 write_atom (ATOM_STRING
, s
);
1729 require_atom (ATOM_STRING
);
1735 /* Functions for quoting and unquoting strings. */
1738 quote_string (const gfc_char_t
*s
, const size_t slength
)
1740 const gfc_char_t
*p
;
1744 /* Calculate the length we'll need: a backslash takes two ("\\"),
1745 non-printable characters take 10 ("\Uxxxxxxxx") and others take 1. */
1746 for (p
= s
, i
= 0; i
< slength
; p
++, i
++)
1750 else if (!gfc_wide_is_printable (*p
))
1756 q
= res
= XCNEWVEC (char, len
+ 1);
1757 for (p
= s
, i
= 0; i
< slength
; p
++, i
++)
1760 *q
++ = '\\', *q
++ = '\\';
1761 else if (!gfc_wide_is_printable (*p
))
1763 sprintf (q
, "\\U%08" HOST_WIDE_INT_PRINT
"x",
1764 (unsigned HOST_WIDE_INT
) *p
);
1768 *q
++ = (unsigned char) *p
;
1776 unquote_string (const char *s
)
1782 for (p
= s
, len
= 0; *p
; p
++, len
++)
1789 else if (p
[1] == 'U')
1790 p
+= 9; /* That is a "\U????????". */
1792 gfc_internal_error ("unquote_string(): got bad string");
1795 res
= gfc_get_wide_string (len
+ 1);
1796 for (i
= 0, p
= s
; i
< len
; i
++, p
++)
1801 res
[i
] = (unsigned char) *p
;
1802 else if (p
[1] == '\\')
1804 res
[i
] = (unsigned char) '\\';
1809 /* We read the 8-digits hexadecimal constant that follows. */
1814 gcc_assert (p
[1] == 'U');
1815 for (j
= 0; j
< 8; j
++)
1818 gcc_assert (sscanf (&p
[j
+2], "%01x", &n
) == 1);
1832 /* Read or write a character pointer that points to a wide string on the
1833 heap, performing quoting/unquoting of nonprintable characters using the
1834 form \U???????? (where each ? is a hexadecimal digit).
1835 Length is the length of the string, only known and used in output mode. */
1837 static const gfc_char_t
*
1838 mio_allocated_wide_string (const gfc_char_t
*s
, const size_t length
)
1840 if (iomode
== IO_OUTPUT
)
1842 char *quoted
= quote_string (s
, length
);
1843 write_atom (ATOM_STRING
, quoted
);
1849 gfc_char_t
*unquoted
;
1851 require_atom (ATOM_STRING
);
1852 unquoted
= unquote_string (atom_string
);
1859 /* Read or write a string that is in static memory. */
1862 mio_pool_string (const char **stringp
)
1864 /* TODO: one could write the string only once, and refer to it via a
1867 /* As a special case we have to deal with a NULL string. This
1868 happens for the 'module' member of 'gfc_symbol's that are not in a
1869 module. We read / write these as the empty string. */
1870 if (iomode
== IO_OUTPUT
)
1872 const char *p
= *stringp
== NULL
? "" : *stringp
;
1873 write_atom (ATOM_STRING
, p
);
1877 require_atom (ATOM_STRING
);
1878 *stringp
= atom_string
[0] == '\0' ? NULL
: gfc_get_string (atom_string
);
1884 /* Read or write a string that is inside of some already-allocated
1888 mio_internal_string (char *string
)
1890 if (iomode
== IO_OUTPUT
)
1891 write_atom (ATOM_STRING
, string
);
1894 require_atom (ATOM_STRING
);
1895 strcpy (string
, atom_string
);
1902 { AB_ALLOCATABLE
, AB_DIMENSION
, AB_EXTERNAL
, AB_INTRINSIC
, AB_OPTIONAL
,
1903 AB_POINTER
, AB_TARGET
, AB_DUMMY
, AB_RESULT
, AB_DATA
,
1904 AB_IN_NAMELIST
, AB_IN_COMMON
, AB_FUNCTION
, AB_SUBROUTINE
, AB_SEQUENCE
,
1905 AB_ELEMENTAL
, AB_PURE
, AB_RECURSIVE
, AB_GENERIC
, AB_ALWAYS_EXPLICIT
,
1906 AB_CRAY_POINTER
, AB_CRAY_POINTEE
, AB_THREADPRIVATE
,
1907 AB_ALLOC_COMP
, AB_POINTER_COMP
, AB_PROC_POINTER_COMP
, AB_PRIVATE_COMP
,
1908 AB_VALUE
, AB_VOLATILE
, AB_PROTECTED
, AB_LOCK_COMP
,
1909 AB_IS_BIND_C
, AB_IS_C_INTEROP
, AB_IS_ISO_C
, AB_ABSTRACT
, AB_ZERO_COMP
,
1910 AB_IS_CLASS
, AB_PROCEDURE
, AB_PROC_POINTER
, AB_ASYNCHRONOUS
, AB_CODIMENSION
,
1911 AB_COARRAY_COMP
, AB_VTYPE
, AB_VTAB
, AB_CONTIGUOUS
, AB_CLASS_POINTER
,
1912 AB_IMPLICIT_PURE
, AB_ARTIFICIAL
, AB_UNLIMITED_POLY
1916 static const mstring attr_bits
[] =
1918 minit ("ALLOCATABLE", AB_ALLOCATABLE
),
1919 minit ("ARTIFICIAL", AB_ARTIFICIAL
),
1920 minit ("ASYNCHRONOUS", AB_ASYNCHRONOUS
),
1921 minit ("DIMENSION", AB_DIMENSION
),
1922 minit ("CODIMENSION", AB_CODIMENSION
),
1923 minit ("CONTIGUOUS", AB_CONTIGUOUS
),
1924 minit ("EXTERNAL", AB_EXTERNAL
),
1925 minit ("INTRINSIC", AB_INTRINSIC
),
1926 minit ("OPTIONAL", AB_OPTIONAL
),
1927 minit ("POINTER", AB_POINTER
),
1928 minit ("VOLATILE", AB_VOLATILE
),
1929 minit ("TARGET", AB_TARGET
),
1930 minit ("THREADPRIVATE", AB_THREADPRIVATE
),
1931 minit ("DUMMY", AB_DUMMY
),
1932 minit ("RESULT", AB_RESULT
),
1933 minit ("DATA", AB_DATA
),
1934 minit ("IN_NAMELIST", AB_IN_NAMELIST
),
1935 minit ("IN_COMMON", AB_IN_COMMON
),
1936 minit ("FUNCTION", AB_FUNCTION
),
1937 minit ("SUBROUTINE", AB_SUBROUTINE
),
1938 minit ("SEQUENCE", AB_SEQUENCE
),
1939 minit ("ELEMENTAL", AB_ELEMENTAL
),
1940 minit ("PURE", AB_PURE
),
1941 minit ("RECURSIVE", AB_RECURSIVE
),
1942 minit ("GENERIC", AB_GENERIC
),
1943 minit ("ALWAYS_EXPLICIT", AB_ALWAYS_EXPLICIT
),
1944 minit ("CRAY_POINTER", AB_CRAY_POINTER
),
1945 minit ("CRAY_POINTEE", AB_CRAY_POINTEE
),
1946 minit ("IS_BIND_C", AB_IS_BIND_C
),
1947 minit ("IS_C_INTEROP", AB_IS_C_INTEROP
),
1948 minit ("IS_ISO_C", AB_IS_ISO_C
),
1949 minit ("VALUE", AB_VALUE
),
1950 minit ("ALLOC_COMP", AB_ALLOC_COMP
),
1951 minit ("COARRAY_COMP", AB_COARRAY_COMP
),
1952 minit ("LOCK_COMP", AB_LOCK_COMP
),
1953 minit ("POINTER_COMP", AB_POINTER_COMP
),
1954 minit ("PROC_POINTER_COMP", AB_PROC_POINTER_COMP
),
1955 minit ("PRIVATE_COMP", AB_PRIVATE_COMP
),
1956 minit ("ZERO_COMP", AB_ZERO_COMP
),
1957 minit ("PROTECTED", AB_PROTECTED
),
1958 minit ("ABSTRACT", AB_ABSTRACT
),
1959 minit ("IS_CLASS", AB_IS_CLASS
),
1960 minit ("PROCEDURE", AB_PROCEDURE
),
1961 minit ("PROC_POINTER", AB_PROC_POINTER
),
1962 minit ("VTYPE", AB_VTYPE
),
1963 minit ("VTAB", AB_VTAB
),
1964 minit ("CLASS_POINTER", AB_CLASS_POINTER
),
1965 minit ("IMPLICIT_PURE", AB_IMPLICIT_PURE
),
1966 minit ("UNLIMITED_POLY", AB_UNLIMITED_POLY
),
1970 /* For binding attributes. */
1971 static const mstring binding_passing
[] =
1974 minit ("NOPASS", 1),
1977 static const mstring binding_overriding
[] =
1979 minit ("OVERRIDABLE", 0),
1980 minit ("NON_OVERRIDABLE", 1),
1981 minit ("DEFERRED", 2),
1984 static const mstring binding_generic
[] =
1986 minit ("SPECIFIC", 0),
1987 minit ("GENERIC", 1),
1990 static const mstring binding_ppc
[] =
1992 minit ("NO_PPC", 0),
1997 /* Specialization of mio_name. */
1998 DECL_MIO_NAME (ab_attribute
)
1999 DECL_MIO_NAME (ar_type
)
2000 DECL_MIO_NAME (array_type
)
2002 DECL_MIO_NAME (expr_t
)
2003 DECL_MIO_NAME (gfc_access
)
2004 DECL_MIO_NAME (gfc_intrinsic_op
)
2005 DECL_MIO_NAME (ifsrc
)
2006 DECL_MIO_NAME (save_state
)
2007 DECL_MIO_NAME (procedure_type
)
2008 DECL_MIO_NAME (ref_type
)
2009 DECL_MIO_NAME (sym_flavor
)
2010 DECL_MIO_NAME (sym_intent
)
2011 #undef DECL_MIO_NAME
2013 /* Symbol attributes are stored in list with the first three elements
2014 being the enumerated fields, while the remaining elements (if any)
2015 indicate the individual attribute bits. The access field is not
2016 saved-- it controls what symbols are exported when a module is
2020 mio_symbol_attribute (symbol_attribute
*attr
)
2023 unsigned ext_attr
,extension_level
;
2027 attr
->flavor
= MIO_NAME (sym_flavor
) (attr
->flavor
, flavors
);
2028 attr
->intent
= MIO_NAME (sym_intent
) (attr
->intent
, intents
);
2029 attr
->proc
= MIO_NAME (procedure_type
) (attr
->proc
, procedures
);
2030 attr
->if_source
= MIO_NAME (ifsrc
) (attr
->if_source
, ifsrc_types
);
2031 attr
->save
= MIO_NAME (save_state
) (attr
->save
, save_status
);
2033 ext_attr
= attr
->ext_attr
;
2034 mio_integer ((int *) &ext_attr
);
2035 attr
->ext_attr
= ext_attr
;
2037 extension_level
= attr
->extension
;
2038 mio_integer ((int *) &extension_level
);
2039 attr
->extension
= extension_level
;
2041 if (iomode
== IO_OUTPUT
)
2043 if (attr
->allocatable
)
2044 MIO_NAME (ab_attribute
) (AB_ALLOCATABLE
, attr_bits
);
2045 if (attr
->artificial
)
2046 MIO_NAME (ab_attribute
) (AB_ARTIFICIAL
, attr_bits
);
2047 if (attr
->asynchronous
)
2048 MIO_NAME (ab_attribute
) (AB_ASYNCHRONOUS
, attr_bits
);
2049 if (attr
->dimension
)
2050 MIO_NAME (ab_attribute
) (AB_DIMENSION
, attr_bits
);
2051 if (attr
->codimension
)
2052 MIO_NAME (ab_attribute
) (AB_CODIMENSION
, attr_bits
);
2053 if (attr
->contiguous
)
2054 MIO_NAME (ab_attribute
) (AB_CONTIGUOUS
, attr_bits
);
2056 MIO_NAME (ab_attribute
) (AB_EXTERNAL
, attr_bits
);
2057 if (attr
->intrinsic
)
2058 MIO_NAME (ab_attribute
) (AB_INTRINSIC
, attr_bits
);
2060 MIO_NAME (ab_attribute
) (AB_OPTIONAL
, attr_bits
);
2062 MIO_NAME (ab_attribute
) (AB_POINTER
, attr_bits
);
2063 if (attr
->class_pointer
)
2064 MIO_NAME (ab_attribute
) (AB_CLASS_POINTER
, attr_bits
);
2065 if (attr
->is_protected
)
2066 MIO_NAME (ab_attribute
) (AB_PROTECTED
, attr_bits
);
2068 MIO_NAME (ab_attribute
) (AB_VALUE
, attr_bits
);
2069 if (attr
->volatile_
)
2070 MIO_NAME (ab_attribute
) (AB_VOLATILE
, attr_bits
);
2072 MIO_NAME (ab_attribute
) (AB_TARGET
, attr_bits
);
2073 if (attr
->threadprivate
)
2074 MIO_NAME (ab_attribute
) (AB_THREADPRIVATE
, attr_bits
);
2076 MIO_NAME (ab_attribute
) (AB_DUMMY
, attr_bits
);
2078 MIO_NAME (ab_attribute
) (AB_RESULT
, attr_bits
);
2079 /* We deliberately don't preserve the "entry" flag. */
2082 MIO_NAME (ab_attribute
) (AB_DATA
, attr_bits
);
2083 if (attr
->in_namelist
)
2084 MIO_NAME (ab_attribute
) (AB_IN_NAMELIST
, attr_bits
);
2085 if (attr
->in_common
)
2086 MIO_NAME (ab_attribute
) (AB_IN_COMMON
, attr_bits
);
2089 MIO_NAME (ab_attribute
) (AB_FUNCTION
, attr_bits
);
2090 if (attr
->subroutine
)
2091 MIO_NAME (ab_attribute
) (AB_SUBROUTINE
, attr_bits
);
2093 MIO_NAME (ab_attribute
) (AB_GENERIC
, attr_bits
);
2095 MIO_NAME (ab_attribute
) (AB_ABSTRACT
, attr_bits
);
2098 MIO_NAME (ab_attribute
) (AB_SEQUENCE
, attr_bits
);
2099 if (attr
->elemental
)
2100 MIO_NAME (ab_attribute
) (AB_ELEMENTAL
, attr_bits
);
2102 MIO_NAME (ab_attribute
) (AB_PURE
, attr_bits
);
2103 if (attr
->implicit_pure
)
2104 MIO_NAME (ab_attribute
) (AB_IMPLICIT_PURE
, attr_bits
);
2105 if (attr
->unlimited_polymorphic
)
2106 MIO_NAME (ab_attribute
) (AB_UNLIMITED_POLY
, attr_bits
);
2107 if (attr
->recursive
)
2108 MIO_NAME (ab_attribute
) (AB_RECURSIVE
, attr_bits
);
2109 if (attr
->always_explicit
)
2110 MIO_NAME (ab_attribute
) (AB_ALWAYS_EXPLICIT
, attr_bits
);
2111 if (attr
->cray_pointer
)
2112 MIO_NAME (ab_attribute
) (AB_CRAY_POINTER
, attr_bits
);
2113 if (attr
->cray_pointee
)
2114 MIO_NAME (ab_attribute
) (AB_CRAY_POINTEE
, attr_bits
);
2115 if (attr
->is_bind_c
)
2116 MIO_NAME(ab_attribute
) (AB_IS_BIND_C
, attr_bits
);
2117 if (attr
->is_c_interop
)
2118 MIO_NAME(ab_attribute
) (AB_IS_C_INTEROP
, attr_bits
);
2120 MIO_NAME(ab_attribute
) (AB_IS_ISO_C
, attr_bits
);
2121 if (attr
->alloc_comp
)
2122 MIO_NAME (ab_attribute
) (AB_ALLOC_COMP
, attr_bits
);
2123 if (attr
->pointer_comp
)
2124 MIO_NAME (ab_attribute
) (AB_POINTER_COMP
, attr_bits
);
2125 if (attr
->proc_pointer_comp
)
2126 MIO_NAME (ab_attribute
) (AB_PROC_POINTER_COMP
, attr_bits
);
2127 if (attr
->private_comp
)
2128 MIO_NAME (ab_attribute
) (AB_PRIVATE_COMP
, attr_bits
);
2129 if (attr
->coarray_comp
)
2130 MIO_NAME (ab_attribute
) (AB_COARRAY_COMP
, attr_bits
);
2131 if (attr
->lock_comp
)
2132 MIO_NAME (ab_attribute
) (AB_LOCK_COMP
, attr_bits
);
2133 if (attr
->zero_comp
)
2134 MIO_NAME (ab_attribute
) (AB_ZERO_COMP
, attr_bits
);
2136 MIO_NAME (ab_attribute
) (AB_IS_CLASS
, attr_bits
);
2137 if (attr
->procedure
)
2138 MIO_NAME (ab_attribute
) (AB_PROCEDURE
, attr_bits
);
2139 if (attr
->proc_pointer
)
2140 MIO_NAME (ab_attribute
) (AB_PROC_POINTER
, attr_bits
);
2142 MIO_NAME (ab_attribute
) (AB_VTYPE
, attr_bits
);
2144 MIO_NAME (ab_attribute
) (AB_VTAB
, attr_bits
);
2154 if (t
== ATOM_RPAREN
)
2157 bad_module ("Expected attribute bit name");
2159 switch ((ab_attribute
) find_enum (attr_bits
))
2161 case AB_ALLOCATABLE
:
2162 attr
->allocatable
= 1;
2165 attr
->artificial
= 1;
2167 case AB_ASYNCHRONOUS
:
2168 attr
->asynchronous
= 1;
2171 attr
->dimension
= 1;
2173 case AB_CODIMENSION
:
2174 attr
->codimension
= 1;
2177 attr
->contiguous
= 1;
2183 attr
->intrinsic
= 1;
2191 case AB_CLASS_POINTER
:
2192 attr
->class_pointer
= 1;
2195 attr
->is_protected
= 1;
2201 attr
->volatile_
= 1;
2206 case AB_THREADPRIVATE
:
2207 attr
->threadprivate
= 1;
2218 case AB_IN_NAMELIST
:
2219 attr
->in_namelist
= 1;
2222 attr
->in_common
= 1;
2228 attr
->subroutine
= 1;
2240 attr
->elemental
= 1;
2245 case AB_IMPLICIT_PURE
:
2246 attr
->implicit_pure
= 1;
2248 case AB_UNLIMITED_POLY
:
2249 attr
->unlimited_polymorphic
= 1;
2252 attr
->recursive
= 1;
2254 case AB_ALWAYS_EXPLICIT
:
2255 attr
->always_explicit
= 1;
2257 case AB_CRAY_POINTER
:
2258 attr
->cray_pointer
= 1;
2260 case AB_CRAY_POINTEE
:
2261 attr
->cray_pointee
= 1;
2264 attr
->is_bind_c
= 1;
2266 case AB_IS_C_INTEROP
:
2267 attr
->is_c_interop
= 1;
2273 attr
->alloc_comp
= 1;
2275 case AB_COARRAY_COMP
:
2276 attr
->coarray_comp
= 1;
2279 attr
->lock_comp
= 1;
2281 case AB_POINTER_COMP
:
2282 attr
->pointer_comp
= 1;
2284 case AB_PROC_POINTER_COMP
:
2285 attr
->proc_pointer_comp
= 1;
2287 case AB_PRIVATE_COMP
:
2288 attr
->private_comp
= 1;
2291 attr
->zero_comp
= 1;
2297 attr
->procedure
= 1;
2299 case AB_PROC_POINTER
:
2300 attr
->proc_pointer
= 1;
2314 static const mstring bt_types
[] = {
2315 minit ("INTEGER", BT_INTEGER
),
2316 minit ("REAL", BT_REAL
),
2317 minit ("COMPLEX", BT_COMPLEX
),
2318 minit ("LOGICAL", BT_LOGICAL
),
2319 minit ("CHARACTER", BT_CHARACTER
),
2320 minit ("DERIVED", BT_DERIVED
),
2321 minit ("CLASS", BT_CLASS
),
2322 minit ("PROCEDURE", BT_PROCEDURE
),
2323 minit ("UNKNOWN", BT_UNKNOWN
),
2324 minit ("VOID", BT_VOID
),
2325 minit ("ASSUMED", BT_ASSUMED
),
2331 mio_charlen (gfc_charlen
**clp
)
2337 if (iomode
== IO_OUTPUT
)
2341 mio_expr (&cl
->length
);
2345 if (peek_atom () != ATOM_RPAREN
)
2347 cl
= gfc_new_charlen (gfc_current_ns
, NULL
);
2348 mio_expr (&cl
->length
);
2357 /* See if a name is a generated name. */
2360 check_unique_name (const char *name
)
2362 return *name
== '@';
2367 mio_typespec (gfc_typespec
*ts
)
2371 ts
->type
= MIO_NAME (bt
) (ts
->type
, bt_types
);
2373 if (ts
->type
!= BT_DERIVED
&& ts
->type
!= BT_CLASS
)
2374 mio_integer (&ts
->kind
);
2376 mio_symbol_ref (&ts
->u
.derived
);
2378 mio_symbol_ref (&ts
->interface
);
2380 /* Add info for C interop and is_iso_c. */
2381 mio_integer (&ts
->is_c_interop
);
2382 mio_integer (&ts
->is_iso_c
);
2384 /* If the typespec is for an identifier either from iso_c_binding, or
2385 a constant that was initialized to an identifier from it, use the
2386 f90_type. Otherwise, use the ts->type, since it shouldn't matter. */
2388 ts
->f90_type
= MIO_NAME (bt
) (ts
->f90_type
, bt_types
);
2390 ts
->f90_type
= MIO_NAME (bt
) (ts
->type
, bt_types
);
2392 if (ts
->type
!= BT_CHARACTER
)
2394 /* ts->u.cl is only valid for BT_CHARACTER. */
2399 mio_charlen (&ts
->u
.cl
);
2401 /* So as not to disturb the existing API, use an ATOM_NAME to
2402 transmit deferred characteristic for characters (F2003). */
2403 if (iomode
== IO_OUTPUT
)
2405 if (ts
->type
== BT_CHARACTER
&& ts
->deferred
)
2406 write_atom (ATOM_NAME
, "DEFERRED_CL");
2408 else if (peek_atom () != ATOM_RPAREN
)
2410 if (parse_atom () != ATOM_NAME
)
2411 bad_module ("Expected string");
2419 static const mstring array_spec_types
[] = {
2420 minit ("EXPLICIT", AS_EXPLICIT
),
2421 minit ("ASSUMED_RANK", AS_ASSUMED_RANK
),
2422 minit ("ASSUMED_SHAPE", AS_ASSUMED_SHAPE
),
2423 minit ("DEFERRED", AS_DEFERRED
),
2424 minit ("ASSUMED_SIZE", AS_ASSUMED_SIZE
),
2430 mio_array_spec (gfc_array_spec
**asp
)
2437 if (iomode
== IO_OUTPUT
)
2445 /* mio_integer expects nonnegative values. */
2446 rank
= as
->rank
> 0 ? as
->rank
: 0;
2447 mio_integer (&rank
);
2451 if (peek_atom () == ATOM_RPAREN
)
2457 *asp
= as
= gfc_get_array_spec ();
2458 mio_integer (&as
->rank
);
2461 mio_integer (&as
->corank
);
2462 as
->type
= MIO_NAME (array_type
) (as
->type
, array_spec_types
);
2464 if (iomode
== IO_INPUT
&& as
->type
== AS_ASSUMED_RANK
)
2466 if (iomode
== IO_INPUT
&& as
->corank
)
2467 as
->cotype
= (as
->type
== AS_DEFERRED
) ? AS_DEFERRED
: AS_EXPLICIT
;
2469 if (as
->rank
+ as
->corank
> 0)
2470 for (i
= 0; i
< as
->rank
+ as
->corank
; i
++)
2472 mio_expr (&as
->lower
[i
]);
2473 mio_expr (&as
->upper
[i
]);
2481 /* Given a pointer to an array reference structure (which lives in a
2482 gfc_ref structure), find the corresponding array specification
2483 structure. Storing the pointer in the ref structure doesn't quite
2484 work when loading from a module. Generating code for an array
2485 reference also needs more information than just the array spec. */
2487 static const mstring array_ref_types
[] = {
2488 minit ("FULL", AR_FULL
),
2489 minit ("ELEMENT", AR_ELEMENT
),
2490 minit ("SECTION", AR_SECTION
),
2496 mio_array_ref (gfc_array_ref
*ar
)
2501 ar
->type
= MIO_NAME (ar_type
) (ar
->type
, array_ref_types
);
2502 mio_integer (&ar
->dimen
);
2510 for (i
= 0; i
< ar
->dimen
; i
++)
2511 mio_expr (&ar
->start
[i
]);
2516 for (i
= 0; i
< ar
->dimen
; i
++)
2518 mio_expr (&ar
->start
[i
]);
2519 mio_expr (&ar
->end
[i
]);
2520 mio_expr (&ar
->stride
[i
]);
2526 gfc_internal_error ("mio_array_ref(): Unknown array ref");
2529 /* Unfortunately, ar->dimen_type is an anonymous enumerated type so
2530 we can't call mio_integer directly. Instead loop over each element
2531 and cast it to/from an integer. */
2532 if (iomode
== IO_OUTPUT
)
2534 for (i
= 0; i
< ar
->dimen
; i
++)
2536 int tmp
= (int)ar
->dimen_type
[i
];
2537 write_atom (ATOM_INTEGER
, &tmp
);
2542 for (i
= 0; i
< ar
->dimen
; i
++)
2544 require_atom (ATOM_INTEGER
);
2545 ar
->dimen_type
[i
] = (enum gfc_array_ref_dimen_type
) atom_int
;
2549 if (iomode
== IO_INPUT
)
2551 ar
->where
= gfc_current_locus
;
2553 for (i
= 0; i
< ar
->dimen
; i
++)
2554 ar
->c_where
[i
] = gfc_current_locus
;
2561 /* Saves or restores a pointer. The pointer is converted back and
2562 forth from an integer. We return the pointer_info pointer so that
2563 the caller can take additional action based on the pointer type. */
2565 static pointer_info
*
2566 mio_pointer_ref (void *gp
)
2570 if (iomode
== IO_OUTPUT
)
2572 p
= get_pointer (*((char **) gp
));
2573 write_atom (ATOM_INTEGER
, &p
->integer
);
2577 require_atom (ATOM_INTEGER
);
2578 p
= add_fixup (atom_int
, gp
);
2585 /* Save and load references to components that occur within
2586 expressions. We have to describe these references by a number and
2587 by name. The number is necessary for forward references during
2588 reading, and the name is necessary if the symbol already exists in
2589 the namespace and is not loaded again. */
2592 mio_component_ref (gfc_component
**cp
, gfc_symbol
*sym
)
2594 char name
[GFC_MAX_SYMBOL_LEN
+ 1];
2598 p
= mio_pointer_ref (cp
);
2599 if (p
->type
== P_UNKNOWN
)
2600 p
->type
= P_COMPONENT
;
2602 if (iomode
== IO_OUTPUT
)
2603 mio_pool_string (&(*cp
)->name
);
2606 mio_internal_string (name
);
2608 if (sym
&& sym
->attr
.is_class
)
2609 sym
= sym
->components
->ts
.u
.derived
;
2611 /* It can happen that a component reference can be read before the
2612 associated derived type symbol has been loaded. Return now and
2613 wait for a later iteration of load_needed. */
2617 if (sym
->components
!= NULL
&& p
->u
.pointer
== NULL
)
2619 /* Symbol already loaded, so search by name. */
2620 q
= gfc_find_component (sym
, name
, true, true);
2623 associate_integer_pointer (p
, q
);
2626 /* Make sure this symbol will eventually be loaded. */
2627 p
= find_pointer2 (sym
);
2628 if (p
->u
.rsym
.state
== UNUSED
)
2629 p
->u
.rsym
.state
= NEEDED
;
2634 static void mio_namespace_ref (gfc_namespace
**nsp
);
2635 static void mio_formal_arglist (gfc_formal_arglist
**formal
);
2636 static void mio_typebound_proc (gfc_typebound_proc
** proc
);
2639 mio_component (gfc_component
*c
, int vtype
)
2646 if (iomode
== IO_OUTPUT
)
2648 p
= get_pointer (c
);
2649 mio_integer (&p
->integer
);
2654 p
= get_integer (n
);
2655 associate_integer_pointer (p
, c
);
2658 if (p
->type
== P_UNKNOWN
)
2659 p
->type
= P_COMPONENT
;
2661 mio_pool_string (&c
->name
);
2662 mio_typespec (&c
->ts
);
2663 mio_array_spec (&c
->as
);
2665 mio_symbol_attribute (&c
->attr
);
2666 if (c
->ts
.type
== BT_CLASS
)
2667 c
->attr
.class_ok
= 1;
2668 c
->attr
.access
= MIO_NAME (gfc_access
) (c
->attr
.access
, access_types
);
2670 if (!vtype
|| strcmp (c
->name
, "_final") == 0
2671 || strcmp (c
->name
, "_hash") == 0)
2672 mio_expr (&c
->initializer
);
2674 if (c
->attr
.proc_pointer
)
2675 mio_typebound_proc (&c
->tb
);
2682 mio_component_list (gfc_component
**cp
, int vtype
)
2684 gfc_component
*c
, *tail
;
2688 if (iomode
== IO_OUTPUT
)
2690 for (c
= *cp
; c
; c
= c
->next
)
2691 mio_component (c
, vtype
);
2700 if (peek_atom () == ATOM_RPAREN
)
2703 c
= gfc_get_component ();
2704 mio_component (c
, vtype
);
2720 mio_actual_arg (gfc_actual_arglist
*a
)
2723 mio_pool_string (&a
->name
);
2724 mio_expr (&a
->expr
);
2730 mio_actual_arglist (gfc_actual_arglist
**ap
)
2732 gfc_actual_arglist
*a
, *tail
;
2736 if (iomode
== IO_OUTPUT
)
2738 for (a
= *ap
; a
; a
= a
->next
)
2748 if (peek_atom () != ATOM_LPAREN
)
2751 a
= gfc_get_actual_arglist ();
2767 /* Read and write formal argument lists. */
2770 mio_formal_arglist (gfc_formal_arglist
**formal
)
2772 gfc_formal_arglist
*f
, *tail
;
2776 if (iomode
== IO_OUTPUT
)
2778 for (f
= *formal
; f
; f
= f
->next
)
2779 mio_symbol_ref (&f
->sym
);
2783 *formal
= tail
= NULL
;
2785 while (peek_atom () != ATOM_RPAREN
)
2787 f
= gfc_get_formal_arglist ();
2788 mio_symbol_ref (&f
->sym
);
2790 if (*formal
== NULL
)
2803 /* Save or restore a reference to a symbol node. */
2806 mio_symbol_ref (gfc_symbol
**symp
)
2810 p
= mio_pointer_ref (symp
);
2811 if (p
->type
== P_UNKNOWN
)
2814 if (iomode
== IO_OUTPUT
)
2816 if (p
->u
.wsym
.state
== UNREFERENCED
)
2817 p
->u
.wsym
.state
= NEEDS_WRITE
;
2821 if (p
->u
.rsym
.state
== UNUSED
)
2822 p
->u
.rsym
.state
= NEEDED
;
2828 /* Save or restore a reference to a symtree node. */
2831 mio_symtree_ref (gfc_symtree
**stp
)
2836 if (iomode
== IO_OUTPUT
)
2837 mio_symbol_ref (&(*stp
)->n
.sym
);
2840 require_atom (ATOM_INTEGER
);
2841 p
= get_integer (atom_int
);
2843 /* An unused equivalence member; make a symbol and a symtree
2845 if (in_load_equiv
&& p
->u
.rsym
.symtree
== NULL
)
2847 /* Since this is not used, it must have a unique name. */
2848 p
->u
.rsym
.symtree
= gfc_get_unique_symtree (gfc_current_ns
);
2850 /* Make the symbol. */
2851 if (p
->u
.rsym
.sym
== NULL
)
2853 p
->u
.rsym
.sym
= gfc_new_symbol (p
->u
.rsym
.true_name
,
2855 p
->u
.rsym
.sym
->module
= gfc_get_string (p
->u
.rsym
.module
);
2858 p
->u
.rsym
.symtree
->n
.sym
= p
->u
.rsym
.sym
;
2859 p
->u
.rsym
.symtree
->n
.sym
->refs
++;
2860 p
->u
.rsym
.referenced
= 1;
2862 /* If the symbol is PRIVATE and in COMMON, load_commons will
2863 generate a fixup symbol, which must be associated. */
2865 resolve_fixups (p
->fixup
, p
->u
.rsym
.sym
);
2869 if (p
->type
== P_UNKNOWN
)
2872 if (p
->u
.rsym
.state
== UNUSED
)
2873 p
->u
.rsym
.state
= NEEDED
;
2875 if (p
->u
.rsym
.symtree
!= NULL
)
2877 *stp
= p
->u
.rsym
.symtree
;
2881 f
= XCNEW (fixup_t
);
2883 f
->next
= p
->u
.rsym
.stfixup
;
2884 p
->u
.rsym
.stfixup
= f
;
2886 f
->pointer
= (void **) stp
;
2893 mio_iterator (gfc_iterator
**ip
)
2899 if (iomode
== IO_OUTPUT
)
2906 if (peek_atom () == ATOM_RPAREN
)
2912 *ip
= gfc_get_iterator ();
2917 mio_expr (&iter
->var
);
2918 mio_expr (&iter
->start
);
2919 mio_expr (&iter
->end
);
2920 mio_expr (&iter
->step
);
2928 mio_constructor (gfc_constructor_base
*cp
)
2934 if (iomode
== IO_OUTPUT
)
2936 for (c
= gfc_constructor_first (*cp
); c
; c
= gfc_constructor_next (c
))
2939 mio_expr (&c
->expr
);
2940 mio_iterator (&c
->iterator
);
2946 while (peek_atom () != ATOM_RPAREN
)
2948 c
= gfc_constructor_append_expr (cp
, NULL
, NULL
);
2951 mio_expr (&c
->expr
);
2952 mio_iterator (&c
->iterator
);
2961 static const mstring ref_types
[] = {
2962 minit ("ARRAY", REF_ARRAY
),
2963 minit ("COMPONENT", REF_COMPONENT
),
2964 minit ("SUBSTRING", REF_SUBSTRING
),
2970 mio_ref (gfc_ref
**rp
)
2977 r
->type
= MIO_NAME (ref_type
) (r
->type
, ref_types
);
2982 mio_array_ref (&r
->u
.ar
);
2986 mio_symbol_ref (&r
->u
.c
.sym
);
2987 mio_component_ref (&r
->u
.c
.component
, r
->u
.c
.sym
);
2991 mio_expr (&r
->u
.ss
.start
);
2992 mio_expr (&r
->u
.ss
.end
);
2993 mio_charlen (&r
->u
.ss
.length
);
3002 mio_ref_list (gfc_ref
**rp
)
3004 gfc_ref
*ref
, *head
, *tail
;
3008 if (iomode
== IO_OUTPUT
)
3010 for (ref
= *rp
; ref
; ref
= ref
->next
)
3017 while (peek_atom () != ATOM_RPAREN
)
3020 head
= tail
= gfc_get_ref ();
3023 tail
->next
= gfc_get_ref ();
3037 /* Read and write an integer value. */
3040 mio_gmp_integer (mpz_t
*integer
)
3044 if (iomode
== IO_INPUT
)
3046 if (parse_atom () != ATOM_STRING
)
3047 bad_module ("Expected integer string");
3049 mpz_init (*integer
);
3050 if (mpz_set_str (*integer
, atom_string
, 10))
3051 bad_module ("Error converting integer");
3057 p
= mpz_get_str (NULL
, 10, *integer
);
3058 write_atom (ATOM_STRING
, p
);
3065 mio_gmp_real (mpfr_t
*real
)
3070 if (iomode
== IO_INPUT
)
3072 if (parse_atom () != ATOM_STRING
)
3073 bad_module ("Expected real string");
3076 mpfr_set_str (*real
, atom_string
, 16, GFC_RND_MODE
);
3081 p
= mpfr_get_str (NULL
, &exponent
, 16, 0, *real
, GFC_RND_MODE
);
3083 if (mpfr_nan_p (*real
) || mpfr_inf_p (*real
))
3085 write_atom (ATOM_STRING
, p
);
3090 atom_string
= XCNEWVEC (char, strlen (p
) + 20);
3092 sprintf (atom_string
, "0.%s@%ld", p
, exponent
);
3094 /* Fix negative numbers. */
3095 if (atom_string
[2] == '-')
3097 atom_string
[0] = '-';
3098 atom_string
[1] = '0';
3099 atom_string
[2] = '.';
3102 write_atom (ATOM_STRING
, atom_string
);
3110 /* Save and restore the shape of an array constructor. */
3113 mio_shape (mpz_t
**pshape
, int rank
)
3119 /* A NULL shape is represented by (). */
3122 if (iomode
== IO_OUTPUT
)
3134 if (t
== ATOM_RPAREN
)
3141 shape
= gfc_get_shape (rank
);
3145 for (n
= 0; n
< rank
; n
++)
3146 mio_gmp_integer (&shape
[n
]);
3152 static const mstring expr_types
[] = {
3153 minit ("OP", EXPR_OP
),
3154 minit ("FUNCTION", EXPR_FUNCTION
),
3155 minit ("CONSTANT", EXPR_CONSTANT
),
3156 minit ("VARIABLE", EXPR_VARIABLE
),
3157 minit ("SUBSTRING", EXPR_SUBSTRING
),
3158 minit ("STRUCTURE", EXPR_STRUCTURE
),
3159 minit ("ARRAY", EXPR_ARRAY
),
3160 minit ("NULL", EXPR_NULL
),
3161 minit ("COMPCALL", EXPR_COMPCALL
),
3165 /* INTRINSIC_ASSIGN is missing because it is used as an index for
3166 generic operators, not in expressions. INTRINSIC_USER is also
3167 replaced by the correct function name by the time we see it. */
3169 static const mstring intrinsics
[] =
3171 minit ("UPLUS", INTRINSIC_UPLUS
),
3172 minit ("UMINUS", INTRINSIC_UMINUS
),
3173 minit ("PLUS", INTRINSIC_PLUS
),
3174 minit ("MINUS", INTRINSIC_MINUS
),
3175 minit ("TIMES", INTRINSIC_TIMES
),
3176 minit ("DIVIDE", INTRINSIC_DIVIDE
),
3177 minit ("POWER", INTRINSIC_POWER
),
3178 minit ("CONCAT", INTRINSIC_CONCAT
),
3179 minit ("AND", INTRINSIC_AND
),
3180 minit ("OR", INTRINSIC_OR
),
3181 minit ("EQV", INTRINSIC_EQV
),
3182 minit ("NEQV", INTRINSIC_NEQV
),
3183 minit ("EQ_SIGN", INTRINSIC_EQ
),
3184 minit ("EQ", INTRINSIC_EQ_OS
),
3185 minit ("NE_SIGN", INTRINSIC_NE
),
3186 minit ("NE", INTRINSIC_NE_OS
),
3187 minit ("GT_SIGN", INTRINSIC_GT
),
3188 minit ("GT", INTRINSIC_GT_OS
),
3189 minit ("GE_SIGN", INTRINSIC_GE
),
3190 minit ("GE", INTRINSIC_GE_OS
),
3191 minit ("LT_SIGN", INTRINSIC_LT
),
3192 minit ("LT", INTRINSIC_LT_OS
),
3193 minit ("LE_SIGN", INTRINSIC_LE
),
3194 minit ("LE", INTRINSIC_LE_OS
),
3195 minit ("NOT", INTRINSIC_NOT
),
3196 minit ("PARENTHESES", INTRINSIC_PARENTHESES
),
3201 /* Remedy a couple of situations where the gfc_expr's can be defective. */
3204 fix_mio_expr (gfc_expr
*e
)
3206 gfc_symtree
*ns_st
= NULL
;
3209 if (iomode
!= IO_OUTPUT
)
3214 /* If this is a symtree for a symbol that came from a contained module
3215 namespace, it has a unique name and we should look in the current
3216 namespace to see if the required, non-contained symbol is available
3217 yet. If so, the latter should be written. */
3218 if (e
->symtree
->n
.sym
&& check_unique_name (e
->symtree
->name
))
3220 const char *name
= e
->symtree
->n
.sym
->name
;
3221 if (e
->symtree
->n
.sym
->attr
.flavor
== FL_DERIVED
)
3222 name
= dt_upper_string (name
);
3223 ns_st
= gfc_find_symtree (gfc_current_ns
->sym_root
, name
);
3226 /* On the other hand, if the existing symbol is the module name or the
3227 new symbol is a dummy argument, do not do the promotion. */
3228 if (ns_st
&& ns_st
->n
.sym
3229 && ns_st
->n
.sym
->attr
.flavor
!= FL_MODULE
3230 && !e
->symtree
->n
.sym
->attr
.dummy
)
3233 else if (e
->expr_type
== EXPR_FUNCTION
&& e
->value
.function
.name
)
3237 /* In some circumstances, a function used in an initialization
3238 expression, in one use associated module, can fail to be
3239 coupled to its symtree when used in a specification
3240 expression in another module. */
3241 fname
= e
->value
.function
.esym
? e
->value
.function
.esym
->name
3242 : e
->value
.function
.isym
->name
;
3243 e
->symtree
= gfc_find_symtree (gfc_current_ns
->sym_root
, fname
);
3248 /* This is probably a reference to a private procedure from another
3249 module. To prevent a segfault, make a generic with no specific
3250 instances. If this module is used, without the required
3251 specific coming from somewhere, the appropriate error message
3253 gfc_get_symbol (fname
, gfc_current_ns
, &sym
);
3254 sym
->attr
.flavor
= FL_PROCEDURE
;
3255 sym
->attr
.generic
= 1;
3256 e
->symtree
= gfc_find_symtree (gfc_current_ns
->sym_root
, fname
);
3257 gfc_commit_symbol (sym
);
3262 /* Read and write expressions. The form "()" is allowed to indicate a
3266 mio_expr (gfc_expr
**ep
)
3274 if (iomode
== IO_OUTPUT
)
3283 MIO_NAME (expr_t
) (e
->expr_type
, expr_types
);
3288 if (t
== ATOM_RPAREN
)
3295 bad_module ("Expected expression type");
3297 e
= *ep
= gfc_get_expr ();
3298 e
->where
= gfc_current_locus
;
3299 e
->expr_type
= (expr_t
) find_enum (expr_types
);
3302 mio_typespec (&e
->ts
);
3303 mio_integer (&e
->rank
);
3307 switch (e
->expr_type
)
3311 = MIO_NAME (gfc_intrinsic_op
) (e
->value
.op
.op
, intrinsics
);
3313 switch (e
->value
.op
.op
)
3315 case INTRINSIC_UPLUS
:
3316 case INTRINSIC_UMINUS
:
3318 case INTRINSIC_PARENTHESES
:
3319 mio_expr (&e
->value
.op
.op1
);
3322 case INTRINSIC_PLUS
:
3323 case INTRINSIC_MINUS
:
3324 case INTRINSIC_TIMES
:
3325 case INTRINSIC_DIVIDE
:
3326 case INTRINSIC_POWER
:
3327 case INTRINSIC_CONCAT
:
3331 case INTRINSIC_NEQV
:
3333 case INTRINSIC_EQ_OS
:
3335 case INTRINSIC_NE_OS
:
3337 case INTRINSIC_GT_OS
:
3339 case INTRINSIC_GE_OS
:
3341 case INTRINSIC_LT_OS
:
3343 case INTRINSIC_LE_OS
:
3344 mio_expr (&e
->value
.op
.op1
);
3345 mio_expr (&e
->value
.op
.op2
);
3349 bad_module ("Bad operator");
3355 mio_symtree_ref (&e
->symtree
);
3356 mio_actual_arglist (&e
->value
.function
.actual
);
3358 if (iomode
== IO_OUTPUT
)
3360 e
->value
.function
.name
3361 = mio_allocated_string (e
->value
.function
.name
);
3362 flag
= e
->value
.function
.esym
!= NULL
;
3363 mio_integer (&flag
);
3365 mio_symbol_ref (&e
->value
.function
.esym
);
3367 write_atom (ATOM_STRING
, e
->value
.function
.isym
->name
);
3371 require_atom (ATOM_STRING
);
3372 e
->value
.function
.name
= gfc_get_string (atom_string
);
3375 mio_integer (&flag
);
3377 mio_symbol_ref (&e
->value
.function
.esym
);
3380 require_atom (ATOM_STRING
);
3381 e
->value
.function
.isym
= gfc_find_function (atom_string
);
3389 mio_symtree_ref (&e
->symtree
);
3390 mio_ref_list (&e
->ref
);
3393 case EXPR_SUBSTRING
:
3394 e
->value
.character
.string
3395 = CONST_CAST (gfc_char_t
*,
3396 mio_allocated_wide_string (e
->value
.character
.string
,
3397 e
->value
.character
.length
));
3398 mio_ref_list (&e
->ref
);
3401 case EXPR_STRUCTURE
:
3403 mio_constructor (&e
->value
.constructor
);
3404 mio_shape (&e
->shape
, e
->rank
);
3411 mio_gmp_integer (&e
->value
.integer
);
3415 gfc_set_model_kind (e
->ts
.kind
);
3416 mio_gmp_real (&e
->value
.real
);
3420 gfc_set_model_kind (e
->ts
.kind
);
3421 mio_gmp_real (&mpc_realref (e
->value
.complex));
3422 mio_gmp_real (&mpc_imagref (e
->value
.complex));
3426 mio_integer (&e
->value
.logical
);
3430 mio_integer (&e
->value
.character
.length
);
3431 e
->value
.character
.string
3432 = CONST_CAST (gfc_char_t
*,
3433 mio_allocated_wide_string (e
->value
.character
.string
,
3434 e
->value
.character
.length
));
3438 bad_module ("Bad type in constant expression");
3456 /* Read and write namelists. */
3459 mio_namelist (gfc_symbol
*sym
)
3461 gfc_namelist
*n
, *m
;
3462 const char *check_name
;
3466 if (iomode
== IO_OUTPUT
)
3468 for (n
= sym
->namelist
; n
; n
= n
->next
)
3469 mio_symbol_ref (&n
->sym
);
3473 /* This departure from the standard is flagged as an error.
3474 It does, in fact, work correctly. TODO: Allow it
3476 if (sym
->attr
.flavor
== FL_NAMELIST
)
3478 check_name
= find_use_name (sym
->name
, false);
3479 if (check_name
&& strcmp (check_name
, sym
->name
) != 0)
3480 gfc_error ("Namelist %s cannot be renamed by USE "
3481 "association to %s", sym
->name
, check_name
);
3485 while (peek_atom () != ATOM_RPAREN
)
3487 n
= gfc_get_namelist ();
3488 mio_symbol_ref (&n
->sym
);
3490 if (sym
->namelist
== NULL
)
3497 sym
->namelist_tail
= m
;
3504 /* Save/restore lists of gfc_interface structures. When loading an
3505 interface, we are really appending to the existing list of
3506 interfaces. Checking for duplicate and ambiguous interfaces has to
3507 be done later when all symbols have been loaded. */
3510 mio_interface_rest (gfc_interface
**ip
)
3512 gfc_interface
*tail
, *p
;
3513 pointer_info
*pi
= NULL
;
3515 if (iomode
== IO_OUTPUT
)
3518 for (p
= *ip
; p
; p
= p
->next
)
3519 mio_symbol_ref (&p
->sym
);
3534 if (peek_atom () == ATOM_RPAREN
)
3537 p
= gfc_get_interface ();
3538 p
->where
= gfc_current_locus
;
3539 pi
= mio_symbol_ref (&p
->sym
);
3555 /* Save/restore a nameless operator interface. */
3558 mio_interface (gfc_interface
**ip
)
3561 mio_interface_rest (ip
);
3565 /* Save/restore a named operator interface. */
3568 mio_symbol_interface (const char **name
, const char **module
,
3572 mio_pool_string (name
);
3573 mio_pool_string (module
);
3574 mio_interface_rest (ip
);
3579 mio_namespace_ref (gfc_namespace
**nsp
)
3584 p
= mio_pointer_ref (nsp
);
3586 if (p
->type
== P_UNKNOWN
)
3587 p
->type
= P_NAMESPACE
;
3589 if (iomode
== IO_INPUT
&& p
->integer
!= 0)
3591 ns
= (gfc_namespace
*) p
->u
.pointer
;
3594 ns
= gfc_get_namespace (NULL
, 0);
3595 associate_integer_pointer (p
, ns
);
3603 /* Save/restore the f2k_derived namespace of a derived-type symbol. */
3605 static gfc_namespace
* current_f2k_derived
;
3608 mio_typebound_proc (gfc_typebound_proc
** proc
)
3611 int overriding_flag
;
3613 if (iomode
== IO_INPUT
)
3615 *proc
= gfc_get_typebound_proc (NULL
);
3616 (*proc
)->where
= gfc_current_locus
;
3622 (*proc
)->access
= MIO_NAME (gfc_access
) ((*proc
)->access
, access_types
);
3624 /* IO the NON_OVERRIDABLE/DEFERRED combination. */
3625 gcc_assert (!((*proc
)->deferred
&& (*proc
)->non_overridable
));
3626 overriding_flag
= ((*proc
)->deferred
<< 1) | (*proc
)->non_overridable
;
3627 overriding_flag
= mio_name (overriding_flag
, binding_overriding
);
3628 (*proc
)->deferred
= ((overriding_flag
& 2) != 0);
3629 (*proc
)->non_overridable
= ((overriding_flag
& 1) != 0);
3630 gcc_assert (!((*proc
)->deferred
&& (*proc
)->non_overridable
));
3632 (*proc
)->nopass
= mio_name ((*proc
)->nopass
, binding_passing
);
3633 (*proc
)->is_generic
= mio_name ((*proc
)->is_generic
, binding_generic
);
3634 (*proc
)->ppc
= mio_name((*proc
)->ppc
, binding_ppc
);
3636 mio_pool_string (&((*proc
)->pass_arg
));
3638 flag
= (int) (*proc
)->pass_arg_num
;
3639 mio_integer (&flag
);
3640 (*proc
)->pass_arg_num
= (unsigned) flag
;
3642 if ((*proc
)->is_generic
)
3649 if (iomode
== IO_OUTPUT
)
3650 for (g
= (*proc
)->u
.generic
; g
; g
= g
->next
)
3652 iop
= (int) g
->is_operator
;
3654 mio_allocated_string (g
->specific_st
->name
);
3658 (*proc
)->u
.generic
= NULL
;
3659 while (peek_atom () != ATOM_RPAREN
)
3661 gfc_symtree
** sym_root
;
3663 g
= gfc_get_tbp_generic ();
3667 g
->is_operator
= (bool) iop
;
3669 require_atom (ATOM_STRING
);
3670 sym_root
= ¤t_f2k_derived
->tb_sym_root
;
3671 g
->specific_st
= gfc_get_tbp_symtree (sym_root
, atom_string
);
3674 g
->next
= (*proc
)->u
.generic
;
3675 (*proc
)->u
.generic
= g
;
3681 else if (!(*proc
)->ppc
)
3682 mio_symtree_ref (&(*proc
)->u
.specific
);
3687 /* Walker-callback function for this purpose. */
3689 mio_typebound_symtree (gfc_symtree
* st
)
3691 if (iomode
== IO_OUTPUT
&& !st
->n
.tb
)
3694 if (iomode
== IO_OUTPUT
)
3697 mio_allocated_string (st
->name
);
3699 /* For IO_INPUT, the above is done in mio_f2k_derived. */
3701 mio_typebound_proc (&st
->n
.tb
);
3705 /* IO a full symtree (in all depth). */
3707 mio_full_typebound_tree (gfc_symtree
** root
)
3711 if (iomode
== IO_OUTPUT
)
3712 gfc_traverse_symtree (*root
, &mio_typebound_symtree
);
3715 while (peek_atom () == ATOM_LPAREN
)
3721 require_atom (ATOM_STRING
);
3722 st
= gfc_get_tbp_symtree (root
, atom_string
);
3725 mio_typebound_symtree (st
);
3733 mio_finalizer (gfc_finalizer
**f
)
3735 if (iomode
== IO_OUTPUT
)
3738 gcc_assert ((*f
)->proc_tree
); /* Should already be resolved. */
3739 mio_symtree_ref (&(*f
)->proc_tree
);
3743 *f
= gfc_get_finalizer ();
3744 (*f
)->where
= gfc_current_locus
; /* Value should not matter. */
3747 mio_symtree_ref (&(*f
)->proc_tree
);
3748 (*f
)->proc_sym
= NULL
;
3753 mio_f2k_derived (gfc_namespace
*f2k
)
3755 current_f2k_derived
= f2k
;
3757 /* Handle the list of finalizer procedures. */
3759 if (iomode
== IO_OUTPUT
)
3762 for (f
= f2k
->finalizers
; f
; f
= f
->next
)
3767 f2k
->finalizers
= NULL
;
3768 while (peek_atom () != ATOM_RPAREN
)
3770 gfc_finalizer
*cur
= NULL
;
3771 mio_finalizer (&cur
);
3772 cur
->next
= f2k
->finalizers
;
3773 f2k
->finalizers
= cur
;
3778 /* Handle type-bound procedures. */
3779 mio_full_typebound_tree (&f2k
->tb_sym_root
);
3781 /* Type-bound user operators. */
3782 mio_full_typebound_tree (&f2k
->tb_uop_root
);
3784 /* Type-bound intrinsic operators. */
3786 if (iomode
== IO_OUTPUT
)
3789 for (op
= GFC_INTRINSIC_BEGIN
; op
!= GFC_INTRINSIC_END
; ++op
)
3791 gfc_intrinsic_op realop
;
3793 if (op
== INTRINSIC_USER
|| !f2k
->tb_op
[op
])
3797 realop
= (gfc_intrinsic_op
) op
;
3798 mio_intrinsic_op (&realop
);
3799 mio_typebound_proc (&f2k
->tb_op
[op
]);
3804 while (peek_atom () != ATOM_RPAREN
)
3806 gfc_intrinsic_op op
= GFC_INTRINSIC_BEGIN
; /* Silence GCC. */
3809 mio_intrinsic_op (&op
);
3810 mio_typebound_proc (&f2k
->tb_op
[op
]);
3817 mio_full_f2k_derived (gfc_symbol
*sym
)
3821 if (iomode
== IO_OUTPUT
)
3823 if (sym
->f2k_derived
)
3824 mio_f2k_derived (sym
->f2k_derived
);
3828 if (peek_atom () != ATOM_RPAREN
)
3830 sym
->f2k_derived
= gfc_get_namespace (NULL
, 0);
3831 mio_f2k_derived (sym
->f2k_derived
);
3834 gcc_assert (!sym
->f2k_derived
);
3841 /* Unlike most other routines, the address of the symbol node is already
3842 fixed on input and the name/module has already been filled in. */
3845 mio_symbol (gfc_symbol
*sym
)
3847 int intmod
= INTMOD_NONE
;
3851 mio_symbol_attribute (&sym
->attr
);
3852 mio_typespec (&sym
->ts
);
3853 if (sym
->ts
.type
== BT_CLASS
)
3854 sym
->attr
.class_ok
= 1;
3856 if (iomode
== IO_OUTPUT
)
3857 mio_namespace_ref (&sym
->formal_ns
);
3860 mio_namespace_ref (&sym
->formal_ns
);
3862 sym
->formal_ns
->proc_name
= sym
;
3865 /* Save/restore common block links. */
3866 mio_symbol_ref (&sym
->common_next
);
3868 mio_formal_arglist (&sym
->formal
);
3870 if (sym
->attr
.flavor
== FL_PARAMETER
)
3871 mio_expr (&sym
->value
);
3873 mio_array_spec (&sym
->as
);
3875 mio_symbol_ref (&sym
->result
);
3877 if (sym
->attr
.cray_pointee
)
3878 mio_symbol_ref (&sym
->cp_pointer
);
3880 /* Note that components are always saved, even if they are supposed
3881 to be private. Component access is checked during searching. */
3883 mio_component_list (&sym
->components
, sym
->attr
.vtype
);
3885 if (sym
->components
!= NULL
)
3886 sym
->component_access
3887 = MIO_NAME (gfc_access
) (sym
->component_access
, access_types
);
3889 /* Load/save the f2k_derived namespace of a derived-type symbol. */
3890 mio_full_f2k_derived (sym
);
3894 /* Add the fields that say whether this is from an intrinsic module,
3895 and if so, what symbol it is within the module. */
3896 /* mio_integer (&(sym->from_intmod)); */
3897 if (iomode
== IO_OUTPUT
)
3899 intmod
= sym
->from_intmod
;
3900 mio_integer (&intmod
);
3904 mio_integer (&intmod
);
3905 sym
->from_intmod
= (intmod_id
) intmod
;
3908 mio_integer (&(sym
->intmod_sym_id
));
3910 if (sym
->attr
.flavor
== FL_DERIVED
)
3911 mio_integer (&(sym
->hash_value
));
3917 /************************* Top level subroutines *************************/
3919 /* Given a root symtree node and a symbol, try to find a symtree that
3920 references the symbol that is not a unique name. */
3922 static gfc_symtree
*
3923 find_symtree_for_symbol (gfc_symtree
*st
, gfc_symbol
*sym
)
3925 gfc_symtree
*s
= NULL
;
3930 s
= find_symtree_for_symbol (st
->right
, sym
);
3933 s
= find_symtree_for_symbol (st
->left
, sym
);
3937 if (st
->n
.sym
== sym
&& !check_unique_name (st
->name
))
3944 /* A recursive function to look for a specific symbol by name and by
3945 module. Whilst several symtrees might point to one symbol, its
3946 is sufficient for the purposes here than one exist. Note that
3947 generic interfaces are distinguished as are symbols that have been
3948 renamed in another module. */
3949 static gfc_symtree
*
3950 find_symbol (gfc_symtree
*st
, const char *name
,
3951 const char *module
, int generic
)
3954 gfc_symtree
*retval
, *s
;
3956 if (st
== NULL
|| st
->n
.sym
== NULL
)
3959 c
= strcmp (name
, st
->n
.sym
->name
);
3960 if (c
== 0 && st
->n
.sym
->module
3961 && strcmp (module
, st
->n
.sym
->module
) == 0
3962 && !check_unique_name (st
->name
))
3964 s
= gfc_find_symtree (gfc_current_ns
->sym_root
, name
);
3966 /* Detect symbols that are renamed by use association in another
3967 module by the absence of a symtree and null attr.use_rename,
3968 since the latter is not transmitted in the module file. */
3969 if (((!generic
&& !st
->n
.sym
->attr
.generic
)
3970 || (generic
&& st
->n
.sym
->attr
.generic
))
3971 && !(s
== NULL
&& !st
->n
.sym
->attr
.use_rename
))
3975 retval
= find_symbol (st
->left
, name
, module
, generic
);
3978 retval
= find_symbol (st
->right
, name
, module
, generic
);
3984 /* Skip a list between balanced left and right parens. */
3994 switch (parse_atom ())
4017 /* Load operator interfaces from the module. Interfaces are unusual
4018 in that they attach themselves to existing symbols. */
4021 load_operator_interfaces (void)
4024 char name
[GFC_MAX_SYMBOL_LEN
+ 1], module
[GFC_MAX_SYMBOL_LEN
+ 1];
4026 pointer_info
*pi
= NULL
;
4031 while (peek_atom () != ATOM_RPAREN
)
4035 mio_internal_string (name
);
4036 mio_internal_string (module
);
4038 n
= number_use_names (name
, true);
4041 for (i
= 1; i
<= n
; i
++)
4043 /* Decide if we need to load this one or not. */
4044 p
= find_use_name_n (name
, &i
, true);
4048 while (parse_atom () != ATOM_RPAREN
);
4054 uop
= gfc_get_uop (p
);
4055 pi
= mio_interface_rest (&uop
->op
);
4059 if (gfc_find_uop (p
, NULL
))
4061 uop
= gfc_get_uop (p
);
4062 uop
->op
= gfc_get_interface ();
4063 uop
->op
->where
= gfc_current_locus
;
4064 add_fixup (pi
->integer
, &uop
->op
->sym
);
4073 /* Load interfaces from the module. Interfaces are unusual in that
4074 they attach themselves to existing symbols. */
4077 load_generic_interfaces (void)
4080 char name
[GFC_MAX_SYMBOL_LEN
+ 1], module
[GFC_MAX_SYMBOL_LEN
+ 1];
4082 gfc_interface
*generic
= NULL
, *gen
= NULL
;
4084 bool ambiguous_set
= false;
4088 while (peek_atom () != ATOM_RPAREN
)
4092 mio_internal_string (name
);
4093 mio_internal_string (module
);
4095 n
= number_use_names (name
, false);
4096 renamed
= n
? 1 : 0;
4099 for (i
= 1; i
<= n
; i
++)
4102 /* Decide if we need to load this one or not. */
4103 p
= find_use_name_n (name
, &i
, false);
4105 st
= find_symbol (gfc_current_ns
->sym_root
,
4106 name
, module_name
, 1);
4108 if (!p
|| gfc_find_symbol (p
, NULL
, 0, &sym
))
4110 /* Skip the specific names for these cases. */
4111 while (i
== 1 && parse_atom () != ATOM_RPAREN
);
4116 /* If the symbol exists already and is being USEd without being
4117 in an ONLY clause, do not load a new symtree(11.3.2). */
4118 if (!only_flag
&& st
)
4126 if (strcmp (st
->name
, p
) != 0)
4128 st
= gfc_new_symtree (&gfc_current_ns
->sym_root
, p
);
4134 /* Since we haven't found a valid generic interface, we had
4138 gfc_get_symbol (p
, NULL
, &sym
);
4139 sym
->name
= gfc_get_string (name
);
4140 sym
->module
= module_name
;
4141 sym
->attr
.flavor
= FL_PROCEDURE
;
4142 sym
->attr
.generic
= 1;
4143 sym
->attr
.use_assoc
= 1;
4148 /* Unless sym is a generic interface, this reference
4151 st
= gfc_find_symtree (gfc_current_ns
->sym_root
, p
);
4155 if (st
&& !sym
->attr
.generic
4158 && strcmp (module
, sym
->module
))
4160 ambiguous_set
= true;
4165 sym
->attr
.use_only
= only_flag
;
4166 sym
->attr
.use_rename
= renamed
;
4170 mio_interface_rest (&sym
->generic
);
4171 generic
= sym
->generic
;
4173 else if (!sym
->generic
)
4175 sym
->generic
= generic
;
4176 sym
->attr
.generic_copy
= 1;
4179 /* If a procedure that is not generic has generic interfaces
4180 that include itself, it is generic! We need to take care
4181 to retain symbols ambiguous that were already so. */
4182 if (sym
->attr
.use_assoc
4183 && !sym
->attr
.generic
4184 && sym
->attr
.flavor
== FL_PROCEDURE
)
4186 for (gen
= generic
; gen
; gen
= gen
->next
)
4188 if (gen
->sym
== sym
)
4190 sym
->attr
.generic
= 1;
4205 /* Load common blocks. */
4210 char name
[GFC_MAX_SYMBOL_LEN
+ 1];
4215 while (peek_atom () != ATOM_RPAREN
)
4220 mio_internal_string (name
);
4222 p
= gfc_get_common (name
, 1);
4224 mio_symbol_ref (&p
->head
);
4225 mio_integer (&flags
);
4229 p
->threadprivate
= 1;
4232 /* Get whether this was a bind(c) common or not. */
4233 mio_integer (&p
->is_bind_c
);
4234 /* Get the binding label. */
4235 label
= read_string ();
4237 p
->binding_label
= IDENTIFIER_POINTER (get_identifier (label
));
4247 /* Load equivalences. The flag in_load_equiv informs mio_expr_ref of this
4248 so that unused variables are not loaded and so that the expression can
4254 gfc_equiv
*head
, *tail
, *end
, *eq
;
4258 in_load_equiv
= true;
4260 end
= gfc_current_ns
->equiv
;
4261 while (end
!= NULL
&& end
->next
!= NULL
)
4264 while (peek_atom () != ATOM_RPAREN
) {
4268 while(peek_atom () != ATOM_RPAREN
)
4271 head
= tail
= gfc_get_equiv ();
4274 tail
->eq
= gfc_get_equiv ();
4278 mio_pool_string (&tail
->module
);
4279 mio_expr (&tail
->expr
);
4282 /* Unused equivalence members have a unique name. In addition, it
4283 must be checked that the symbols are from the same module. */
4285 for (eq
= head
; eq
; eq
= eq
->eq
)
4287 if (eq
->expr
->symtree
->n
.sym
->module
4288 && head
->expr
->symtree
->n
.sym
->module
4289 && strcmp (head
->expr
->symtree
->n
.sym
->module
,
4290 eq
->expr
->symtree
->n
.sym
->module
) == 0
4291 && !check_unique_name (eq
->expr
->symtree
->name
))
4300 for (eq
= head
; eq
; eq
= head
)
4303 gfc_free_expr (eq
->expr
);
4309 gfc_current_ns
->equiv
= head
;
4320 in_load_equiv
= false;
4324 /* This function loads the sym_root of f2k_derived with the extensions to
4325 the derived type. */
4327 load_derived_extensions (void)
4330 gfc_symbol
*derived
;
4334 char name
[GFC_MAX_SYMBOL_LEN
+ 1];
4335 char module
[GFC_MAX_SYMBOL_LEN
+ 1];
4339 while (peek_atom () != ATOM_RPAREN
)
4342 mio_integer (&symbol
);
4343 info
= get_integer (symbol
);
4344 derived
= info
->u
.rsym
.sym
;
4346 /* This one is not being loaded. */
4347 if (!info
|| !derived
)
4349 while (peek_atom () != ATOM_RPAREN
)
4354 gcc_assert (derived
->attr
.flavor
== FL_DERIVED
);
4355 if (derived
->f2k_derived
== NULL
)
4356 derived
->f2k_derived
= gfc_get_namespace (NULL
, 0);
4358 while (peek_atom () != ATOM_RPAREN
)
4361 mio_internal_string (name
);
4362 mio_internal_string (module
);
4364 /* Only use one use name to find the symbol. */
4366 p
= find_use_name_n (name
, &j
, false);
4369 st
= gfc_find_symtree (gfc_current_ns
->sym_root
, p
);
4371 st
= gfc_find_symtree (derived
->f2k_derived
->sym_root
, name
);
4374 /* Only use the real name in f2k_derived to ensure a single
4376 st
= gfc_new_symtree (&derived
->f2k_derived
->sym_root
, name
);
4389 /* Recursive function to traverse the pointer_info tree and load a
4390 needed symbol. We return nonzero if we load a symbol and stop the
4391 traversal, because the act of loading can alter the tree. */
4394 load_needed (pointer_info
*p
)
4405 rv
|= load_needed (p
->left
);
4406 rv
|= load_needed (p
->right
);
4408 if (p
->type
!= P_SYMBOL
|| p
->u
.rsym
.state
!= NEEDED
)
4411 p
->u
.rsym
.state
= USED
;
4413 set_module_locus (&p
->u
.rsym
.where
);
4415 sym
= p
->u
.rsym
.sym
;
4418 q
= get_integer (p
->u
.rsym
.ns
);
4420 ns
= (gfc_namespace
*) q
->u
.pointer
;
4423 /* Create an interface namespace if necessary. These are
4424 the namespaces that hold the formal parameters of module
4427 ns
= gfc_get_namespace (NULL
, 0);
4428 associate_integer_pointer (q
, ns
);
4431 /* Use the module sym as 'proc_name' so that gfc_get_symbol_decl
4432 doesn't go pear-shaped if the symbol is used. */
4434 gfc_find_symbol (p
->u
.rsym
.module
, gfc_current_ns
,
4437 sym
= gfc_new_symbol (p
->u
.rsym
.true_name
, ns
);
4438 sym
->name
= dt_lower_string (p
->u
.rsym
.true_name
);
4439 sym
->module
= gfc_get_string (p
->u
.rsym
.module
);
4440 if (p
->u
.rsym
.binding_label
)
4441 sym
->binding_label
= IDENTIFIER_POINTER (get_identifier
4442 (p
->u
.rsym
.binding_label
));
4444 associate_integer_pointer (p
, sym
);
4448 sym
->attr
.use_assoc
= 1;
4450 /* Mark as only or rename for later diagnosis for explicitly imported
4451 but not used warnings; don't mark internal symbols such as __vtab,
4452 __def_init etc. Only mark them if they have been explicitly loaded. */
4454 if (only_flag
&& sym
->name
[0] != '_' && sym
->name
[1] != '_')
4458 /* Search the use/rename list for the variable; if the variable is
4460 for (u
= gfc_rename_list
; u
; u
= u
->next
)
4462 if (strcmp (u
->use_name
, sym
->name
) == 0)
4464 sym
->attr
.use_only
= 1;
4470 if (p
->u
.rsym
.renamed
)
4471 sym
->attr
.use_rename
= 1;
4477 /* Recursive function for cleaning up things after a module has been read. */
4480 read_cleanup (pointer_info
*p
)
4488 read_cleanup (p
->left
);
4489 read_cleanup (p
->right
);
4491 if (p
->type
== P_SYMBOL
&& p
->u
.rsym
.state
== USED
&& !p
->u
.rsym
.referenced
)
4494 /* Add hidden symbols to the symtree. */
4495 q
= get_integer (p
->u
.rsym
.ns
);
4496 ns
= (gfc_namespace
*) q
->u
.pointer
;
4498 if (!p
->u
.rsym
.sym
->attr
.vtype
4499 && !p
->u
.rsym
.sym
->attr
.vtab
)
4500 st
= gfc_get_unique_symtree (ns
);
4503 /* There is no reason to use 'unique_symtrees' for vtabs or
4504 vtypes - their name is fine for a symtree and reduces the
4505 namespace pollution. */
4506 st
= gfc_find_symtree (ns
->sym_root
, p
->u
.rsym
.sym
->name
);
4508 st
= gfc_new_symtree (&ns
->sym_root
, p
->u
.rsym
.sym
->name
);
4511 st
->n
.sym
= p
->u
.rsym
.sym
;
4514 /* Fixup any symtree references. */
4515 p
->u
.rsym
.symtree
= st
;
4516 resolve_fixups (p
->u
.rsym
.stfixup
, st
);
4517 p
->u
.rsym
.stfixup
= NULL
;
4520 /* Free unused symbols. */
4521 if (p
->type
== P_SYMBOL
&& p
->u
.rsym
.state
== UNUSED
)
4522 gfc_free_symbol (p
->u
.rsym
.sym
);
4526 /* It is not quite enough to check for ambiguity in the symbols by
4527 the loaded symbol and the new symbol not being identical. */
4529 check_for_ambiguous (gfc_symbol
*st_sym
, pointer_info
*info
)
4533 symbol_attribute attr
;
4535 if (st_sym
->name
== gfc_current_ns
->proc_name
->name
)
4537 gfc_error ("'%s' of module '%s', imported at %C, is also the name of the "
4538 "current program unit", st_sym
->name
, module_name
);
4542 rsym
= info
->u
.rsym
.sym
;
4546 if (st_sym
->attr
.vtab
|| st_sym
->attr
.vtype
)
4549 /* If the existing symbol is generic from a different module and
4550 the new symbol is generic there can be no ambiguity. */
4551 if (st_sym
->attr
.generic
4553 && st_sym
->module
!= module_name
)
4555 /* The new symbol's attributes have not yet been read. Since
4556 we need attr.generic, read it directly. */
4557 get_module_locus (&locus
);
4558 set_module_locus (&info
->u
.rsym
.where
);
4561 mio_symbol_attribute (&attr
);
4562 set_module_locus (&locus
);
4571 /* Read a module file. */
4576 module_locus operator_interfaces
, user_operators
, extensions
;
4578 char name
[GFC_MAX_SYMBOL_LEN
+ 1];
4580 int ambiguous
, j
, nuse
, symbol
;
4581 pointer_info
*info
, *q
;
4582 gfc_use_rename
*u
= NULL
;
4586 get_module_locus (&operator_interfaces
); /* Skip these for now. */
4589 get_module_locus (&user_operators
);
4593 /* Skip commons, equivalences and derived type extensions for now. */
4597 get_module_locus (&extensions
);
4602 /* Create the fixup nodes for all the symbols. */
4604 while (peek_atom () != ATOM_RPAREN
)
4607 require_atom (ATOM_INTEGER
);
4608 info
= get_integer (atom_int
);
4610 info
->type
= P_SYMBOL
;
4611 info
->u
.rsym
.state
= UNUSED
;
4613 info
->u
.rsym
.true_name
= read_string ();
4614 info
->u
.rsym
.module
= read_string ();
4615 bind_label
= read_string ();
4616 if (strlen (bind_label
))
4617 info
->u
.rsym
.binding_label
= bind_label
;
4619 XDELETEVEC (bind_label
);
4621 require_atom (ATOM_INTEGER
);
4622 info
->u
.rsym
.ns
= atom_int
;
4624 get_module_locus (&info
->u
.rsym
.where
);
4627 /* See if the symbol has already been loaded by a previous module.
4628 If so, we reference the existing symbol and prevent it from
4629 being loaded again. This should not happen if the symbol being
4630 read is an index for an assumed shape dummy array (ns != 1). */
4632 sym
= find_true_name (info
->u
.rsym
.true_name
, info
->u
.rsym
.module
);
4635 || (sym
->attr
.flavor
== FL_VARIABLE
&& info
->u
.rsym
.ns
!=1))
4638 info
->u
.rsym
.state
= USED
;
4639 info
->u
.rsym
.sym
= sym
;
4641 /* Some symbols do not have a namespace (eg. formal arguments),
4642 so the automatic "unique symtree" mechanism must be suppressed
4643 by marking them as referenced. */
4644 q
= get_integer (info
->u
.rsym
.ns
);
4645 if (q
->u
.pointer
== NULL
)
4647 info
->u
.rsym
.referenced
= 1;
4651 /* If possible recycle the symtree that references the symbol.
4652 If a symtree is not found and the module does not import one,
4653 a unique-name symtree is found by read_cleanup. */
4654 st
= find_symtree_for_symbol (gfc_current_ns
->sym_root
, sym
);
4657 info
->u
.rsym
.symtree
= st
;
4658 info
->u
.rsym
.referenced
= 1;
4664 /* Parse the symtree lists. This lets us mark which symbols need to
4665 be loaded. Renaming is also done at this point by replacing the
4670 while (peek_atom () != ATOM_RPAREN
)
4672 mio_internal_string (name
);
4673 mio_integer (&ambiguous
);
4674 mio_integer (&symbol
);
4676 info
= get_integer (symbol
);
4678 /* See how many use names there are. If none, go through the start
4679 of the loop at least once. */
4680 nuse
= number_use_names (name
, false);
4681 info
->u
.rsym
.renamed
= nuse
? 1 : 0;
4686 for (j
= 1; j
<= nuse
; j
++)
4688 /* Get the jth local name for this symbol. */
4689 p
= find_use_name_n (name
, &j
, false);
4691 if (p
== NULL
&& strcmp (name
, module_name
) == 0)
4694 /* Exception: Always import vtabs & vtypes. */
4695 if (p
== NULL
&& name
[0] == '_'
4696 && (strncmp (name
, "__vtab_", 5) == 0
4697 || strncmp (name
, "__vtype_", 6) == 0))
4700 /* Skip symtree nodes not in an ONLY clause, unless there
4701 is an existing symtree loaded from another USE statement. */
4704 st
= gfc_find_symtree (gfc_current_ns
->sym_root
, name
);
4706 && strcmp (st
->n
.sym
->name
, info
->u
.rsym
.true_name
) == 0
4707 && st
->n
.sym
->module
!= NULL
4708 && strcmp (st
->n
.sym
->module
, info
->u
.rsym
.module
) == 0)
4710 info
->u
.rsym
.symtree
= st
;
4711 info
->u
.rsym
.sym
= st
->n
.sym
;
4716 /* If a symbol of the same name and module exists already,
4717 this symbol, which is not in an ONLY clause, must not be
4718 added to the namespace(11.3.2). Note that find_symbol
4719 only returns the first occurrence that it finds. */
4720 if (!only_flag
&& !info
->u
.rsym
.renamed
4721 && strcmp (name
, module_name
) != 0
4722 && find_symbol (gfc_current_ns
->sym_root
, name
,
4726 st
= gfc_find_symtree (gfc_current_ns
->sym_root
, p
);
4730 /* Check for ambiguous symbols. */
4731 if (check_for_ambiguous (st
->n
.sym
, info
))
4734 info
->u
.rsym
.symtree
= st
;
4738 st
= gfc_find_symtree (gfc_current_ns
->sym_root
, name
);
4740 /* Create a symtree node in the current namespace for this
4742 st
= check_unique_name (p
)
4743 ? gfc_get_unique_symtree (gfc_current_ns
)
4744 : gfc_new_symtree (&gfc_current_ns
->sym_root
, p
);
4745 st
->ambiguous
= ambiguous
;
4747 sym
= info
->u
.rsym
.sym
;
4749 /* Create a symbol node if it doesn't already exist. */
4752 info
->u
.rsym
.sym
= gfc_new_symbol (info
->u
.rsym
.true_name
,
4754 info
->u
.rsym
.sym
->name
= dt_lower_string (info
->u
.rsym
.true_name
);
4755 sym
= info
->u
.rsym
.sym
;
4756 sym
->module
= gfc_get_string (info
->u
.rsym
.module
);
4758 if (info
->u
.rsym
.binding_label
)
4759 sym
->binding_label
=
4760 IDENTIFIER_POINTER (get_identifier
4761 (info
->u
.rsym
.binding_label
));
4767 if (strcmp (name
, p
) != 0)
4768 sym
->attr
.use_rename
= 1;
4771 || (strncmp (name
, "__vtab_", 5) != 0
4772 && strncmp (name
, "__vtype_", 6) != 0))
4773 sym
->attr
.use_only
= only_flag
;
4775 /* Store the symtree pointing to this symbol. */
4776 info
->u
.rsym
.symtree
= st
;
4778 if (info
->u
.rsym
.state
== UNUSED
)
4779 info
->u
.rsym
.state
= NEEDED
;
4780 info
->u
.rsym
.referenced
= 1;
4787 /* Load intrinsic operator interfaces. */
4788 set_module_locus (&operator_interfaces
);
4791 for (i
= GFC_INTRINSIC_BEGIN
; i
!= GFC_INTRINSIC_END
; i
++)
4793 if (i
== INTRINSIC_USER
)
4798 u
= find_use_operator ((gfc_intrinsic_op
) i
);
4809 mio_interface (&gfc_current_ns
->op
[i
]);
4810 if (u
&& !gfc_current_ns
->op
[i
])
4816 /* Load generic and user operator interfaces. These must follow the
4817 loading of symtree because otherwise symbols can be marked as
4820 set_module_locus (&user_operators
);
4822 load_operator_interfaces ();
4823 load_generic_interfaces ();
4828 /* At this point, we read those symbols that are needed but haven't
4829 been loaded yet. If one symbol requires another, the other gets
4830 marked as NEEDED if its previous state was UNUSED. */
4832 while (load_needed (pi_root
));
4834 /* Make sure all elements of the rename-list were found in the module. */
4836 for (u
= gfc_rename_list
; u
; u
= u
->next
)
4841 if (u
->op
== INTRINSIC_NONE
)
4843 gfc_error ("Symbol '%s' referenced at %L not found in module '%s'",
4844 u
->use_name
, &u
->where
, module_name
);
4848 if (u
->op
== INTRINSIC_USER
)
4850 gfc_error ("User operator '%s' referenced at %L not found "
4851 "in module '%s'", u
->use_name
, &u
->where
, module_name
);
4855 gfc_error ("Intrinsic operator '%s' referenced at %L not found "
4856 "in module '%s'", gfc_op2string (u
->op
), &u
->where
,
4860 /* Now we should be in a position to fill f2k_derived with derived type
4861 extensions, since everything has been loaded. */
4862 set_module_locus (&extensions
);
4863 load_derived_extensions ();
4865 /* Clean up symbol nodes that were never loaded, create references
4866 to hidden symbols. */
4868 read_cleanup (pi_root
);
4872 /* Given an access type that is specific to an entity and the default
4873 access, return nonzero if the entity is publicly accessible. If the
4874 element is declared as PUBLIC, then it is public; if declared
4875 PRIVATE, then private, and otherwise it is public unless the default
4876 access in this context has been declared PRIVATE. */
4879 check_access (gfc_access specific_access
, gfc_access default_access
)
4881 if (specific_access
== ACCESS_PUBLIC
)
4883 if (specific_access
== ACCESS_PRIVATE
)
4886 if (gfc_option
.flag_module_private
)
4887 return default_access
== ACCESS_PUBLIC
;
4889 return default_access
!= ACCESS_PRIVATE
;
4894 gfc_check_symbol_access (gfc_symbol
*sym
)
4896 if (sym
->attr
.vtab
|| sym
->attr
.vtype
)
4899 return check_access (sym
->attr
.access
, sym
->ns
->default_access
);
4903 /* A structure to remember which commons we've already written. */
4905 struct written_common
4907 BBT_HEADER(written_common
);
4908 const char *name
, *label
;
4911 static struct written_common
*written_commons
= NULL
;
4913 /* Comparison function used for balancing the binary tree. */
4916 compare_written_commons (void *a1
, void *b1
)
4918 const char *aname
= ((struct written_common
*) a1
)->name
;
4919 const char *alabel
= ((struct written_common
*) a1
)->label
;
4920 const char *bname
= ((struct written_common
*) b1
)->name
;
4921 const char *blabel
= ((struct written_common
*) b1
)->label
;
4922 int c
= strcmp (aname
, bname
);
4924 return (c
!= 0 ? c
: strcmp (alabel
, blabel
));
4927 /* Free a list of written commons. */
4930 free_written_common (struct written_common
*w
)
4936 free_written_common (w
->left
);
4938 free_written_common (w
->right
);
4943 /* Write a common block to the module -- recursive helper function. */
4946 write_common_0 (gfc_symtree
*st
, bool this_module
)
4952 struct written_common
*w
;
4953 bool write_me
= true;
4958 write_common_0 (st
->left
, this_module
);
4960 /* We will write out the binding label, or "" if no label given. */
4961 name
= st
->n
.common
->name
;
4963 label
= (p
->is_bind_c
&& p
->binding_label
) ? p
->binding_label
: "";
4965 /* Check if we've already output this common. */
4966 w
= written_commons
;
4969 int c
= strcmp (name
, w
->name
);
4970 c
= (c
!= 0 ? c
: strcmp (label
, w
->label
));
4974 w
= (c
< 0) ? w
->left
: w
->right
;
4977 if (this_module
&& p
->use_assoc
)
4982 /* Write the common to the module. */
4984 mio_pool_string (&name
);
4986 mio_symbol_ref (&p
->head
);
4987 flags
= p
->saved
? 1 : 0;
4988 if (p
->threadprivate
)
4990 mio_integer (&flags
);
4992 /* Write out whether the common block is bind(c) or not. */
4993 mio_integer (&(p
->is_bind_c
));
4995 mio_pool_string (&label
);
4998 /* Record that we have written this common. */
4999 w
= XCNEW (struct written_common
);
5002 gfc_insert_bbt (&written_commons
, w
, compare_written_commons
);
5005 write_common_0 (st
->right
, this_module
);
5009 /* Write a common, by initializing the list of written commons, calling
5010 the recursive function write_common_0() and cleaning up afterwards. */
5013 write_common (gfc_symtree
*st
)
5015 written_commons
= NULL
;
5016 write_common_0 (st
, true);
5017 write_common_0 (st
, false);
5018 free_written_common (written_commons
);
5019 written_commons
= NULL
;
5023 /* Write the blank common block to the module. */
5026 write_blank_common (void)
5028 const char * name
= BLANK_COMMON_NAME
;
5030 /* TODO: Blank commons are not bind(c). The F2003 standard probably says
5031 this, but it hasn't been checked. Just making it so for now. */
5034 if (gfc_current_ns
->blank_common
.head
== NULL
)
5039 mio_pool_string (&name
);
5041 mio_symbol_ref (&gfc_current_ns
->blank_common
.head
);
5042 saved
= gfc_current_ns
->blank_common
.saved
;
5043 mio_integer (&saved
);
5045 /* Write out whether the common block is bind(c) or not. */
5046 mio_integer (&is_bind_c
);
5048 /* Write out an empty binding label. */
5049 write_atom (ATOM_STRING
, "");
5055 /* Write equivalences to the module. */
5064 for (eq
= gfc_current_ns
->equiv
; eq
; eq
= eq
->next
)
5068 for (e
= eq
; e
; e
= e
->eq
)
5070 if (e
->module
== NULL
)
5071 e
->module
= gfc_get_string ("%s.eq.%d", module_name
, num
);
5072 mio_allocated_string (e
->module
);
5073 mio_expr (&e
->expr
);
5082 /* Write derived type extensions to the module. */
5085 write_dt_extensions (gfc_symtree
*st
)
5087 if (!gfc_check_symbol_access (st
->n
.sym
))
5089 if (!(st
->n
.sym
->ns
&& st
->n
.sym
->ns
->proc_name
5090 && st
->n
.sym
->ns
->proc_name
->attr
.flavor
== FL_MODULE
))
5094 mio_pool_string (&st
->name
);
5095 if (st
->n
.sym
->module
!= NULL
)
5096 mio_pool_string (&st
->n
.sym
->module
);
5099 char name
[GFC_MAX_SYMBOL_LEN
+ 1];
5100 if (iomode
== IO_OUTPUT
)
5101 strcpy (name
, module_name
);
5102 mio_internal_string (name
);
5103 if (iomode
== IO_INPUT
)
5104 module_name
= gfc_get_string (name
);
5110 write_derived_extensions (gfc_symtree
*st
)
5112 if (!((st
->n
.sym
->attr
.flavor
== FL_DERIVED
)
5113 && (st
->n
.sym
->f2k_derived
!= NULL
)
5114 && (st
->n
.sym
->f2k_derived
->sym_root
!= NULL
)))
5118 mio_symbol_ref (&(st
->n
.sym
));
5119 gfc_traverse_symtree (st
->n
.sym
->f2k_derived
->sym_root
,
5120 write_dt_extensions
);
5125 /* Write a symbol to the module. */
5128 write_symbol (int n
, gfc_symbol
*sym
)
5132 if (sym
->attr
.flavor
== FL_UNKNOWN
|| sym
->attr
.flavor
== FL_LABEL
)
5133 gfc_internal_error ("write_symbol(): bad module symbol '%s'", sym
->name
);
5137 if (sym
->attr
.flavor
== FL_DERIVED
)
5140 name
= dt_upper_string (sym
->name
);
5141 mio_pool_string (&name
);
5144 mio_pool_string (&sym
->name
);
5146 mio_pool_string (&sym
->module
);
5147 if ((sym
->attr
.is_bind_c
|| sym
->attr
.is_iso_c
) && sym
->binding_label
)
5149 label
= sym
->binding_label
;
5150 mio_pool_string (&label
);
5153 write_atom (ATOM_STRING
, "");
5155 mio_pointer_ref (&sym
->ns
);
5162 /* Recursive traversal function to write the initial set of symbols to
5163 the module. We check to see if the symbol should be written
5164 according to the access specification. */
5167 write_symbol0 (gfc_symtree
*st
)
5171 bool dont_write
= false;
5176 write_symbol0 (st
->left
);
5179 if (sym
->module
== NULL
)
5180 sym
->module
= module_name
;
5182 if (sym
->attr
.flavor
== FL_PROCEDURE
&& sym
->attr
.generic
5183 && !sym
->attr
.subroutine
&& !sym
->attr
.function
)
5186 if (!gfc_check_symbol_access (sym
))
5191 p
= get_pointer (sym
);
5192 if (p
->type
== P_UNKNOWN
)
5195 if (p
->u
.wsym
.state
!= WRITTEN
)
5197 write_symbol (p
->integer
, sym
);
5198 p
->u
.wsym
.state
= WRITTEN
;
5202 write_symbol0 (st
->right
);
5206 /* Type for the temporary tree used when writing secondary symbols. */
5208 struct sorted_pointer_info
5210 BBT_HEADER (sorted_pointer_info
);
5215 #define gfc_get_sorted_pointer_info() XCNEW (sorted_pointer_info)
5217 /* Recursively traverse the temporary tree, free its contents. */
5220 free_sorted_pointer_info_tree (sorted_pointer_info
*p
)
5225 free_sorted_pointer_info_tree (p
->left
);
5226 free_sorted_pointer_info_tree (p
->right
);
5231 /* Comparison function for the temporary tree. */
5234 compare_sorted_pointer_info (void *_spi1
, void *_spi2
)
5236 sorted_pointer_info
*spi1
, *spi2
;
5237 spi1
= (sorted_pointer_info
*)_spi1
;
5238 spi2
= (sorted_pointer_info
*)_spi2
;
5240 if (spi1
->p
->integer
< spi2
->p
->integer
)
5242 if (spi1
->p
->integer
> spi2
->p
->integer
)
5248 /* Finds the symbols that need to be written and collects them in the
5249 sorted_pi tree so that they can be traversed in an order
5250 independent of memory addresses. */
5253 find_symbols_to_write(sorted_pointer_info
**tree
, pointer_info
*p
)
5258 if (p
->type
== P_SYMBOL
&& p
->u
.wsym
.state
== NEEDS_WRITE
)
5260 sorted_pointer_info
*sp
= gfc_get_sorted_pointer_info();
5263 gfc_insert_bbt (tree
, sp
, compare_sorted_pointer_info
);
5266 find_symbols_to_write (tree
, p
->left
);
5267 find_symbols_to_write (tree
, p
->right
);
5271 /* Recursive function that traverses the tree of symbols that need to be
5272 written and writes them in order. */
5275 write_symbol1_recursion (sorted_pointer_info
*sp
)
5280 write_symbol1_recursion (sp
->left
);
5282 pointer_info
*p1
= sp
->p
;
5283 gcc_assert (p1
->type
== P_SYMBOL
&& p1
->u
.wsym
.state
== NEEDS_WRITE
);
5285 p1
->u
.wsym
.state
= WRITTEN
;
5286 write_symbol (p1
->integer
, p1
->u
.wsym
.sym
);
5287 p1
->u
.wsym
.sym
->attr
.public_used
= 1;
5289 write_symbol1_recursion (sp
->right
);
5293 /* Write the secondary set of symbols to the module file. These are
5294 symbols that were not public yet are needed by the public symbols
5295 or another dependent symbol. The act of writing a symbol can add
5296 symbols to the pointer_info tree, so we return nonzero if a symbol
5297 was written and pass that information upwards. The caller will
5298 then call this function again until nothing was written. It uses
5299 the utility functions and a temporary tree to ensure a reproducible
5300 ordering of the symbol output and thus the module file. */
5303 write_symbol1 (pointer_info
*p
)
5308 /* Put symbols that need to be written into a tree sorted on the
5311 sorted_pointer_info
*spi_root
= NULL
;
5312 find_symbols_to_write (&spi_root
, p
);
5314 /* No symbols to write, return. */
5318 /* Otherwise, write and free the tree again. */
5319 write_symbol1_recursion (spi_root
);
5320 free_sorted_pointer_info_tree (spi_root
);
5326 /* Write operator interfaces associated with a symbol. */
5329 write_operator (gfc_user_op
*uop
)
5331 static char nullstring
[] = "";
5332 const char *p
= nullstring
;
5334 if (uop
->op
== NULL
|| !check_access (uop
->access
, uop
->ns
->default_access
))
5337 mio_symbol_interface (&uop
->name
, &p
, &uop
->op
);
5341 /* Write generic interfaces from the namespace sym_root. */
5344 write_generic (gfc_symtree
*st
)
5351 write_generic (st
->left
);
5354 if (sym
&& !check_unique_name (st
->name
)
5355 && sym
->generic
&& gfc_check_symbol_access (sym
))
5358 sym
->module
= module_name
;
5360 mio_symbol_interface (&st
->name
, &sym
->module
, &sym
->generic
);
5363 write_generic (st
->right
);
5368 write_symtree (gfc_symtree
*st
)
5375 /* A symbol in an interface body must not be visible in the
5377 if (sym
->ns
!= gfc_current_ns
5378 && sym
->ns
->proc_name
5379 && sym
->ns
->proc_name
->attr
.if_source
== IFSRC_IFBODY
)
5382 if (!gfc_check_symbol_access (sym
)
5383 || (sym
->attr
.flavor
== FL_PROCEDURE
&& sym
->attr
.generic
5384 && !sym
->attr
.subroutine
&& !sym
->attr
.function
))
5387 if (check_unique_name (st
->name
))
5390 p
= find_pointer (sym
);
5392 gfc_internal_error ("write_symtree(): Symbol not written");
5394 mio_pool_string (&st
->name
);
5395 mio_integer (&st
->ambiguous
);
5396 mio_integer (&p
->integer
);
5405 /* Write the operator interfaces. */
5408 for (i
= GFC_INTRINSIC_BEGIN
; i
!= GFC_INTRINSIC_END
; i
++)
5410 if (i
== INTRINSIC_USER
)
5413 mio_interface (check_access (gfc_current_ns
->operator_access
[i
],
5414 gfc_current_ns
->default_access
)
5415 ? &gfc_current_ns
->op
[i
] : NULL
);
5423 gfc_traverse_user_op (gfc_current_ns
, write_operator
);
5429 write_generic (gfc_current_ns
->sym_root
);
5435 write_blank_common ();
5436 write_common (gfc_current_ns
->common_root
);
5448 gfc_traverse_symtree (gfc_current_ns
->sym_root
,
5449 write_derived_extensions
);
5454 /* Write symbol information. First we traverse all symbols in the
5455 primary namespace, writing those that need to be written.
5456 Sometimes writing one symbol will cause another to need to be
5457 written. A list of these symbols ends up on the write stack, and
5458 we end by popping the bottom of the stack and writing the symbol
5459 until the stack is empty. */
5463 write_symbol0 (gfc_current_ns
->sym_root
);
5464 while (write_symbol1 (pi_root
))
5473 gfc_traverse_symtree (gfc_current_ns
->sym_root
, write_symtree
);
5478 /* Read a CRC32 sum from the gzip trailer of a module file. Returns
5479 true on success, false on failure. */
5482 read_crc32_from_module_file (const char* filename
, uLong
* crc
)
5488 /* Open the file in binary mode. */
5489 if ((file
= fopen (filename
, "rb")) == NULL
)
5492 /* The gzip crc32 value is found in the [END-8, END-4] bytes of the
5493 file. See RFC 1952. */
5494 if (fseek (file
, -8, SEEK_END
) != 0)
5500 /* Read the CRC32. */
5501 if (fread (buf
, 1, 4, file
) != 4)
5507 /* Close the file. */
5510 val
= (buf
[0] & 0xFF) + ((buf
[1] & 0xFF) << 8) + ((buf
[2] & 0xFF) << 16)
5511 + ((buf
[3] & 0xFF) << 24);
5514 /* For debugging, the CRC value printed in hexadecimal should match
5515 the CRC printed by "zcat -l -v filename".
5516 printf("CRC of file %s is %x\n", filename, val); */
5522 /* Given module, dump it to disk. If there was an error while
5523 processing the module, dump_flag will be set to zero and we delete
5524 the module file, even if it was already there. */
5527 gfc_dump_module (const char *name
, int dump_flag
)
5530 char *filename
, *filename_tmp
;
5533 n
= strlen (name
) + strlen (MODULE_EXTENSION
) + 1;
5534 if (gfc_option
.module_dir
!= NULL
)
5536 n
+= strlen (gfc_option
.module_dir
);
5537 filename
= (char *) alloca (n
);
5538 strcpy (filename
, gfc_option
.module_dir
);
5539 strcat (filename
, name
);
5543 filename
= (char *) alloca (n
);
5544 strcpy (filename
, name
);
5546 strcat (filename
, MODULE_EXTENSION
);
5548 /* Name of the temporary file used to write the module. */
5549 filename_tmp
= (char *) alloca (n
+ 1);
5550 strcpy (filename_tmp
, filename
);
5551 strcat (filename_tmp
, "0");
5553 /* There was an error while processing the module. We delete the
5554 module file, even if it was already there. */
5561 if (gfc_cpp_makedep ())
5562 gfc_cpp_add_target (filename
);
5564 /* Write the module to the temporary file. */
5565 module_fp
= gzopen (filename_tmp
, "w");
5566 if (module_fp
== NULL
)
5567 gfc_fatal_error ("Can't open module file '%s' for writing at %C: %s",
5568 filename_tmp
, xstrerror (errno
));
5570 /* Write the header.
5571 FIXME: For backwards compatibility with the old uncompressed
5572 module format, write an extra empty line. When the module version
5573 is bumped, this can be removed. */
5574 gzprintf (module_fp
, "GFORTRAN module version '%s' created from %s\n\n",
5575 MOD_VERSION
, gfc_source_file
);
5578 /* Write the module itself. */
5580 module_name
= gfc_get_string (name
);
5586 free_pi_tree (pi_root
);
5591 if (gzclose (module_fp
))
5592 gfc_fatal_error ("Error writing module file '%s' for writing: %s",
5593 filename_tmp
, xstrerror (errno
));
5595 /* Read the CRC32 from the gzip trailers of the module files and
5597 if (!read_crc32_from_module_file (filename_tmp
, &crc
)
5598 || !read_crc32_from_module_file (filename
, &crc_old
)
5601 /* Module file have changed, replace the old one. */
5602 if (rename (filename_tmp
, filename
))
5603 gfc_fatal_error ("Can't rename module file '%s' to '%s': %s",
5604 filename_tmp
, filename
, xstrerror (errno
));
5608 if (unlink (filename_tmp
))
5609 gfc_fatal_error ("Can't delete temporary module file '%s': %s",
5610 filename_tmp
, xstrerror (errno
));
5616 create_intrinsic_function (const char *name
, int id
,
5617 const char *modname
, intmod_id module
,
5618 bool subroutine
, gfc_symbol
*result_type
)
5620 gfc_intrinsic_sym
*isym
;
5621 gfc_symtree
*tmp_symtree
;
5624 tmp_symtree
= gfc_find_symtree (gfc_current_ns
->sym_root
, name
);
5627 if (strcmp (modname
, tmp_symtree
->n
.sym
->module
) == 0)
5629 gfc_error ("Symbol '%s' already declared", name
);
5632 gfc_get_sym_tree (name
, gfc_current_ns
, &tmp_symtree
, false);
5633 sym
= tmp_symtree
->n
.sym
;
5637 gfc_isym_id isym_id
= gfc_isym_id_by_intmod (module
, id
);
5638 isym
= gfc_intrinsic_subroutine_by_id (isym_id
);
5639 sym
->attr
.subroutine
= 1;
5643 gfc_isym_id isym_id
= gfc_isym_id_by_intmod (module
, id
);
5644 isym
= gfc_intrinsic_function_by_id (isym_id
);
5646 sym
->attr
.function
= 1;
5649 sym
->ts
.type
= BT_DERIVED
;
5650 sym
->ts
.u
.derived
= result_type
;
5651 sym
->ts
.is_c_interop
= 1;
5652 isym
->ts
.f90_type
= BT_VOID
;
5653 isym
->ts
.type
= BT_DERIVED
;
5654 isym
->ts
.f90_type
= BT_VOID
;
5655 isym
->ts
.u
.derived
= result_type
;
5656 isym
->ts
.is_c_interop
= 1;
5661 sym
->attr
.flavor
= FL_PROCEDURE
;
5662 sym
->attr
.intrinsic
= 1;
5664 sym
->module
= gfc_get_string (modname
);
5665 sym
->attr
.use_assoc
= 1;
5666 sym
->from_intmod
= module
;
5667 sym
->intmod_sym_id
= id
;
5671 /* Import the intrinsic ISO_C_BINDING module, generating symbols in
5672 the current namespace for all named constants, pointer types, and
5673 procedures in the module unless the only clause was used or a rename
5674 list was provided. */
5677 import_iso_c_binding_module (void)
5679 gfc_symbol
*mod_sym
= NULL
, *return_type
;
5680 gfc_symtree
*mod_symtree
= NULL
, *tmp_symtree
;
5681 gfc_symtree
*c_ptr
= NULL
, *c_funptr
= NULL
;
5682 const char *iso_c_module_name
= "__iso_c_binding";
5685 bool want_c_ptr
= false, want_c_funptr
= false;
5687 /* Look only in the current namespace. */
5688 mod_symtree
= gfc_find_symtree (gfc_current_ns
->sym_root
, iso_c_module_name
);
5690 if (mod_symtree
== NULL
)
5692 /* symtree doesn't already exist in current namespace. */
5693 gfc_get_sym_tree (iso_c_module_name
, gfc_current_ns
, &mod_symtree
,
5696 if (mod_symtree
!= NULL
)
5697 mod_sym
= mod_symtree
->n
.sym
;
5699 gfc_internal_error ("import_iso_c_binding_module(): Unable to "
5700 "create symbol for %s", iso_c_module_name
);
5702 mod_sym
->attr
.flavor
= FL_MODULE
;
5703 mod_sym
->attr
.intrinsic
= 1;
5704 mod_sym
->module
= gfc_get_string (iso_c_module_name
);
5705 mod_sym
->from_intmod
= INTMOD_ISO_C_BINDING
;
5708 /* Check whether C_PTR or C_FUNPTR are in the include list, if so, load it;
5709 check also whether C_NULL_(FUN)PTR or C_(FUN)LOC are requested, which
5711 for (u
= gfc_rename_list
; u
; u
= u
->next
)
5713 if (strcmp (c_interop_kinds_table
[ISOCBINDING_NULL_PTR
].name
,
5716 else if (strcmp (c_interop_kinds_table
[ISOCBINDING_LOC
].name
,
5719 else if (strcmp (c_interop_kinds_table
[ISOCBINDING_NULL_FUNPTR
].name
,
5721 want_c_funptr
= true;
5722 else if (strcmp (c_interop_kinds_table
[ISOCBINDING_FUNLOC
].name
,
5724 want_c_funptr
= true;
5725 else if (strcmp (c_interop_kinds_table
[ISOCBINDING_PTR
].name
,
5728 c_ptr
= generate_isocbinding_symbol (iso_c_module_name
,
5729 (iso_c_binding_symbol
)
5731 u
->local_name
[0] ? u
->local_name
5735 else if (strcmp (c_interop_kinds_table
[ISOCBINDING_FUNPTR
].name
,
5739 = generate_isocbinding_symbol (iso_c_module_name
,
5740 (iso_c_binding_symbol
)
5742 u
->local_name
[0] ? u
->local_name
5748 if ((want_c_ptr
|| !only_flag
) && !c_ptr
)
5749 c_ptr
= generate_isocbinding_symbol (iso_c_module_name
,
5750 (iso_c_binding_symbol
)
5752 NULL
, NULL
, only_flag
);
5753 if ((want_c_funptr
|| !only_flag
) && !c_funptr
)
5754 c_funptr
= generate_isocbinding_symbol (iso_c_module_name
,
5755 (iso_c_binding_symbol
)
5757 NULL
, NULL
, only_flag
);
5759 /* Generate the symbols for the named constants representing
5760 the kinds for intrinsic data types. */
5761 for (i
= 0; i
< ISOCBINDING_NUMBER
; i
++)
5764 for (u
= gfc_rename_list
; u
; u
= u
->next
)
5765 if (strcmp (c_interop_kinds_table
[i
].name
, u
->use_name
) == 0)
5774 #define NAMED_FUNCTION(a,b,c,d) \
5776 not_in_std = (gfc_option.allow_std & d) == 0; \
5779 #define NAMED_SUBROUTINE(a,b,c,d) \
5781 not_in_std = (gfc_option.allow_std & d) == 0; \
5784 #define NAMED_INTCST(a,b,c,d) \
5786 not_in_std = (gfc_option.allow_std & d) == 0; \
5789 #define NAMED_REALCST(a,b,c,d) \
5791 not_in_std = (gfc_option.allow_std & d) == 0; \
5794 #define NAMED_CMPXCST(a,b,c,d) \
5796 not_in_std = (gfc_option.allow_std & d) == 0; \
5799 #include "iso-c-binding.def"
5807 gfc_error ("The symbol '%s', referenced at %L, is not "
5808 "in the selected standard", name
, &u
->where
);
5814 #define NAMED_FUNCTION(a,b,c,d) \
5816 if (a == ISOCBINDING_LOC) \
5817 return_type = c_ptr->n.sym; \
5818 else if (a == ISOCBINDING_FUNLOC) \
5819 return_type = c_funptr->n.sym; \
5821 return_type = NULL; \
5822 create_intrinsic_function (u->local_name[0] \
5823 ? u->local_name : u->use_name, \
5824 a, iso_c_module_name, \
5825 INTMOD_ISO_C_BINDING, false, \
5828 #define NAMED_SUBROUTINE(a,b,c,d) \
5830 create_intrinsic_function (u->local_name[0] ? u->local_name \
5832 a, iso_c_module_name, \
5833 INTMOD_ISO_C_BINDING, true, NULL); \
5835 #include "iso-c-binding.def"
5837 case ISOCBINDING_PTR
:
5838 case ISOCBINDING_FUNPTR
:
5839 /* Already handled above. */
5842 if (i
== ISOCBINDING_NULL_PTR
)
5843 tmp_symtree
= c_ptr
;
5844 else if (i
== ISOCBINDING_NULL_FUNPTR
)
5845 tmp_symtree
= c_funptr
;
5848 generate_isocbinding_symbol (iso_c_module_name
,
5849 (iso_c_binding_symbol
) i
,
5851 ? u
->local_name
: u
->use_name
,
5852 tmp_symtree
, false);
5856 if (!found
&& !only_flag
)
5858 /* Skip, if the symbol is not in the enabled standard. */
5861 #define NAMED_FUNCTION(a,b,c,d) \
5863 if ((gfc_option.allow_std & d) == 0) \
5866 #define NAMED_SUBROUTINE(a,b,c,d) \
5868 if ((gfc_option.allow_std & d) == 0) \
5871 #define NAMED_INTCST(a,b,c,d) \
5873 if ((gfc_option.allow_std & d) == 0) \
5876 #define NAMED_REALCST(a,b,c,d) \
5878 if ((gfc_option.allow_std & d) == 0) \
5881 #define NAMED_CMPXCST(a,b,c,d) \
5883 if ((gfc_option.allow_std & d) == 0) \
5886 #include "iso-c-binding.def"
5888 ; /* Not GFC_STD_* versioned. */
5893 #define NAMED_FUNCTION(a,b,c,d) \
5895 if (a == ISOCBINDING_LOC) \
5896 return_type = c_ptr->n.sym; \
5897 else if (a == ISOCBINDING_FUNLOC) \
5898 return_type = c_funptr->n.sym; \
5900 return_type = NULL; \
5901 create_intrinsic_function (b, a, iso_c_module_name, \
5902 INTMOD_ISO_C_BINDING, false, \
5905 #define NAMED_SUBROUTINE(a,b,c,d) \
5907 create_intrinsic_function (b, a, iso_c_module_name, \
5908 INTMOD_ISO_C_BINDING, true, NULL); \
5910 #include "iso-c-binding.def"
5912 case ISOCBINDING_PTR
:
5913 case ISOCBINDING_FUNPTR
:
5914 /* Already handled above. */
5917 if (i
== ISOCBINDING_NULL_PTR
)
5918 tmp_symtree
= c_ptr
;
5919 else if (i
== ISOCBINDING_NULL_FUNPTR
)
5920 tmp_symtree
= c_funptr
;
5923 generate_isocbinding_symbol (iso_c_module_name
,
5924 (iso_c_binding_symbol
) i
, NULL
,
5925 tmp_symtree
, false);
5930 for (u
= gfc_rename_list
; u
; u
= u
->next
)
5935 gfc_error ("Symbol '%s' referenced at %L not found in intrinsic "
5936 "module ISO_C_BINDING", u
->use_name
, &u
->where
);
5941 /* Add an integer named constant from a given module. */
5944 create_int_parameter (const char *name
, int value
, const char *modname
,
5945 intmod_id module
, int id
)
5947 gfc_symtree
*tmp_symtree
;
5950 tmp_symtree
= gfc_find_symtree (gfc_current_ns
->sym_root
, name
);
5951 if (tmp_symtree
!= NULL
)
5953 if (strcmp (modname
, tmp_symtree
->n
.sym
->module
) == 0)
5956 gfc_error ("Symbol '%s' already declared", name
);
5959 gfc_get_sym_tree (name
, gfc_current_ns
, &tmp_symtree
, false);
5960 sym
= tmp_symtree
->n
.sym
;
5962 sym
->module
= gfc_get_string (modname
);
5963 sym
->attr
.flavor
= FL_PARAMETER
;
5964 sym
->ts
.type
= BT_INTEGER
;
5965 sym
->ts
.kind
= gfc_default_integer_kind
;
5966 sym
->value
= gfc_get_int_expr (gfc_default_integer_kind
, NULL
, value
);
5967 sym
->attr
.use_assoc
= 1;
5968 sym
->from_intmod
= module
;
5969 sym
->intmod_sym_id
= id
;
5973 /* Value is already contained by the array constructor, but not
5977 create_int_parameter_array (const char *name
, int size
, gfc_expr
*value
,
5978 const char *modname
, intmod_id module
, int id
)
5980 gfc_symtree
*tmp_symtree
;
5983 tmp_symtree
= gfc_find_symtree (gfc_current_ns
->sym_root
, name
);
5984 if (tmp_symtree
!= NULL
)
5986 if (strcmp (modname
, tmp_symtree
->n
.sym
->module
) == 0)
5989 gfc_error ("Symbol '%s' already declared", name
);
5992 gfc_get_sym_tree (name
, gfc_current_ns
, &tmp_symtree
, false);
5993 sym
= tmp_symtree
->n
.sym
;
5995 sym
->module
= gfc_get_string (modname
);
5996 sym
->attr
.flavor
= FL_PARAMETER
;
5997 sym
->ts
.type
= BT_INTEGER
;
5998 sym
->ts
.kind
= gfc_default_integer_kind
;
5999 sym
->attr
.use_assoc
= 1;
6000 sym
->from_intmod
= module
;
6001 sym
->intmod_sym_id
= id
;
6002 sym
->attr
.dimension
= 1;
6003 sym
->as
= gfc_get_array_spec ();
6005 sym
->as
->type
= AS_EXPLICIT
;
6006 sym
->as
->lower
[0] = gfc_get_int_expr (gfc_default_integer_kind
, NULL
, 1);
6007 sym
->as
->upper
[0] = gfc_get_int_expr (gfc_default_integer_kind
, NULL
, size
);
6010 sym
->value
->shape
= gfc_get_shape (1);
6011 mpz_init_set_ui (sym
->value
->shape
[0], size
);
6015 /* Add an derived type for a given module. */
6018 create_derived_type (const char *name
, const char *modname
,
6019 intmod_id module
, int id
)
6021 gfc_symtree
*tmp_symtree
;
6022 gfc_symbol
*sym
, *dt_sym
;
6023 gfc_interface
*intr
, *head
;
6025 tmp_symtree
= gfc_find_symtree (gfc_current_ns
->sym_root
, name
);
6026 if (tmp_symtree
!= NULL
)
6028 if (strcmp (modname
, tmp_symtree
->n
.sym
->module
) == 0)
6031 gfc_error ("Symbol '%s' already declared", name
);
6034 gfc_get_sym_tree (name
, gfc_current_ns
, &tmp_symtree
, false);
6035 sym
= tmp_symtree
->n
.sym
;
6036 sym
->module
= gfc_get_string (modname
);
6037 sym
->from_intmod
= module
;
6038 sym
->intmod_sym_id
= id
;
6039 sym
->attr
.flavor
= FL_PROCEDURE
;
6040 sym
->attr
.function
= 1;
6041 sym
->attr
.generic
= 1;
6043 gfc_get_sym_tree (dt_upper_string (sym
->name
),
6044 gfc_current_ns
, &tmp_symtree
, false);
6045 dt_sym
= tmp_symtree
->n
.sym
;
6046 dt_sym
->name
= gfc_get_string (sym
->name
);
6047 dt_sym
->attr
.flavor
= FL_DERIVED
;
6048 dt_sym
->attr
.private_comp
= 1;
6049 dt_sym
->attr
.zero_comp
= 1;
6050 dt_sym
->attr
.use_assoc
= 1;
6051 dt_sym
->module
= gfc_get_string (modname
);
6052 dt_sym
->from_intmod
= module
;
6053 dt_sym
->intmod_sym_id
= id
;
6055 head
= sym
->generic
;
6056 intr
= gfc_get_interface ();
6058 intr
->where
= gfc_current_locus
;
6060 sym
->generic
= intr
;
6061 sym
->attr
.if_source
= IFSRC_DECL
;
6065 /* Read the contents of the module file into a temporary buffer. */
6068 read_module_to_tmpbuf ()
6070 /* We don't know the uncompressed size, so enlarge the buffer as
6076 module_content
= XNEWVEC (char, cursz
);
6080 int nread
= gzread (module_fp
, module_content
+ len
, rsize
);
6085 module_content
= XRESIZEVEC (char, module_content
, cursz
);
6086 rsize
= cursz
- len
;
6089 module_content
= XRESIZEVEC (char, module_content
, len
+ 1);
6090 module_content
[len
] = '\0';
6096 /* USE the ISO_FORTRAN_ENV intrinsic module. */
6099 use_iso_fortran_env_module (void)
6101 static char mod
[] = "iso_fortran_env";
6103 gfc_symbol
*mod_sym
;
6104 gfc_symtree
*mod_symtree
;
6108 intmod_sym symbol
[] = {
6109 #define NAMED_INTCST(a,b,c,d) { a, b, 0, d },
6110 #define NAMED_KINDARRAY(a,b,c,d) { a, b, 0, d },
6111 #define NAMED_DERIVED_TYPE(a,b,c,d) { a, b, 0, d },
6112 #define NAMED_FUNCTION(a,b,c,d) { a, b, c, d },
6113 #define NAMED_SUBROUTINE(a,b,c,d) { a, b, c, d },
6114 #include "iso-fortran-env.def"
6115 { ISOFORTRANENV_INVALID
, NULL
, -1234, 0 } };
6118 #define NAMED_INTCST(a,b,c,d) symbol[i++].value = c;
6119 #include "iso-fortran-env.def"
6121 /* Generate the symbol for the module itself. */
6122 mod_symtree
= gfc_find_symtree (gfc_current_ns
->sym_root
, mod
);
6123 if (mod_symtree
== NULL
)
6125 gfc_get_sym_tree (mod
, gfc_current_ns
, &mod_symtree
, false);
6126 gcc_assert (mod_symtree
);
6127 mod_sym
= mod_symtree
->n
.sym
;
6129 mod_sym
->attr
.flavor
= FL_MODULE
;
6130 mod_sym
->attr
.intrinsic
= 1;
6131 mod_sym
->module
= gfc_get_string (mod
);
6132 mod_sym
->from_intmod
= INTMOD_ISO_FORTRAN_ENV
;
6135 if (!mod_symtree
->n
.sym
->attr
.intrinsic
)
6136 gfc_error ("Use of intrinsic module '%s' at %C conflicts with "
6137 "non-intrinsic module name used previously", mod
);
6139 /* Generate the symbols for the module integer named constants. */
6141 for (i
= 0; symbol
[i
].name
; i
++)
6144 for (u
= gfc_rename_list
; u
; u
= u
->next
)
6146 if (strcmp (symbol
[i
].name
, u
->use_name
) == 0)
6151 if (!gfc_notify_std (symbol
[i
].standard
, "The symbol '%s', "
6152 "referenced at %L, is not in the selected "
6153 "standard", symbol
[i
].name
, &u
->where
))
6156 if ((gfc_option
.flag_default_integer
|| gfc_option
.flag_default_real
)
6157 && symbol
[i
].id
== ISOFORTRANENV_NUMERIC_STORAGE_SIZE
)
6158 gfc_warning_now ("Use of the NUMERIC_STORAGE_SIZE named "
6159 "constant from intrinsic module "
6160 "ISO_FORTRAN_ENV at %L is incompatible with "
6161 "option %s", &u
->where
,
6162 gfc_option
.flag_default_integer
6163 ? "-fdefault-integer-8"
6164 : "-fdefault-real-8");
6165 switch (symbol
[i
].id
)
6167 #define NAMED_INTCST(a,b,c,d) \
6169 #include "iso-fortran-env.def"
6170 create_int_parameter (u
->local_name
[0] ? u
->local_name
6172 symbol
[i
].value
, mod
,
6173 INTMOD_ISO_FORTRAN_ENV
, symbol
[i
].id
);
6176 #define NAMED_KINDARRAY(a,b,KINDS,d) \
6178 expr = gfc_get_array_expr (BT_INTEGER, \
6179 gfc_default_integer_kind,\
6181 for (j = 0; KINDS[j].kind != 0; j++) \
6182 gfc_constructor_append_expr (&expr->value.constructor, \
6183 gfc_get_int_expr (gfc_default_integer_kind, NULL, \
6184 KINDS[j].kind), NULL); \
6185 create_int_parameter_array (u->local_name[0] ? u->local_name \
6188 INTMOD_ISO_FORTRAN_ENV, \
6191 #include "iso-fortran-env.def"
6193 #define NAMED_DERIVED_TYPE(a,b,TYPE,STD) \
6195 #include "iso-fortran-env.def"
6196 create_derived_type (u
->local_name
[0] ? u
->local_name
6198 mod
, INTMOD_ISO_FORTRAN_ENV
,
6202 #define NAMED_FUNCTION(a,b,c,d) \
6204 #include "iso-fortran-env.def"
6205 create_intrinsic_function (u
->local_name
[0] ? u
->local_name
6208 INTMOD_ISO_FORTRAN_ENV
, false,
6218 if (!found
&& !only_flag
)
6220 if ((gfc_option
.allow_std
& symbol
[i
].standard
) == 0)
6223 if ((gfc_option
.flag_default_integer
|| gfc_option
.flag_default_real
)
6224 && symbol
[i
].id
== ISOFORTRANENV_NUMERIC_STORAGE_SIZE
)
6225 gfc_warning_now ("Use of the NUMERIC_STORAGE_SIZE named constant "
6226 "from intrinsic module ISO_FORTRAN_ENV at %C is "
6227 "incompatible with option %s",
6228 gfc_option
.flag_default_integer
6229 ? "-fdefault-integer-8" : "-fdefault-real-8");
6231 switch (symbol
[i
].id
)
6233 #define NAMED_INTCST(a,b,c,d) \
6235 #include "iso-fortran-env.def"
6236 create_int_parameter (symbol
[i
].name
, symbol
[i
].value
, mod
,
6237 INTMOD_ISO_FORTRAN_ENV
, symbol
[i
].id
);
6240 #define NAMED_KINDARRAY(a,b,KINDS,d) \
6242 expr = gfc_get_array_expr (BT_INTEGER, gfc_default_integer_kind, \
6244 for (j = 0; KINDS[j].kind != 0; j++) \
6245 gfc_constructor_append_expr (&expr->value.constructor, \
6246 gfc_get_int_expr (gfc_default_integer_kind, NULL, \
6247 KINDS[j].kind), NULL); \
6248 create_int_parameter_array (symbol[i].name, j, expr, mod, \
6249 INTMOD_ISO_FORTRAN_ENV, symbol[i].id);\
6251 #include "iso-fortran-env.def"
6253 #define NAMED_DERIVED_TYPE(a,b,TYPE,STD) \
6255 #include "iso-fortran-env.def"
6256 create_derived_type (symbol
[i
].name
, mod
, INTMOD_ISO_FORTRAN_ENV
,
6260 #define NAMED_FUNCTION(a,b,c,d) \
6262 #include "iso-fortran-env.def"
6263 create_intrinsic_function (symbol
[i
].name
, symbol
[i
].id
, mod
,
6264 INTMOD_ISO_FORTRAN_ENV
, false,
6274 for (u
= gfc_rename_list
; u
; u
= u
->next
)
6279 gfc_error ("Symbol '%s' referenced at %L not found in intrinsic "
6280 "module ISO_FORTRAN_ENV", u
->use_name
, &u
->where
);
6285 /* Process a USE directive. */
6288 gfc_use_module (gfc_use_list
*module
)
6293 gfc_symtree
*mod_symtree
;
6294 gfc_use_list
*use_stmt
;
6295 locus old_locus
= gfc_current_locus
;
6297 gfc_current_locus
= module
->where
;
6298 module_name
= module
->module_name
;
6299 gfc_rename_list
= module
->rename
;
6300 only_flag
= module
->only_flag
;
6302 filename
= XALLOCAVEC (char, strlen (module_name
) + strlen (MODULE_EXTENSION
)
6304 strcpy (filename
, module_name
);
6305 strcat (filename
, MODULE_EXTENSION
);
6307 /* First, try to find an non-intrinsic module, unless the USE statement
6308 specified that the module is intrinsic. */
6310 if (!module
->intrinsic
)
6311 module_fp
= gzopen_included_file (filename
, true, true);
6313 /* Then, see if it's an intrinsic one, unless the USE statement
6314 specified that the module is non-intrinsic. */
6315 if (module_fp
== NULL
&& !module
->non_intrinsic
)
6317 if (strcmp (module_name
, "iso_fortran_env") == 0
6318 && gfc_notify_std (GFC_STD_F2003
, "ISO_FORTRAN_ENV "
6319 "intrinsic module at %C"))
6321 use_iso_fortran_env_module ();
6322 free_rename (module
->rename
);
6323 module
->rename
= NULL
;
6324 gfc_current_locus
= old_locus
;
6325 module
->intrinsic
= true;
6329 if (strcmp (module_name
, "iso_c_binding") == 0
6330 && gfc_notify_std (GFC_STD_F2003
, "ISO_C_BINDING module at %C"))
6332 import_iso_c_binding_module();
6333 free_rename (module
->rename
);
6334 module
->rename
= NULL
;
6335 gfc_current_locus
= old_locus
;
6336 module
->intrinsic
= true;
6340 module_fp
= gzopen_intrinsic_module (filename
);
6342 if (module_fp
== NULL
&& module
->intrinsic
)
6343 gfc_fatal_error ("Can't find an intrinsic module named '%s' at %C",
6347 if (module_fp
== NULL
)
6348 gfc_fatal_error ("Can't open module file '%s' for reading at %C: %s",
6349 filename
, xstrerror (errno
));
6351 /* Check that we haven't already USEd an intrinsic module with the
6354 mod_symtree
= gfc_find_symtree (gfc_current_ns
->sym_root
, module_name
);
6355 if (mod_symtree
&& mod_symtree
->n
.sym
->attr
.intrinsic
)
6356 gfc_error ("Use of non-intrinsic module '%s' at %C conflicts with "
6357 "intrinsic module name used previously", module_name
);
6364 read_module_to_tmpbuf ();
6365 gzclose (module_fp
);
6367 /* Skip the first two lines of the module, after checking that this is
6368 a gfortran module file. */
6374 bad_module ("Unexpected end of module");
6377 if ((start
== 1 && strcmp (atom_name
, "GFORTRAN") != 0)
6378 || (start
== 2 && strcmp (atom_name
, " module") != 0))
6379 gfc_fatal_error ("File '%s' opened at %C is not a GNU Fortran"
6380 " module file", filename
);
6383 if (strcmp (atom_name
, " version") != 0
6384 || module_char () != ' '
6385 || parse_atom () != ATOM_STRING
6386 || strcmp (atom_string
, MOD_VERSION
))
6387 gfc_fatal_error ("Cannot read module file '%s' opened at %C,"
6388 " because it was created by a different"
6389 " version of GNU Fortran", filename
);
6398 /* Make sure we're not reading the same module that we may be building. */
6399 for (p
= gfc_state_stack
; p
; p
= p
->previous
)
6400 if (p
->state
== COMP_MODULE
&& strcmp (p
->sym
->name
, module_name
) == 0)
6401 gfc_fatal_error ("Can't USE the same module we're building!");
6404 init_true_name_tree ();
6408 free_true_name (true_name_root
);
6409 true_name_root
= NULL
;
6411 free_pi_tree (pi_root
);
6414 XDELETEVEC (module_content
);
6415 module_content
= NULL
;
6417 use_stmt
= gfc_get_use_list ();
6418 *use_stmt
= *module
;
6419 use_stmt
->next
= gfc_current_ns
->use_stmts
;
6420 gfc_current_ns
->use_stmts
= use_stmt
;
6422 gfc_current_locus
= old_locus
;
6426 /* Remove duplicated intrinsic operators from the rename list. */
6429 rename_list_remove_duplicate (gfc_use_rename
*list
)
6431 gfc_use_rename
*seek
, *last
;
6433 for (; list
; list
= list
->next
)
6434 if (list
->op
!= INTRINSIC_USER
&& list
->op
!= INTRINSIC_NONE
)
6437 for (seek
= list
->next
; seek
; seek
= last
->next
)
6439 if (list
->op
== seek
->op
)
6441 last
->next
= seek
->next
;
6451 /* Process all USE directives. */
6454 gfc_use_modules (void)
6456 gfc_use_list
*next
, *seek
, *last
;
6458 for (next
= module_list
; next
; next
= next
->next
)
6460 bool non_intrinsic
= next
->non_intrinsic
;
6461 bool intrinsic
= next
->intrinsic
;
6462 bool neither
= !non_intrinsic
&& !intrinsic
;
6464 for (seek
= next
->next
; seek
; seek
= seek
->next
)
6466 if (next
->module_name
!= seek
->module_name
)
6469 if (seek
->non_intrinsic
)
6470 non_intrinsic
= true;
6471 else if (seek
->intrinsic
)
6477 if (intrinsic
&& neither
&& !non_intrinsic
)
6482 filename
= XALLOCAVEC (char,
6483 strlen (next
->module_name
)
6484 + strlen (MODULE_EXTENSION
) + 1);
6485 strcpy (filename
, next
->module_name
);
6486 strcat (filename
, MODULE_EXTENSION
);
6487 fp
= gfc_open_included_file (filename
, true, true);
6490 non_intrinsic
= true;
6496 for (seek
= next
->next
; seek
; seek
= last
->next
)
6498 if (next
->module_name
!= seek
->module_name
)
6504 if ((!next
->intrinsic
&& !seek
->intrinsic
)
6505 || (next
->intrinsic
&& seek
->intrinsic
)
6508 if (!seek
->only_flag
)
6509 next
->only_flag
= false;
6512 gfc_use_rename
*r
= seek
->rename
;
6515 r
->next
= next
->rename
;
6516 next
->rename
= seek
->rename
;
6518 last
->next
= seek
->next
;
6526 for (; module_list
; module_list
= next
)
6528 next
= module_list
->next
;
6529 rename_list_remove_duplicate (module_list
->rename
);
6530 gfc_use_module (module_list
);
6533 gfc_rename_list
= NULL
;
6538 gfc_free_use_stmts (gfc_use_list
*use_stmts
)
6541 for (; use_stmts
; use_stmts
= next
)
6543 gfc_use_rename
*next_rename
;
6545 for (; use_stmts
->rename
; use_stmts
->rename
= next_rename
)
6547 next_rename
= use_stmts
->rename
->next
;
6548 free (use_stmts
->rename
);
6550 next
= use_stmts
->next
;
6557 gfc_module_init_2 (void)
6559 last_atom
= ATOM_LPAREN
;
6560 gfc_rename_list
= NULL
;
6566 gfc_module_done_2 (void)
6568 free_rename (gfc_rename_list
);
6569 gfc_rename_list
= NULL
;