Bug 20871 - Non-intrinsic elemental procedure cannot be actual argument
Summary: Non-intrinsic elemental procedure cannot be actual argument
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: fortran (show other bugs)
Version: 4.1.0
: P2 normal
Target Milestone: ---
Assignee: Not yet assigned to anyone
URL:
Keywords: accepts-invalid
Depends on:
Blocks:
 
Reported: 2005-04-08 15:58 UTC by Joost VandeVondele
Modified: 2006-02-13 21:39 UTC (History)
1 user (show)

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed: 2005-09-30 20:21:32


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

MODULE TT
CONTAINS
   ELEMENTAL INTEGER FUNCTION two(N)
     INTEGER, INTENT(IN) :: N
     two=2**N
   END FUNCTION
END MODULE
USE TT
 INTEGER, EXTERNAL  :: SUB
 write(6,*) SUB(two) ! 12.4
END
INTEGER FUNCTION SUB(XX)
  INTEGER :: XX
  SUB=XX()
END
Comment 1 Tobias Schlüter 2005-04-22 14:50:32 UTC
"A non-intrinsic elemental procedure shall not be used as dummy argument"
Comment 2 Paul Thomas 2006-02-13 21:23:03 UTC
Subject: Bug 20871

Author: pault
Date: Mon Feb 13 21:22:55 2006
New Revision: 110926

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=110926
Log:
2006-02-13  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/26074
	PR fortran/25103
	* resolve.c (resolve_symbol): Extend the requirement that module
	arrays have constant bounds to those in the main program.  At the
	same time simplify the array bounds, to avoiding trapping parameter
	array references, and exclude automatic character length from main
	and modules. Rearrange resolve_symbol and resolve_derived to put as
	each flavor together, as much as is possible and move all specific
	code for flavors FL_VARIABLE, FL_PROCEDURE and FL_PARAMETER into new
	functions.
	(resolve_fl_var_and_proc, resolve_fl_variable, resolve_fl_procedure):
	New functions to do work of resolve_symbol.
	(resolve_index_expr): New function that is called from resolved_symbol
	and is extracted from resolve_charlen.
	(resolve_charlen): Call this new function.
	(resolve_fl_derived): Renamed resolve_derived to be consistent with
	the naming of the new functions for the other flavours.  Change the
	charlen checking so that the style is consistent with other similar
	checks. Add the generation of the gfc_dt_list, removed from resolve_
	symbol.

	PR fortran/20861
	* resolve.c (resolve_actual_arglist): Prevent internal procedures
	from being dummy arguments.

	PR fortran/20871
	* resolve.c (resolve_actual_arglist): Prevent pure but non-intrinsic
	procedures from being dummy arguments.

	PR fortran/25083
	* resolve.c (check_data_variable): Add test that data variable is in
	COMMON.

	PR fortran/25088
	* resolve.c (resolve_call): Add test that the subroutine does not
	have a type.


2006-02-13  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/26074
	PR fortran/25103
	* gfortran.dg/module_parameter_array_refs_1.f90: New test.
	* gfortran.dg/bad_automatic_objects_1.f90: New test.
	* gfortran.dg/automatic_module_variable.f90: Change error message.

	PR fortran/20861
	* gfortran.dg/internal_dummy_1.f90: New test.

	PR fortran/20871
	* gfortran.dg/elemental_non_intrinsic_dummy_1.f90: New test.


	PR fortran/25083
	* gfortran.dg/uncommon_block_data_1.f90: New test.
	* gfortran.dg/equiv_constraint_7.f90: Correct non-compliance of test
	with standard.

	PR fortran/25088
	* gfortran.dg/typed_subroutine_1.f90: New test.


Added:
    trunk/gcc/testsuite/gfortran.dg/bad_automatic_objects_1.f90
    trunk/gcc/testsuite/gfortran.dg/elemental_non_intrinsic_dummy_1.f90
    trunk/gcc/testsuite/gfortran.dg/internal_dummy_1.f90
    trunk/gcc/testsuite/gfortran.dg/module_parameter_array_refs_1.f90
    trunk/gcc/testsuite/gfortran.dg/typed_subroutine_1.f90
    trunk/gcc/testsuite/gfortran.dg/uncommon_block_data_1.f90
Modified:
    trunk/gcc/fortran/ChangeLog
    trunk/gcc/fortran/resolve.c
    trunk/gcc/testsuite/ChangeLog
    trunk/gcc/testsuite/gfortran.dg/automatic_module_variable.f90
    trunk/gcc/testsuite/gfortran.dg/equiv_constraint_7.f90

