public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [patch, fortran][8/9/10 Regression] PR59107 Fortran : Spurious warning message with -Wsurprising
@ 2020-04-27  7:51 Mark Eggleston
  2020-04-27  8:56 ` Thomas Koenig
  0 siblings, 1 reply; 4+ messages in thread
From: Mark Eggleston @ 2020-04-27  7:51 UTC (permalink / raw)
  To: gcc-patches, fortran

[-- Attachment #1: Type: text/plain, Size: 1633 bytes --]

Please find attached three slightly different patches based on a patch 
for PR59107 originally developed by Janus Weil <janus@gcc.gnu.org> and 
Dominique d'Humieres <dominiq@lps.ens.fr> for gcc-5. The last comment 
regarding the patch was on 2015-03-21 consequently the code has moved on 
somewhat and some additional changes where required resulting in 3 
slightly different patches.

Tested on x86_64 using make check-fortran.

OK to commit?

Change logs for master:

fortran/ChangeLog:

     Janus Weil <janus@gcc.gnu.org> and
     Dominique d'Humieres  <dominiq@lps.ens.fr>
     Mark Eggleston  <markeggleston@gcc.gnu.org>

     PR59107
     * 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.

testsuite/gfortran.dg/ChangeLog:

     Mark Eggleston <markeggleston@gcc.gnu.org>

     PR59107
     * gfortran.dg/pr59107.f90: New test.

The change logs for the back ports for gcc-8 and gcc-9 are included as 
part of the proposed commit messages at the beginning of the patch 
files. The back port dates will be updated when known.

-- 
https://www.codethink.co.uk/privacy.html


[-- Attachment #2: 0001-Fortran-PR59107-master.patch --]
[-- Type: text/x-patch, Size: 4561 bytes --]

From 5a79cef24594bf8ebfe69394efd382a61f55b0f2 Mon Sep 17 00:00:00 2001
From: Mark Eggleston <markeggleston@gcc.gnu.org>
Date: Thu, 23 Apr 2020 10:33:14 +0100
Subject: [PATCH] Fortran : Spurious warning message with -Wsurprising PR59107

This change is from a patch developed by

Janus Weil  <janus@gcc.gnu.org> and
Dominique d'Humieres  <dominiq@lps.ens.fr>

for gcc-5. The code has moved on since then requiring a change to
interface.c

gcc/fortran/ChangeLog:

	* 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.

gcc/testsuite/ChangeLog:

	* gfortran.dg/pr59107.f90: New test.
---
 gcc/fortran/gfortran.h                |  2 +-
 gcc/fortran/interface.c               |  5 +++--
 gcc/fortran/resolve.c                 | 10 ++++++----
 gcc/testsuite/gfortran.dg/pr59107.f90 | 11 +++++++++++
 4 files changed, 21 insertions(+), 7 deletions(-)
 create mode 100644 gcc/testsuite/gfortran.dg/pr59107.f90

diff --git a/gcc/fortran/gfortran.h b/gcc/fortran/gfortran.h
index 4e1da8c88a0..ab9c325a28c 100644
--- a/gcc/fortran/gfortran.h
+++ b/gcc/fortran/gfortran.h
@@ -1621,7 +1621,7 @@ 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;
+  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;
diff --git a/gcc/fortran/interface.c b/gcc/fortran/interface.c
index ba1c8bc322e..f33c6632b45 100644
--- a/gcc/fortran/interface.c
+++ b/gcc/fortran/interface.c
@@ -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.  */
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index fd3b025a84f..88ba88d8bf3 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -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
diff --git a/gcc/testsuite/gfortran.dg/pr59107.f90 b/gcc/testsuite/gfortran.dg/pr59107.f90
new file mode 100644
index 00000000000..a84328f0851
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr59107.f90
@@ -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
+
-- 
2.11.0


[-- Attachment #3: 0001-Fortran-PR59107-gcc9.patch --]
[-- Type: text/x-patch, Size: 4360 bytes --]

From 4430cf9394aca0f08892a2cece9118cda1b778e5 Mon Sep 17 00:00:00 2001
From: Mark Eggleston <markeggleston@gcc.gnu.org>
Date: Thu, 23 Apr 2020 14:27:53 +0100
Subject: [PATCH] Fortran : Spurious warning message with -Wsurprising PR59107

This change is from a patch developed by

Janus Weil  <janus@gcc.gnu.org> and
Dominique d'Humieres  <dominiq@lps.ens.fr>

for gcc-5. The code has moved on since then requiring a change to
interface.c

gcc/fortran/ChangeLog:

	Backport from master
	2020-04-??  Mark Eggleston  <markeggleston@gcc.gnu.org>

	PR59107
	* 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.

gcc/testsuite/ChangeLog:

        Backport from master
	020-04-??  Mark Eggleston  <markeggleston@gcc.gnu.org>

	PR59107
	* gfortran.dg/pr59107.f90: New test.
---
 gcc/fortran/gfortran.h                |  2 +-
 gcc/fortran/interface.c               |  3 ++-
 gcc/fortran/resolve.c                 | 10 ++++++----
 gcc/testsuite/gfortran.dg/pr59107.f90 | 11 +++++++++++
 4 files changed, 20 insertions(+), 6 deletions(-)
 create mode 100644 gcc/testsuite/gfortran.dg/pr59107.f90

diff --git a/gcc/fortran/gfortran.h b/gcc/fortran/gfortran.h
index d7071ae5fcf..f477d29ecd3 100644
--- a/gcc/fortran/gfortran.h
+++ b/gcc/fortran/gfortran.h
@@ -1602,7 +1602,7 @@ 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;
+  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;
diff --git a/gcc/fortran/interface.c b/gcc/fortran/interface.c
index b5701b1a59a..29af409dde0 100644
--- a/gcc/fortran/interface.c
+++ b/gcc/fortran/interface.c
@@ -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.  */
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index a3df534180c..52d29a42e8e 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -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;
@@ -13541,7 +13543,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;
@@ -14791,9 +14793,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
diff --git a/gcc/testsuite/gfortran.dg/pr59107.f90 b/gcc/testsuite/gfortran.dg/pr59107.f90
new file mode 100644
index 00000000000..a84328f0851
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr59107.f90
@@ -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
+
-- 
2.11.0


[-- Attachment #4: 0001-Fortran-PR59107-gcc8.patch --]
[-- Type: text/x-patch, Size: 3935 bytes --]

From 7d38721e418d179420161acf05d9b1a85a53fa7c Mon Sep 17 00:00:00 2001
From: Mark Eggleston <markeggleston@gcc.gnu.org>
Date: Thu, 23 Apr 2020 11:58:31 +0100
Subject: [PATCH] Fortran : Spurious warning message with -Wsurprising PR59107

This change is from a patch developed by

Janus Weil  <janus@gcc.gnu.org> and
Dominique d'Humieres  <dominiq@lps.ens.fr>

for gcc-5. The code has moved on since then requiring a change to
interface.c

gcc/fortran/ChangeLog:

	Backport from master
	2020-04-??  Mark Eggleston  <markeggleston@gcc.gnu.org>

	PR59107
	* 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_symbol): Use new field name and
	check whether it is at least 1, if it is not set the field to 1.

gcc/testsuite/ChangeLog:

        Backport from master
	020-04-??  Mark Eggleston  <markeggleston@gcc.gnu.org>

	PR59107
	* gfortran.dg/pr59107.f90: New test.
---
 gcc/fortran/gfortran.h                |  2 +-
 gcc/fortran/interface.c               |  3 ++-
 gcc/fortran/resolve.c                 |  8 +++++---
 gcc/testsuite/gfortran.dg/pr59107.f90 | 11 +++++++++++
 4 files changed, 19 insertions(+), 5 deletions(-)
 create mode 100644 gcc/testsuite/gfortran.dg/pr59107.f90

diff --git a/gcc/fortran/gfortran.h b/gcc/fortran/gfortran.h
index b2e80a6b0a9..8ef8aea255d 100644
--- a/gcc/fortran/gfortran.h
+++ b/gcc/fortran/gfortran.h
@@ -1587,7 +1587,7 @@ 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;
+  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;
diff --git a/gcc/fortran/interface.c b/gcc/fortran/interface.c
index 04850b0406c..689c30210d7 100644
--- a/gcc/fortran/interface.c
+++ b/gcc/fortran/interface.c
@@ -4940,7 +4940,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.  */
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index 69d877ed55b..d34d3dc66fd 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -1746,9 +1746,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;
@@ -14601,9 +14603,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
diff --git a/gcc/testsuite/gfortran.dg/pr59107.f90 b/gcc/testsuite/gfortran.dg/pr59107.f90
new file mode 100644
index 00000000000..a84328f0851
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr59107.f90
@@ -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
+
-- 
2.11.0


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [patch, fortran][8/9/10 Regression] PR59107 Fortran : Spurious warning message with -Wsurprising
  2020-04-27  7:51 [patch, fortran][8/9/10 Regression] PR59107 Fortran : Spurious warning message with -Wsurprising Mark Eggleston
@ 2020-04-27  8:56 ` Thomas Koenig
  2020-04-27  9:50   ` Mark Eggleston
  0 siblings, 1 reply; 4+ messages in thread
From: Thomas Koenig @ 2020-04-27  8:56 UTC (permalink / raw)
  To: Mark Eggleston, gcc-patches, fortran

Am 27.04.20 um 09:51 schrieb Mark Eggleston:
> Please find attached three slightly different patches based on a patch 
> for PR59107 originally developed by Janus Weil <janus@gcc.gnu.org> and 
> Dominique d'Humieres <dominiq@lps.ens.fr> for gcc-5. The last comment 
> regarding the patch was on 2015-03-21 consequently the code has moved on 
> somewhat and some additional changes where required resulting in 3 
> slightly different patches.
> 
> Tested on x86_64 using make check-fortran.
> 
> OK to commit?

Hi Mark,

OK. I just have one request: Could you specify (in a comment in the
header) what the different values mean?

Regards

	Thomas

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [patch, fortran][8/9/10 Regression] PR59107 Fortran : Spurious warning message with -Wsurprising
  2020-04-27  8:56 ` Thomas Koenig
