Bug 20863 - [4.2 only] Pointer problems in PURE procedures
Summary: [4.2 only] Pointer problems in PURE procedures
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: fortran (show other bugs)
Version: 4.1.0
: P2 normal
Target Milestone: ---
Assignee: Paul Thomas
URL:
Keywords: accepts-invalid, rejects-valid
Depends on:
Blocks:
 
Reported: 2005-04-08 15:56 UTC by Joost VandeVondele
Modified: 2007-06-19 16:30 UTC (History)
3 users (show)

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed: 2007-06-16 11:07:46


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Joost VandeVondele 2005-04-08 15:56:34 UTC
The following is non-standard and the compiler should probably generate a
warning/error with '-pedantic -std=f95'


MODULE TT
 TYPE node_type
  TYPE(node_type), POINTER :: next=>null()
 END TYPE
CONTAINS
PURE FUNCTION give_next(node)
     TYPE(node_type), POINTER :: node
     TYPE(node_type), POINTER :: give_next
     give_next => node%next ! not in pure functions
END FUNCTION
END MODULE
Comment 1 Tobias Schlüter 2005-04-22 14:41:50 UTC
No. 7 in the lower part of p. 212 of the draft f95 standard.
Comment 2 Brooks Moses 2006-10-12 00:07:19 UTC
On a similar note, the following is legal code for which an error is incorrectly reported:

>> $ cat pr20863a.f90
>> PURE FUNCTION give_next(i)
>>      TYPE node_type
>>        sequence
>>        TYPE(node_type), POINTER :: next
>>      END TYPE
>>      TYPE(node_type), POINTER :: node
>>      TYPE(node_type), target  :: t
>>      integer, intent(in)      :: i
>>      node%next = t
>> END FUNCTION
>> 
>> THOMASP@PC-THOMAS-P /cygdrive/d/svn/prs
>> $ /irun/bin/gfortran -c pr20863a.f90
>>  In file pr20863a.f90:9
>> 
>>      node%next = t
>>                 1
>> Error: Right side of assignment at (1) is a derived type containing a
>> POINTER in a PURE procedure

See discussion here for details:
http://gcc.gnu.org/ml/fortran/2006-10/msg00340.html
Comment 3 Paul Thomas 2007-06-16 11:07:46 UTC
This has been on the books too long - I was hoping that this would be dealt with as a tyro job:)

.....and, yes, a fix is on the way!

Paul
Comment 4 patchapp@dberlin.org 2007-06-16 16:10:30 UTC
Subject: Bug number PR20863

A patch for this bug has been added to the patch tracker.
The mailing list url for the patch is http://gcc.gnu.org/ml/gcc-patches/2007-06/msg01127.html
Comment 5 Paul Thomas 2007-06-18 23:04:44 UTC
Subject: Bug 20863

Author: pault
Date: Mon Jun 18 23:04:28 2007
New Revision: 125831

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=125831
Log:
2007-06-19  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/20863
	PR fortran/20082
	* resolve.c (resolve_code): Use gfc_impure_variable as a
	condition for rejecting derived types with pointers, in pure
	procedures.
	(gfc_impure_variable): Add test for dummy arguments of pure
	procedures; any for functions and INTENT_IN for subroutines.

	PR fortran/32236
	* data.c (gfc_assign_data_value): Change the ICE on an array
	reference initializer not being an array into an error and
	clear init to prevent a repetition of the error.

2007-06-19  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/20863
	PR fortran/20082
	* gfortran.dg/impure_assignment_2.f90 : New test.

	PR fortran/32236
	* gfortran.dg/data_initialized_2.f90 : New test.

	* gfortran.dg/equiv_7.f90 : Test for endianess and call the
	appropriate version of 'dmach'.

Added:
    trunk/gcc/testsuite/gfortran.dg/data_initialized_2.f90
    trunk/gcc/testsuite/gfortran.dg/impure_assignment_2.f90
Modified:
    trunk/gcc/fortran/ChangeLog
    trunk/gcc/fortran/data.c
    trunk/gcc/fortran/resolve.c
    trunk/gcc/testsuite/ChangeLog
    trunk/gcc/testsuite/gfortran.dg/equiv_7.f90

Comment 6 Paul Thomas 2007-06-18 23:08:54 UTC
Fixed on trunk

Paul
Comment 7 Paul Thomas 2007-06-19 16:30:40 UTC
Tobias points out to me that this is not a regression - closed and out.

Paul