Fortran : Spurious warning message with -Wsurprising PR59107
This change is from a patch developed for gcc-5. The code has moved on since then requiring a change to interface.c 2020-05-11 Janus Weil <janus@gcc.gnu.org> Dominique d'Humieres <dominiq@lps.ens.fr> gcc/fortran/ PR fortran/59107 * gfortran.h: Rename field resolved as resolve_symbol_called and assign two 2 bits instead of 1. * interface.c (check_dtio_interface1): Use new field name. (gfc_find_typebound_dtio_proc): Use new field name. * resolve.c (gfc_resolve_intrinsic): Replace check of the formal field with resolve_symbol_called is at least 2, if it is not set the field to 2. (resolve_typebound_procedure): Use new field name. (resolve_symbol): Use new field name and check whether it is at least 1, if it is not set the field to 1. 2020-05-11 Mark Eggleston <markeggleston@gcc.gnu.org> gcc/testsuite/ PR fortran/59107 * gfortran.dg/pr59107.f90: New test.
This commit is contained in:
parent
850322dff7
commit
dbeaa7ab81
|
@ -1,3 +1,17 @@
|
|||
2020-05-11 Janus Weil <janus@gcc.gnu.org>
|
||||
Dominique d'Humieres <dominiq@lps.ens.fr>
|
||||
|
||||
PR fortran/59107
|
||||
* gfortran.h: Rename field resolved as resolve_symbol_called
|
||||
and assign two 2 bits instead of 1.
|
||||
* interface.c (check_dtio_interface1): Use new field name.
|
||||
(gfc_find_typebound_dtio_proc): Use new field name.
|
||||
* resolve.c (gfc_resolve_intrinsic): Replace check of the formal
|
||||
field with resolve_symbol_called is at least 2, if it is not
|
||||
set the field to 2. (resolve_typebound_procedure): Use new field
|
||||
name. (resolve_symbol): Use new field name and check whether it
|
||||
is at least 1, if it is not set the field to 1.
|
||||
|
||||
2020-05-10 Harald Anlauf <anlauf@gmx.de>
|
||||
|
||||
PR fortran/93499
|
||||
|
|
|
@ -1621,7 +1621,10 @@ typedef struct gfc_symbol
|
|||
/* Set if the symbol is used in a function result specification . */
|
||||
unsigned fn_result_spec:1;
|
||||
/* Used to avoid multiple resolutions of a single symbol. */
|
||||
unsigned resolved:1;
|
||||
/* = 2 if this has already been resolved as an intrinsic,
|
||||
in gfc_resolve_intrinsic,
|
||||
= 1 if it has been resolved in resolve_symbol. */
|
||||
unsigned resolve_symbol_called:2;
|
||||
/* Set if this is a module function or subroutine with the
|
||||
abreviated declaration in a submodule. */
|
||||
unsigned abr_modproc_decl:1;
|
||||
|
|
|
@ -5015,7 +5015,7 @@ check_dtio_interface1 (gfc_symbol *derived, gfc_symtree *tb_io_st,
|
|||
gfc_error ("DTIO procedure %qs at %L must be a subroutine",
|
||||
dtio_sub->name, &dtio_sub->declared_at);
|
||||
|
||||
if (!dtio_sub->resolved)
|
||||
if (!dtio_sub->resolve_symbol_called)
|
||||
gfc_resolve_formal_arglist (dtio_sub);
|
||||
|
||||
arg_num = 0;
|
||||
|
@ -5149,7 +5149,8 @@ gfc_find_typebound_dtio_proc (gfc_symbol *derived, bool write, bool formatted)
|
|||
gfc_symtree *tb_io_st = NULL;
|
||||
bool t = false;
|
||||
|
||||
if (!derived || !derived->resolved || derived->attr.flavor != FL_DERIVED)
|
||||
if (!derived || !derived->resolve_symbol_called
|
||||
|| derived->attr.flavor != FL_DERIVED)
|
||||
return NULL;
|
||||
|
||||
/* Try to find a typebound DTIO binding. */
|
||||
|
|
|
@ -1753,9 +1753,11 @@ gfc_resolve_intrinsic (gfc_symbol *sym, locus *loc)
|
|||
gfc_intrinsic_sym* isym = NULL;
|
||||
const char* symstd;
|
||||
|
||||
if (sym->formal)
|
||||
if (sym->resolve_symbol_called >= 2)
|
||||
return true;
|
||||
|
||||
sym->resolve_symbol_called = 2;
|
||||
|
||||
/* Already resolved. */
|
||||
if (sym->from_intmod && sym->ts.type != BT_UNKNOWN)
|
||||
return true;
|
||||
|
@ -13909,7 +13911,7 @@ resolve_typebound_procedure (gfc_symtree* stree)
|
|||
{
|
||||
/* If proc has not been resolved at this point, proc->name may
|
||||
actually be a USE associated entity. See PR fortran/89647. */
|
||||
if (!proc->resolved
|
||||
if (!proc->resolve_symbol_called
|
||||
&& proc->attr.function == 0 && proc->attr.subroutine == 0)
|
||||
{
|
||||
gfc_symbol *tmp;
|
||||
|
@ -15154,9 +15156,9 @@ resolve_symbol (gfc_symbol *sym)
|
|||
gfc_array_spec *as;
|
||||
bool saved_specification_expr;
|
||||
|
||||
if (sym->resolved)
|
||||
if (sym->resolve_symbol_called >= 1)
|
||||
return;
|
||||
sym->resolved = 1;
|
||||
sym->resolve_symbol_called = 1;
|
||||
|
||||
/* No symbol will ever have union type; only components can be unions.
|
||||
Union type declaration symbols have type BT_UNKNOWN but flavor FL_UNION
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2020-05-11 Mark Eggleston <markeggleston@gcc.gnu.org>
|
||||
|
||||
PR fortran/59107
|
||||
* gfortran.dg/pr59107.f90: New test.
|
||||
|
||||
2020-05-11 Xiong Hu Luo <luoxhu@linux.ibm.com>
|
||||
|
||||
PR tree-optimization/83403
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
! { dg-compile }
|
||||
! { dg-options "-Wsurprising" }
|
||||
|
||||
! There should be no surprising warnings
|
||||
|
||||
program p
|
||||
Integer :: nargs
|
||||
intrinsic :: command_argument_count
|
||||
nargs = command_argument_count()
|
||||
end
|
||||
|
Loading…
Reference in New Issue