@ 2020-04-27  9:50   ` Mark Eggleston
  2020-05-01 14:45     ` Thomas Koenig
  0 siblings, 1 reply; 4+ messages in thread
From: Mark Eggleston @ 2020-04-27  9:50 UTC (permalink / raw)
  To: Thomas Koenig, gcc-patches, fortran


On 27/04/2020 09:56, Thomas Koenig wrote:
> Am 27.04.20 um 09:51 schrieb Mark Eggleston:
>> Please find attached three slightly different patches based on a 
>> patch for PR59107 originally developed by Janus Weil 
>> <janus@gcc.gnu.org> and Dominique d'Humieres <dominiq@lps.ens.fr> for 
>> gcc-5. The last comment regarding the patch was on 2015-03-21 
>> consequently the code has moved on somewhat and some additional 
>> changes where required resulting in 3 slightly different patches.
>>
>> Tested on x86_64 using make check-fortran.
>>
>> OK to commit?
>
> Hi Mark,
>
> OK. I just have one request: Could you specify (in a comment in the
> header) what the different values mean?
Unfortunately I don't know, they were used by Dominique d'Humieres 
<dominiq@lps.ens.fr>.
>
> Regards
>
>     Thomas
>
-- 
https://www.codethink.co.uk/privacy.html


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [patch, fortran][8/9/10 Regression] PR59107 Fortran : Spurious warning message with -Wsurprising
  2020-04-27  9:50   ` Mark Eggleston
@ 2020-05-01 14:45     ` Thomas Koenig
  0 siblings, 0 replies; 4+ messages in thread
