From: Janus Weil Date: Wed, 21 Nov 2012 22:19:51 +0000 (+0100) Subject: re PR fortran/55352 (Erroneous gfortran warning of unused module variable when variab... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=ecdbf2cdfa8aededf4b1027998af325b0e2ff70c;p=gcc.git re PR fortran/55352 (Erroneous gfortran warning of unused module variable when variable is only used in namelist) 2012-11-21 Janus Weil PR fortran/55352 * trans-decl.c (generate_local_decl): Don't warn for explicitly imported but unused module variables which are in a namelist or common block. 2012-11-21 Janus Weil PR fortran/55352 * gfortran.dg/namelist_76.f90: New. From-SVN: r193711 --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index d53bf1ae6cd..3b5b27c020e 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2012-11-21 Janus Weil + + PR fortran/55352 + * trans-decl.c (generate_local_decl): Don't warn for explicitly imported + but unused module variables which are in a namelist or common block. + 2012-11-20 Diego Novillo Jakub Jelinek diff --git a/gcc/fortran/trans-decl.c b/gcc/fortran/trans-decl.c index c661fb358ac..6827298b86e 100644 --- a/gcc/fortran/trans-decl.c +++ b/gcc/fortran/trans-decl.c @@ -4589,22 +4589,25 @@ generate_local_decl (gfc_symbol * sym) } /* Warn for unused variables, but not if they're inside a common - block, a namelist, or are use-associated. */ + block or a namelist. */ else if (warn_unused_variable - && !(sym->attr.in_common || sym->attr.use_assoc || sym->mark - || sym->attr.in_namelist)) + && !(sym->attr.in_common || sym->mark || sym->attr.in_namelist)) { - gfc_warning ("Unused variable '%s' declared at %L", sym->name, - &sym->declared_at); - if (sym->backend_decl != NULL_TREE) - TREE_NO_WARNING(sym->backend_decl) = 1; - } - else if (warn_unused_variable && sym->attr.use_only) - { - gfc_warning ("Unused module variable '%s' which has been explicitly " - "imported at %L", sym->name, &sym->declared_at); - if (sym->backend_decl != NULL_TREE) - TREE_NO_WARNING(sym->backend_decl) = 1; + if (sym->attr.use_only) + { + gfc_warning ("Unused module variable '%s' which has been " + "explicitly imported at %L", sym->name, + &sym->declared_at); + if (sym->backend_decl != NULL_TREE) + TREE_NO_WARNING(sym->backend_decl) = 1; + } + else if (!sym->attr.use_assoc) + { + gfc_warning ("Unused variable '%s' declared at %L", + sym->name, &sym->declared_at); + if (sym->backend_decl != NULL_TREE) + TREE_NO_WARNING(sym->backend_decl) = 1; + } } /* For variable length CHARACTER parameters, the PARM_DECL already diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 3a12c817764..cb52cdc5afe 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2012-11-21 Janus Weil + + PR fortran/55352 + * gfortran.dg/namelist_76.f90: New. + 2012-11-21 Martin Jambor * gcc.dg/ipa/ipcp-agg-7.c: New test. diff --git a/gcc/testsuite/gfortran.dg/namelist_76.f90 b/gcc/testsuite/gfortran.dg/namelist_76.f90 new file mode 100644 index 00000000000..acb3b2f6561 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/namelist_76.f90 @@ -0,0 +1,28 @@ +! { dg-do compile } +! +! PR 55352: [4.7/4.8 Regression] Erroneous gfortran warning of unused module variable when variable is only used in namelist +! +! Contributed by + +module data + implicit none + integer :: a +end module data + +program test + use data, only: a + implicit none + a = 1 + call write_data() +end program test + +subroutine write_data() + use data, only: a + implicit none + namelist /write_data_list/ a + open(unit=10,form='formatted',status='replace',action='write',file='test.dat') + write(10, nml=write_data_list) + close(10) +end subroutine write_data + +! { dg-final { cleanup-modules "data" } }