diff options
author | Harald Anlauf <anlauf@gmx.de> | 2024-08-29 21:21:39 +0200 |
---|---|---|
committer | Harald Anlauf <anlauf@gmx.de> | 2024-08-29 21:21:39 +0200 |
commit | 6bfeba12c86b4d0dae27d99b484f64774dd49398 (patch) | |
tree | 1a4100a5240e63a509cd0822081504d6a2abea0b /gcc | |
parent | 81c47986e1d8efa70a4bd28e8dfc62bfca8e8362 (diff) | |
download | gcc-6bfeba12c86b4d0dae27d99b484f64774dd49398.zip gcc-6bfeba12c86b4d0dae27d99b484f64774dd49398.tar.gz gcc-6bfeba12c86b4d0dae27d99b484f64774dd49398.tar.bz2 |
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.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/fortran/trans-io.cc | 3 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/use_rename_12.f90 | 27 |
2 files changed, 29 insertions, 1 deletions
diff --git a/gcc/fortran/trans-io.cc b/gcc/fortran/trans-io.cc index 7ab82fa..c0baa71 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 0000000..0447d5f --- /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 |