From: Thomas Koenig @ 2020-05-01 14:45 UTC (permalink / raw)
  To: Mark Eggleston, gcc-patches, fortran

Am 27.04.20 um 11:50 schrieb Mark Eggleston:
> 
> On 27/04/2020 09:56, Thomas Koenig wrote:
>> Am 27.04.20 um 09:51 schrieb Mark Eggleston:
>>> Please find attached three slightly different patches based on a 
>>> patch for PR59107 originally developed by Janus Weil 
>>> <janus@gcc.gnu.org> and Dominique d'Humieres <dominiq@lps.ens.fr> for 
>>> gcc-5. The last comment regarding the patch was on 2015-03-21 
>>> consequently the code has moved on somewhat and some additional 
>>> changes where required resulting in 3 slightly different patches.
>>>
>>> Tested on x86_64 using make check-fortran.
>>>
>>> OK to commit?
>>
>> Hi Mark,
>>
>> OK. I just have one request: Could you specify (in a comment in the
>> header) what the different values mean?
> Unfortunately I don't know, they were used by Dominique d'Humieres 
> <dominiq@lps.ens.fr>.

OK, I've looked at this, and a comment could be something like

/* = 2 if this has already been resolved as an intrinsic,
        in gfc_resolve_intrinsic,
    = 1 if it has been resolved in resolve_symbol.  */

OK for trunk with that addition; also OK for the other branches once
gcc-10 is open again for regression fixes.

Thanks for taking up the patch!  There really are quite a few patches
lurking in the corners of the bugzilla system, and there is value
in getting them applied.

Regards

	Thomas

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2020-05-01 14:45 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-04-27  7:51 [patch, fortran][8/9/10 Regression] PR59107 Fortran : Spurious warning message with -Wsurprising Mark Eggleston
2020-04-27  8:56 ` Thomas Koenig
2020-04-27  9:50   ` Mark Eggleston
2020-05-01 14:45     ` Thomas Koenig

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).