Bug 20856 - function result may not be saved
Summary: function result may not be saved
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: fortran (show other bugs)
Version: 4.1.0
: P2 normal
Target Milestone: 4.0.3
Assignee: Not yet assigned to anyone
URL:
Keywords: accepts-invalid
Depends on:
Blocks:
 
Reported: 2005-04-08 15:54 UTC by Joost VandeVondele
Modified: 2005-10-14 13:12 UTC (History)
2 users (show)

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed: 2005-09-30 17:10:24


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:54:33 UTC
The following is non-standard and the compiler should probably generate a
warning/error with '-pedantic -std=f95'

FUNCTION X() RESULT(Y)
REAL, SAVE :: Y
END FUNCTION X
END
Comment 1 Francois-Xavier Coudert 2005-04-10 08:46:10 UTC
I'm not sure what the error should be for that one. Is the problem the SAVE
attribute given to Y?
Comment 2 Tobias Schlüter 2005-04-22 14:30:56 UTC
That's the problem.  I'm fairly sure Joost knows the problems for all these bugs ...
Comment 3 Andrew Pinski 2005-09-30 17:10:24 UTC
In fact we keep the value of Y still:
x ()
{
  real4 D.480;
  static real4 y;

  y = 1.0e+0;
  D.480 = y;
  return D.480;
}
Comment 4 GCC Commits 2005-10-12 20:05:09 UTC
Subject: Bug 20856

CVSROOT:	/cvs/gcc
Module name:	gcc
Changes by:	pault@gcc.gnu.org	2005-10-12 20:05:04

Modified files:
	gcc/fortran    : symbol.c ChangeLog 
	gcc/testsuite  : ChangeLog 
Added files:
	gcc/testsuite/gfortran.dg: save_common.f90 save_result.f90 

Log message:
	2005-10-12  Paul Thomas  <pault@gcc.gnu.org>
	
	PR fortran/20847
	PR fortran/20856
	* symbol.c (check_conflict): Prevent common variables and
	function results from having the SAVE attribute,as required
	by the standard.
	
	2005-10-12  Paul Thomas  <pault@gcc.gnu.org>
	
	PR fortran/20847
	gfortran.dg/save_common.f90: New test.
	
	PR fortran/20856
	gfortran.dg/save_result.f90: New test.

Patches:
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/fortran/symbol.c.diff?cvsroot=gcc&r1=1.36&r2=1.37
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/fortran/ChangeLog.diff?cvsroot=gcc&r1=1.581&r2=1.582
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gfortran.dg/save_common.f90.diff?cvsroot=gcc&r1=NONE&r2=1.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gfortran.dg/save_result.f90.diff?cvsroot=gcc&r1=NONE&r2=1.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/ChangeLog.diff?cvsroot=gcc&r1=1.6179&r2=1.6180

Comment 5 GCC Commits 2005-10-14 04:53:36 UTC
Subject: Bug 20856

CVSROOT:	/cvs/gcc
Module name:	gcc
Branch: 	gcc-4_0-branch
Changes by:	pault@gcc.gnu.org	2005-10-14 04:53:30

Modified files:
	gcc/fortran    : symbol.c trans-types.c decl.c ChangeLog 
	gcc/testsuite  : ChangeLog 
Added files:
	gcc/testsuite/gfortran.dg: automatic_char_len_1.f90 
	                           save_common.f90 save_result.f90 
	                           derived_pointer_recursion.f90 

Log message:
	2005-10-14  Paul Thomas  <pault@gcc.gnu.org>
	
	PR fortran/20847
	PR fortran/20856
	* symbol.c (check_conflict): Prevent common variables and
	function results from having the SAVE attribute,as required
	by the standard.
	
	PR fortran/24092
	* trans-types.c (gfc_get_derived_type): Insert code to obtain backend
	declaration for derived types, building if necessary.  Return the
	derived type if the fields have been built by this process.  Otherwise,
	continue as before but using the already obtained backend_decls for the
	derived type components.  Change the gcc_assert to act on the field.
	
	PR fortran/18082
	* decl.c (variable_decl): Make a new copy of the character
	length for each variable, when the expression is not a
	constant.
	
	2005-10-14  Paul Thomas  <pault@gcc.gnu.org>
	
	PR fortran/18082
	* gfortran.dg/automatic_char_len_1.f90: New test.
	
	PR fortran/20847
	* gfortran.dg/save_common.f90: New test.
	
	PR fortran/20856
	* gfortran.dg/save_result.f90: New test.
	
	PR fortran/24092
	* gfortran.dg/derived_pointer_recursion.f90: New test.

Patches:
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/fortran/symbol.c.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.26.2.5&r2=1.26.2.6
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/fortran/trans-types.c.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.37.10.7&r2=1.37.10.8
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/fortran/decl.c.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.31.2.4&r2=1.31.2.5
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/fortran/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.335.2.128&r2=1.335.2.129
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gfortran.dg/automatic_char_len_1.f90.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=NONE&r2=1.1.4.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gfortran.dg/save_common.f90.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=NONE&r2=1.2.4.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gfortran.dg/save_result.f90.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=NONE&r2=1.2.4.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gfortran.dg/derived_pointer_recursion.f90.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=NONE&r2=1.1.4.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.5084.2.453&r2=1.5084.2.454

Comment 6 Andrew Pinski 2005-10-14 13:12:05 UTC
Fixed in 4.0.3.