]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Fortran : Spurious warning message with -Wsurprising PR59107
authorMark Eggleston <markeggleston@gcc.gnu.org>
Mon, 11 May 2020 11:38:14 +0000 (12:38 +0100)
committerMark Eggleston <markeggleston@gcc.gnu.org>
Mon, 11 May 2020 11:38:14 +0000 (12:38 +0100)
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  Mark Eggleston  <markeggleston@gcc.gnu.org>

Backported from mainline
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 (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.

Backported from mainline
2020-05-11  Mark Eggleston  <markeggleston@gcc.gnu.org>

gcc/testsuite/

PR fortran/59107
* gfortran.dg/pr59107.f90: New test.

gcc/fortran/ChangeLog
gcc/fortran/gfortran.h
gcc/fortran/interface.c
gcc/fortran/resolve.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/pr59107.f90 [new file with mode: 0644]

index 21f8b1afa79b6251d747c5c0b2211411347aae40..2255be74128e898beee702a7d3789f7931b7320e 100644 (file)
@@ -1,3 +1,19 @@
+2020-05-11  Mark Eggleston  <markeggleston@gcc.gnu.org>
+
+       Backported from mainline
+       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 (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-04  Tobias Burnus  <tobias@codesourcery.com>
 
        Backport from mainline.
index d7071ae5fcf51e79344e384ad9865ad61bc55339..a3320d890cd467d1371f31de6108e92fed2df63f 100644 (file)
@@ -1602,7 +1602,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;
index b5701b1a59a1f7074ab7e2843550eed734813903..29af409dde00974cccaf2abd413a53583ee89e10 100644 (file)
@@ -4979,7 +4979,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.  */
index c041d8df96d476d3f200c7c84df439bab5ddf145..0e594ffadb0bcf78d37e97ec1f1b1fa180d46755 100644 (file)
@@ -1754,9 +1754,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;
@@ -13570,7 +13572,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;
@@ -14820,9 +14822,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
index 02b5dbc6ea80842a7d28e345f27b7ba5141d2c9d..a3dc4a9748aea05161bfd90ff6f9d87354bf59ec 100644 (file)
@@ -1,3 +1,11 @@
+2020-05-11  Mark Eggleston  <markeggleston@gcc.gnu.org>
+    
+       Backported from mainline
+       2020-05-11  Mark Eggleston  <markeggleston@gcc.gnu.org>
+
+       PR fortran/59107
+       * gfortran.dg/pr59107.f90: New test.
+
 2020-05-07  Jakub Jelinek  <jakub@redhat.com>
 
        PR c++/94946
diff --git a/gcc/testsuite/gfortran.dg/pr59107.f90 b/gcc/testsuite/gfortran.dg/pr59107.f90
new file mode 100644 (file)
index 0000000..a84328f
--- /dev/null
@@ -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
+