diff mbox series

Fortran: downgrade use associated namelist group name to, legacy extension

Message ID c4eedf1f-22d9-41b4-839d-276c15044336@gmx.de
State New
Headers show
Series Fortran: downgrade use associated namelist group name to, legacy extension | expand

Commit Message

Harald Anlauf Aug. 30, 2024, 7:25 p.m. UTC
Hi Steve, all,

the attached patch downgrades this feature from a GNU extension (silent
per default) to a legacy extension (warning by default).

The feature is tested in at least 4 gfortran testcases.  I adjusted
the pattern of one of these tests to check for the downgrade.

Regtested on x86_64-pc-linux-gnu.  OK for mainline?

Thanks,
Harald

On 8/30/24 18:33, Steve Kargl wrote:
> On Thu, Aug 29, 2024 at 10:05:35PM +0200, Harald Anlauf wrote:
>>
>> Am 29.08.24 um 21:53 schrieb Steve Kargl:
>>> Thanks for the patch.  If you have not already opened a new PR for the
>>> other issue with C8107, I'll open one later today.  It's likely that
>>> we need to check the namelist-group-name for USE association in
>>> match.cc:gfc_match_namelist.
>>>
>>> Hmmm, it seems we already catch the error, but accept it as an
>>> extension.
>>>
>>> % gfcx -o z -std=f2023 a.f90 && ./z
>>> a.f90:11:23:
>>>
>>>      11 |    namelist /nam_nml1/j
>>>         |                       1
>>> Error: GNU Extension: Namelist group name 'nam_nml1' at (1) already
>>> is USE associated and cannot be respecified.
>>
>> ah, I overlooked this.
>>
>>>
>>> In hindsight, I wish GNU extensions had warnings associated with them.
>>>
>>
>> Should we downgrade this extension to GFC_STD_LEGACY?
> 
> I would support such a downgrade.  In fact, I would
> support making -std=f2023 the default, but that might
> be pushing my luck.
> 
>> Not sure when it was implemented or where it was used.
> 
> 'git blame' shows the code was last touch in 2011.
> I suspect that it is much older.
>

Comments

Steve Kargl Aug. 30, 2024, 7:36 p.m. UTC | #1
Harald,

I'm fine with the patch.  You may want to wait to see
if anyone has a rasonable objection.
Harald Anlauf Aug. 31, 2024, 2:27 p.m. UTC | #2
On 8/30/24 21:36, Steve Kargl wrote:
> Harald,
> 
> I'm fine with the patch.  You may want to wait to see
> if anyone has a rasonable objection.
> 

Since you and Thomas agreed, pushed as r15-3332-g79b5b50402454d .

Thanks,
Harald
diff mbox series

Patch

From 083b1f73c61eb008b37067241ec85d4c6f419f5e Mon Sep 17 00:00:00 2001
From: Harald Anlauf <anlauf@gmx.de>
Date: Fri, 30 Aug 2024 21:15:43 +0200
Subject: [PATCH] Fortran: downgrade use associated namelist group name to
 legacy extension

The Fortran standard disallows use associated names as namelist group name
(e.g. F2003:C581, but also later standards).  This feature is a gfortran
legacy extension, and we should give a warning even for -std=gnu.

gcc/fortran/ChangeLog:

	* match.cc (gfc_match_namelist): Downgrade feature from GNU to
	legacy extension.

gcc/testsuite/ChangeLog:

	* gfortran.dg/pr88169_3.f90: Adjust pattern.
---
 gcc/fortran/match.cc                    | 4 +++-
 gcc/testsuite/gfortran.dg/pr88169_3.f90 | 3 +--
 2 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/gcc/fortran/match.cc b/gcc/fortran/match.cc
index d30a98f48fa..53c54c1c489 100644
--- a/gcc/fortran/match.cc
+++ b/gcc/fortran/match.cc
@@ -5603,9 +5603,11 @@  gfc_match_namelist (void)
 	  return MATCH_ERROR;
 	}
 
+      /* A use associated name shall not be used as a namelist group name
+	 (e.g. F2003:C581).  It is only supported as a legacy extension.  */
       if (group_name->attr.flavor == FL_NAMELIST
 	  && group_name->attr.use_assoc
-	  && !gfc_notify_std (GFC_STD_GNU, "Namelist group name %qs "
+	  && !gfc_notify_std (GFC_STD_LEGACY, "Namelist group name %qs "
 			      "at %C already is USE associated and can"
 			      "not be respecified.", group_name->name))
 	return MATCH_ERROR;
diff --git a/gcc/testsuite/gfortran.dg/pr88169_3.f90 b/gcc/testsuite/gfortran.dg/pr88169_3.f90
index 6bc24ed6b71..49ef430e664 100644
--- a/gcc/testsuite/gfortran.dg/pr88169_3.f90
+++ b/gcc/testsuite/gfortran.dg/pr88169_3.f90
@@ -10,6 +10,5 @@  program main
    use foo_nml, only: bar => foo, x
    implicit none
    real a
-   namelist /bar/a  ! { dg-error "already is USE associated" }
+   namelist /bar/a  ! { dg-error "Legacy Extension: .* already is USE associated" }
 end program
-! { dg-final { cleanup-modules "foo_nml" } }
-- 
2.35.3