diff options
Diffstat (limited to 'gcc/fortran/module.c')
-rw-r--r-- | gcc/fortran/module.c | 44 |
1 files changed, 30 insertions, 14 deletions
diff --git a/gcc/fortran/module.c b/gcc/fortran/module.c index 6956fc9..7c9c2b1 100644 --- a/gcc/fortran/module.c +++ b/gcc/fortran/module.c @@ -3024,6 +3024,8 @@ load_generic_interfaces (void) const char *p; char name[GFC_MAX_SYMBOL_LEN + 1], module[GFC_MAX_SYMBOL_LEN + 1]; gfc_symbol *sym; + gfc_interface *generic = NULL; + int n, i; mio_lparen (); @@ -3034,25 +3036,39 @@ load_generic_interfaces (void) mio_internal_string (name); mio_internal_string (module); - /* Decide if we need to load this one or not. */ - p = find_use_name (name); + n = number_use_names (name); + n = n ? n : 1; - if (p == NULL || gfc_find_symbol (p, NULL, 0, &sym)) + for (i = 1; i <= n; i++) { - while (parse_atom () != ATOM_RPAREN); - continue; - } + /* Decide if we need to load this one or not. */ + p = find_use_name_n (name, &i); - if (sym == NULL) - { - gfc_get_symbol (p, NULL, &sym); + if (p == NULL || gfc_find_symbol (p, NULL, 0, &sym)) + { + while (parse_atom () != ATOM_RPAREN); + continue; + } - sym->attr.flavor = FL_PROCEDURE; - sym->attr.generic = 1; - sym->attr.use_assoc = 1; - } + if (sym == NULL) + { + gfc_get_symbol (p, NULL, &sym); - mio_interface_rest (&sym->generic); + sym->attr.flavor = FL_PROCEDURE; + sym->attr.generic = 1; + sym->attr.use_assoc = 1; + } + if (i == 1) + { + mio_interface_rest (&sym->generic); + generic = sym->generic; + } + else + { + sym->generic = generic; + sym->attr.generic_copy = 1; + } + } } mio_rparen (); |