Since http://gcc.gnu.org/ml/fortran/2010-09/msg00397.html, there is a new routine to check definability of variables and pointers in one place (expr.c:gfc_check_vardef_context). This should be called from all places mentioned in the standard as variable definition context (F2008, 16.6.7) and pointer association context (F2008, 16.6.8). The pointer association contexts should already be implemented, but not all variable definition contexts. Missing are the IO related ones (items 5-10 of the list in 16.6.7) and the ones related to co-array locks (items 14 and 15). These should also be implemented. For instance, the following invalid program is accepted: module m implicit none integer, protected :: a character(len=128), protected :: str end module m program main use :: m integer, parameter :: b = 42 character(len=128) :: myStr myStr = '5' read(myStr, *) a read(myStr, *) b write(str, *) 5 end program main Note that the last line (write to internal PROTECTED variable) was also accepted before the definability check rework.
Taking this.
Author: domob Date: Sat Sep 25 14:27:20 2010 New Revision: 164619 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=164619 Log: 2010-09-25 Daniel Kraft <d@domob.eu> PR fortran/45776 * gfortran.h (struct gfc_dt): New member `dt_io_kind'. * io.c (resolve_tag): F2008 check for NEWUNIT and variable definition checks for NEWUNIT, IOSTAT, SIZE and IOMSG. (gfc_free_dt): Correctly handle freeing of `dt_io_kind' and `extra_comma' with changed semantics. (gfc_resolve_dt): Check variable definitions. (match_io_element): Remove INTENT and PURE checks here and initialize code->ext.dt member. (match_io): Set dt->dt_io_kind. (gfc_resolve_inquire): Check variable definition for all tags except UNIT, FILE and ID. * resolve.c (resolve_transfer): Variable definition check. 2010-09-25 Daniel Kraft <d@domob.eu> PR fortran/45776 * gfortran.dg/io_constraints_6.f03: New test. * gfortran.dg/io_constraints_7.f03: New test. * gfortran.dg/newunit_2.f90: New test. Added: trunk/gcc/testsuite/gfortran.dg/io_constraints_6.f03 trunk/gcc/testsuite/gfortran.dg/io_constraints_7.f03 trunk/gcc/testsuite/gfortran.dg/newunit_2.f90 Modified: trunk/gcc/fortran/ChangeLog trunk/gcc/fortran/gfortran.h trunk/gcc/fortran/io.c trunk/gcc/fortran/resolve.c trunk/gcc/testsuite/ChangeLog
This implemented all IO related checks (items 5-10), so only missing are now 14 and 15 which are the LOCK/UNLOCK related ones. These depend on implementation of locks in PR 18918, so I'm waiting for that now.
> This implemented all IO related checks (items 5-10), so only missing > are now 14 and 15 which are the LOCK/UNLOCK related ones. These depend > on implementation of locks in PR 18918, so I'm waiting for that now. I think this PR should be closed as FIXED.