[gcc r16-6567] Fortran: Fix namelist with use association and renaming
Jerry DeLisle
jvdelisle@gcc.gnu.org
Thu Jan 8 01:16:14 GMT 2026
https://gcc.gnu.org/g:fd8686b35bee8d260a3557082abedac33a98d48a
commit r16-6567-gfd8686b35bee8d260a3557082abedac33a98d48a
Author: Steve Kargl <kargl@gcc.gnu.org>
Date: Wed Jan 7 15:14:23 2026 -0800
Fortran: Fix namelist with use association and renaming
PR fortran/123012
gcc/fortran/ChangeLog:
* trans-io.cc (transfer_namelist_element): Adjust the
conditions determining when to use the local name or
the var name to build the object name.
gcc/testsuite/ChangeLog:
* gfortran.dg/namelist_99.f90: New test.
Diff:
---
gcc/fortran/trans-io.cc | 6 ++--
gcc/testsuite/gfortran.dg/namelist_99.f90 | 46 +++++++++++++++++++++++++++++++
2 files changed, 50 insertions(+), 2 deletions(-)
diff --git a/gcc/fortran/trans-io.cc b/gcc/fortran/trans-io.cc
index 2ed256ef30bf..2d799b129725 100644
--- a/gcc/fortran/trans-io.cc
+++ b/gcc/fortran/trans-io.cc
@@ -1698,8 +1698,10 @@ transfer_namelist_element (stmtblock_t * block, const char * var_name,
gcc_assert (sym || c);
/* Build the namelist object name. */
- if (sym && !sym->attr.use_only && sym->attr.use_rename
- && sym->ns->use_stmts->rename)
+ if (sym && sym->attr.use_rename && sym->ns->use_stmts->rename
+ && sym->ns->use_stmts->rename->local_name
+ && sym->ns->use_stmts->rename->local_name[0]
+ && strcmp(sym->ns->use_stmts->rename->use_name, var_name) == 0)
string = gfc_build_cstring_const (sym->ns->use_stmts->rename->local_name);
else
string = gfc_build_cstring_const (var_name);
diff --git a/gcc/testsuite/gfortran.dg/namelist_99.f90 b/gcc/testsuite/gfortran.dg/namelist_99.f90
new file mode 100644
index 000000000000..9be12732a8aa
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/namelist_99.f90
@@ -0,0 +1,46 @@
+! { dg-do run }
+module m
+ implicit none
+ private
+ public tol, z
+ integer :: tol = 42
+ integer :: z = 42
+end module m
+
+subroutine no_only_clause
+ use m
+ implicit none
+ character(len=20) :: str = "&v z=1 tol=1/"
+ namelist /v/ tol, z
+ read(str, nml=v)
+ if (z /= 1) stop 3
+ if (tol /= 1) stop 4
+end subroutine no_only_clause
+
+subroutine only_clause_without_renaming
+ use m, only : tol, z
+ implicit none
+ character(len=20) :: str = "&v z=1 tol=1/"
+ namelist /v/ z, tol
+ read(str, nml=v)
+ if (z /= 1) stop 3
+ if (tol /= 1) stop 4
+end subroutine only_clause_without_renaming
+
+subroutine only_clause_with_renaming
+ use m, only: y => tol, z
+ implicit none
+ character(len=20) :: str = "&v z=1 y=1/"
+ real :: tol = 0
+ namelist /v/ y, z
+ read(str, nml=v)
+ if (z /= 1) stop 3
+ if (y /= 1) stop 4
+ if (tol /= 0) stop 5
+end subroutine only_clause_with_renaming
+
+program p
+ call no_only_clause
+ call only_clause_without_renaming
+ call only_clause_with_renaming
+end program p
More information about the Gcc-cvs
mailing list