Bug 30283 - [4.2 and 4.1 only] Specification expression not properly recognized in declaration
Summary: [4.2 and 4.1 only] Specification expression not properly recognized in declar...
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: fortran (show other bugs)
Version: 4.3.0
: P3 normal
Target Milestone: ---
Assignee: Paul Thomas
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2006-12-23 20:01 UTC by Harald Anlauf
Modified: 2007-01-23 06:05 UTC (History)
1 user (show)

See Also:
Host: i686-pc-linux-gnu
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed: 2007-01-18 14:33:46


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Harald Anlauf 2006-12-23 20:01:07 UTC
Hi,

the following legal code fails to compile with gfortran:

% cat gfcbug50.f90
module gfcbug50
  implicit none
contains

  subroutine foo (n, y)
    integer, intent(in)         :: n
    integer, dimension(bar (n)) :: y
    ! Array bound is specification expression, which is allowed (F2003, sect. 7.
1.6)
  end subroutine foo

  pure function bar (n) result (l)
    integer, intent(in) :: n
    integer             :: l
    l = n
  end function bar

end module gfcbug50
% gfc -c gfcbug50.f90
gfcbug50.f90:7.23:

    integer, dimension(bar (n)) :: y
                      1
Error: Expression at (1) must be of INTEGER type


This is wrong.  bar(n) is a specification expression.
See e.g. the F2003 standard, sect. 7.1.6

Cheers,
-ha
Comment 1 Paul Thomas 2007-01-13 22:12:40 UTC
This looks quite easy:

  pure integer function bar (n)
    integer, intent(in) :: n
    bar = n
  end function bar

works. Somebody has forgotten to transfer the result typespec to that of the specification expression.

Paul
Comment 2 Paul Thomas 2007-01-15 08:16:38 UTC
Subject: Bug 30283

Author: pault
Date: Mon Jan 15 08:16:17 2007
New Revision: 120790

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

	PR fortran/28172
	* trans-stmt.c (gfc_trans_call): If it does not have one, get
	a backend_decl for an alternate return.

	PR fortran/29389
	* resolve.c (pure_function): Statement functions are pure. Note
	that this will have to recurse to comply fully with F95.

	PR fortran/29712
	* resolve.c (resolve_function): Only a reference to the final
	dimension of an assumed size array is an error in an inquiry
	function.

	PR fortran/30283
	* resolve.c (resolve_function): Make sure that the function
	expression has a type.

2007-01-15  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/28172
	* gfortran.dg/altreturn_4.f90: New test.

	PR fortran/29389
	* gfortran.dg/stfunc_4.f90: New test.

	PR fortran/29712
	* gfortran.dg/bound_2.f90: Reinstate commented out line.
	* gfortran.dg/initialization_1.f90: Change warning.

	PR fortran/30283
	* gfortran.dg/specification_type_resolution_2.f90: New test.


Added:
    trunk/gcc/testsuite/gfortran.dg/altreturn_4.f90
    trunk/gcc/testsuite/gfortran.dg/specification_type_resolution_2.f90
    trunk/gcc/testsuite/gfortran.dg/stfunc_4.f90
Modified:
    trunk/gcc/fortran/ChangeLog
    trunk/gcc/fortran/resolve.c
    trunk/gcc/fortran/trans-stmt.c
    trunk/gcc/testsuite/ChangeLog
    trunk/gcc/testsuite/gfortran.dg/bound_2.f90
    trunk/gcc/testsuite/gfortran.dg/initialization_1.f90

Comment 3 Paul Thomas 2007-01-23 05:53:34 UTC
Subject: Bug 30283

Author: pault
Date: Tue Jan 23 05:53:14 2007
New Revision: 121077

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

	Backports from trunk

	PR fortran/28172
	* trans-stmt.c (gfc_trans_call): If it does not have one, get
	a backend_decl for an alternate return.

	PR fortran/29389
	* resolve.c (pure_function): Statement functions are pure. Note
	that this will have to recurse to comply fully with F95.

	PR fortran/29712
	* resolve.c (resolve_function): Only a reference to the final
	dimension of an assumed size array is an error in an inquiry
	function.

	PR fortran/30283
	* resolve.c (resolve_function): Make sure that the function
	expression has a type.

2007-01-23  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/28172
	* gfortran.dg/altreturn_4.f90: New test.

	PR fortran/29389
	* gfortran.dg/stfunc_4.f90: New test.

	PR fortran/29712
	* gfortran.dg/bound_2.f90: Reinstate commented out line.
	* gfortran.dg/initialization_1.f90: Change warning.

	PR fortran/30283
	* gfortran.dg/specification_type_resolution_2.f90: New test.

Added:
    branches/gcc-4_2-branch/gcc/testsuite/gfortran.dg/altreturn_4.f90
    branches/gcc-4_2-branch/gcc/testsuite/gfortran.dg/specification_type_resolution_2.f90
    branches/gcc-4_2-branch/gcc/testsuite/gfortran.dg/stfunc_4.f90
Modified:
    branches/gcc-4_2-branch/gcc/fortran/ChangeLog
    branches/gcc-4_2-branch/gcc/fortran/resolve.c
    branches/gcc-4_2-branch/gcc/fortran/trans-stmt.c
    branches/gcc-4_2-branch/gcc/testsuite/ChangeLog
    branches/gcc-4_2-branch/gcc/testsuite/gfortran.dg/bound_2.f90
    branches/gcc-4_2-branch/gcc/testsuite/gfortran.dg/initialization_1.f90

Comment 4 Paul Thomas 2007-01-23 06:05:00 UTC
Fixed on trunk and 4.2

Paul