From ae7c61dead40c0674b58c676a225ca05cea3ffe8 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Sun, 17 Jan 2010 14:33:11 +0100 Subject: re PR fortran/42677 (Bogus Error: Ambiguous interfaces '...' in intrinsic assignment operator) gcc/fortran/ 2010-01-17 Janus Weil PR fortran/42677 * gfortran.h (symbol_attribute): Remove 'ambiguous_interfaces'. * interface.c (check_interface1): Move a warning message here from resolve_fl_procedure. (check_sym_interfaces): Removed 'attr.ambiguous_interfaces'. * module.c (read_module): Remove call to gfc_check_interfaces, since this comes too early here. * resolve.c (resolve_fl_procedure): Move warning message to check_interface1. gcc/testsuite/ 2010-01-17 Janus Weil PR fortran/42677 * gfortran.dg/interface_assignment_5.f90: New test. From-SVN: r155979 --- gcc/fortran/ChangeLog | 12 ++++++++++++ gcc/fortran/gfortran.h | 3 --- gcc/fortran/interface.c | 20 +++++++++----------- gcc/fortran/module.c | 2 -- gcc/fortran/resolve.c | 4 ---- 5 files changed, 21 insertions(+), 20 deletions(-) (limited to 'gcc/fortran') diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index af85555..b2741b1 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,15 @@ +2010-01-17 Janus Weil + + PR fortran/42677 + * gfortran.h (symbol_attribute): Remove 'ambiguous_interfaces'. + * interface.c (check_interface1): Move a warning message here from + resolve_fl_procedure. + (check_sym_interfaces): Removed 'attr.ambiguous_interfaces'. + * module.c (read_module): Remove call to gfc_check_interfaces, since + this comes too early here. + * resolve.c (resolve_fl_procedure): Move warning message to + check_interface1. + 2010-01-14 Jerry DeLisle PR fortran/42684 diff --git a/gcc/fortran/gfortran.h b/gcc/fortran/gfortran.h index 345a701..320de83 100644 --- a/gcc/fortran/gfortran.h +++ b/gcc/fortran/gfortran.h @@ -714,9 +714,6 @@ typedef struct modification of type or type parameters is permitted. */ unsigned referenced:1; - /* Set if the symbol has ambiguous interfaces. */ - unsigned ambiguous_interfaces:1; - /* Set if this is the symbol for the main program. */ unsigned is_main_program:1; diff --git a/gcc/fortran/interface.c b/gcc/fortran/interface.c index 2a5ece1..f27d75c 100644 --- a/gcc/fortran/interface.c +++ b/gcc/fortran/interface.c @@ -1132,16 +1132,16 @@ check_interface1 (gfc_interface *p, gfc_interface *q0, NULL, 0)) { if (referenced) - { - gfc_error ("Ambiguous interfaces '%s' and '%s' in %s at %L", - p->sym->name, q->sym->name, interface_name, - &p->where); - } - - if (!p->sym->attr.use_assoc && q->sym->attr.use_assoc) + gfc_error ("Ambiguous interfaces '%s' and '%s' in %s at %L", + p->sym->name, q->sym->name, interface_name, + &p->where); + else if (!p->sym->attr.use_assoc && q->sym->attr.use_assoc) gfc_warning ("Ambiguous interfaces '%s' and '%s' in %s at %L", p->sym->name, q->sym->name, interface_name, &p->where); + else + gfc_warning ("Although not referenced, '%s' has ambiguous " + "interfaces at %L", interface_name, &p->where); return 1; } } @@ -1157,7 +1157,6 @@ static void check_sym_interfaces (gfc_symbol *sym) { char interface_name[100]; - bool k; gfc_interface *p; if (sym->ns != gfc_current_ns) @@ -1184,9 +1183,8 @@ check_sym_interfaces (gfc_symbol *sym) /* Originally, this test was applied to host interfaces too; this is incorrect since host associated symbols, from any source, cannot be ambiguous with local symbols. */ - k = sym->attr.referenced || !sym->attr.use_assoc; - if (check_interface1 (sym->generic, sym->generic, 1, interface_name, k)) - sym->attr.ambiguous_interfaces = 1; + check_interface1 (sym->generic, sym->generic, 1, interface_name, + sym->attr.referenced || !sym->attr.use_assoc); } } diff --git a/gcc/fortran/module.c b/gcc/fortran/module.c index 667bab8..13c9b82 100644 --- a/gcc/fortran/module.c +++ b/gcc/fortran/module.c @@ -4482,8 +4482,6 @@ read_module (void) module_name); } - gfc_check_interfaces (gfc_current_ns); - /* Now we should be in a position to fill f2k_derived with derived type extensions, since everything has been loaded. */ set_module_locus (&extensions); diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 9212521..6bc5fde 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -9077,10 +9077,6 @@ resolve_fl_procedure (gfc_symbol *sym, int mp_flag) { gfc_formal_arglist *arg; - if (sym->attr.ambiguous_interfaces && !sym->attr.referenced) - gfc_warning ("Although not referenced, '%s' at %L has ambiguous " - "interfaces", sym->name, &sym->declared_at); - if (sym->attr.function && resolve_fl_var_and_proc (sym, mp_flag) == FAILURE) return FAILURE; -- cgit v1.1