https://gcc.gnu.org/g:5999dd8a610acbaff9dfb6bdeb67f33380336132
commit r14-10621-g5999dd8a610acbaff9dfb6bdeb67f33380336132 Author: Harald Anlauf <anl...@gmx.de> Date: Thu Aug 29 21:21:39 2024 +0200 Fortran: fix ICE with use with rename of namelist member [PR116530] gcc/fortran/ChangeLog: PR fortran/116530 * trans-io.cc (transfer_namelist_element): Prevent NULL pointer dereference. gcc/testsuite/ChangeLog: PR fortran/116530 * gfortran.dg/use_rename_12.f90: New test. (cherry picked from commit 6bfeba12c86b4d0dae27d99b484f64774dd49398) Diff: --- gcc/fortran/trans-io.cc | 3 ++- gcc/testsuite/gfortran.dg/use_rename_12.f90 | 27 +++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/gcc/fortran/trans-io.cc b/gcc/fortran/trans-io.cc index ee2cc560cdfa..0c5a1714be6f 100644 --- a/gcc/fortran/trans-io.cc +++ b/gcc/fortran/trans-io.cc @@ -1692,7 +1692,8 @@ 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) + if (sym && !sym->attr.use_only && sym->attr.use_rename + && sym->ns->use_stmts->rename) 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/use_rename_12.f90 b/gcc/testsuite/gfortran.dg/use_rename_12.f90 new file mode 100644 index 000000000000..0447d5fe1504 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/use_rename_12.f90 @@ -0,0 +1,27 @@ +! { dg-do compile } +! PR fortran/116530 - ICE with member of namelist renamed by use module +! +! Reported by philippe.wautelet at cnrs.fr + +module mod_nml1 + implicit none + logical :: ldiag + namelist /nam_nml1/ldiag +end module mod_nml1 + +module mod_interm + use mod_nml1 +end module mod_interm + +program ice_nml + use mod_nml1, ldiag_nml1 => ldiag + use mod_nml1, only : ldiag_only => ldiag + use mod_interm + implicit none + integer :: ilu = 10 + read(unit=ilu,nml=nam_nml1) + write(unit=*,nml=nam_nml1) + print *, ldiag + print *, ldiag_nml1 + print *, ldiag_only +end program ice_nml