Comment 3 Paul Thomas 2006-02-13 21:35:16 UTC
Subject: Bug 20871

Author: pault
Date: Mon Feb 13 21:35:09 2006
New Revision: 110930

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=110930
Log:
2006-02-13  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/26074
	PR fortran/25103
	* resolve.c (resolve_symbol): Extend the requirement that module
	arrays have constant bounds to those in the main program.  At the
	same time simplify the array bounds, to avoiding trapping parameter
	array references, and exclude automatic character length from main
	and modules. Rearrange resolve_symbol and resolve_derived to put as
	each flavor together, as much as is possible and move all specific
	code for flavors FL_VARIABLE, FL_PROCEDURE and FL_PARAMETER into new
	functions.
	(resolve_fl_var_and_proc, resolve_fl_variable, resolve_fl_procedure):
	New functions to do work of resolve_symbol.
	(resolve_index_expr): New function that is called from resolved_symbol
	and is extracted from resolve_charlen.
	(resolve_charlen): Call this new function.
	(resolve_fl_derived): Renamed resolve_derived to be consistent with
	the naming of the new functions for the other flavours.  Change the
	charlen checking so that the style is consistent with other similar
	checks. Add the generation of the gfc_dt_list, removed from resolve_
	symbol.

	PR fortran/20861
	* resolve.c (resolve_actual_arglist): Prevent internal procedures
	from being dummy arguments.

	PR fortran/20871
	* resolve.c (resolve_actual_arglist): Prevent pure but non-intrinsic
	procedures from being dummy arguments.

	PR fortran/25083
	* resolve.c (check_data_variable): Add test that data variable is in
	COMMON.

	PR fortran/25088
	* resolve.c (resolve_call): Add test that the subroutine does not
	have a type.


2006-02-13  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/26074
	PR fortran/25103
	* gfortran.dg/module_parameter_array_refs_1.f90: New test.
	* gfortran.dg/bad_automatic_objects_1.f90: New test.
	* gfortran.dg/automatic_module_variable.f90: Change error message.

	PR fortran/20861
	* gfortran.dg/internal_dummy_1.f90: New test.

	PR fortran/20871
	* gfortran.dg/elemental_non_intrinsic_dummy_1.f90: New test.


	PR fortran/25083
	* gfortran.dg/uncommon_block_data_1.f90: New test.
	* gfortran.dg/equiv_constraint_7.f90: Correct non-compliance of test
	with standard.

	PR fortran/25088
	* gfortran.dg/typed_subroutine_1.f90: New test.


Added:
    branches/gcc-4_1-branch/gcc/testsuite/gfortran.dg/bad_automatic_objects_1.f90
    branches/gcc-4_1-branch/gcc/testsuite/gfortran.dg/internal_dummy_1.f90
    branches/gcc-4_1-branch/gcc/testsuite/gfortran.dg/module_parameter_array_refs_1.f90
    branches/gcc-4_1-branch/gcc/testsuite/gfortran.dg/pure_non_intrinsic_dummy_1.f90
    branches/gcc-4_1-branch/gcc/testsuite/gfortran.dg/typed_subroutine_1.f90
    branches/gcc-4_1-branch/gcc/testsuite/gfortran.dg/uncommon_block_data_1.f90
Modified:
    branches/gcc-4_1-branch/gcc/fortran/ChangeLog
    branches/gcc-4_1-branch/gcc/testsuite/ChangeLog

Comment 4 Paul Thomas 2006-02-13 21:39:31 UTC
Fixed on trunk and 4.1.

Paul
Comment 5 Paul Thomas 2006-02-14 07:18:51 UTC
Subject: Bug 20871

Author: pault
Date: Tue Feb 14 07:18:44 2006
New Revision: 110960

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=110960
Log:
2006-02-13  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/26074
	PR fortran/25103
	PR fortran/20861
	PR fortran/20871
	PR fortran/25083
	PR fortran/25088
	* resolve.c (resolve): Actually apply the patch below!

Modified:
    branches/gcc-4_1-branch/gcc/fortran/resolve.c
    branches/gcc-4_1-branch/gcc/testsuite/gfortran.dg/automatic_module_variable.f90
    branches/gcc-4_1-branch/gcc/testsuite/gfortran.dg/equiv_constraint_7.f90