Bug 45776 - Full implementation of variable definition contexts (and related checks)
Summary: Full implementation of variable definition contexts (and related checks)
Status: ASSIGNED
Alias: None
Product: gcc
Classification: Unclassified
Component: fortran (show other bugs)
Version: unknown
: P3 normal
Target Milestone: ---
Assignee: Daniel Kraft
URL:
Keywords: accepts-invalid
Depends on: 18918
Blocks:
  Show dependency treegraph
 
Reported: 2010-09-24 08:06 UTC by Daniel Kraft
Modified: 2019-01-18 00:39 UTC (History)
2 users (show)

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed: 2010-09-24 08:06:49


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Daniel Kraft 2010-09-24 08:06:04 UTC
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.
Comment 1 Daniel Kraft 2010-09-24 08:06:49 UTC
Taking this.
Comment 2 Daniel Kraft 2010-09-25 14:27:27 UTC
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
Comment 3 Daniel Kraft 2010-09-25 14:30:58 UTC
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.
Comment 4 Dominique d'Humieres 2019-01-18 00:39:37 UTC
> 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.