Commit 4d4074e4 by Paul Thomas

re PR fortran/29941 ([4.1 only] gfortran reports error with len of assumed size character array)

2006-12-09  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/29941
	* resolve.c (resolve_function): Add LEN to the functions not
	checked for assumed size actual args.


2006-12-09  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/29941
	* gfortran.dg/assumed_len.f90: New test.

From-SVN: r119695
parent 8aa25857
2006-12-09 Paul Thomas <pault@gcc.gnu.org>
PR fortran/29941
* resolve.c (resolve_function): Add LEN to the functions not
checked for assumed size actual args.
2006-12-08 Tobias Burnus <burnus@net-b.de> 2006-12-08 Tobias Burnus <burnus@net-b.de>
PR fortran/27546 PR fortran/27546
* trans-decl.f90 (gfc_create_module_variable): Allow imported symbols * trans-decl.c (gfc_create_module_variable): Allow imported
in interface bodys in modules. symbols in interface bodies in modules.
2006-12-06 Tobias Burnus <burnus@net-b.de> 2006-12-06 Tobias Burnus <burnus@net-b.de>
PR fortran/29711 PR fortran/29711
* error.c (error_print): Fix handling of printf-style position specifiers * error.c (error_print): Fix handling of printf-style position
of the form "%3$d" specifiers of the form "%3$d".
2006-12-05 Paul Thomas <pault@gcc.gnu.org> 2006-12-05 Paul Thomas <pault@gcc.gnu.org>
......
...@@ -1514,19 +1514,21 @@ resolve_function (gfc_expr * expr) ...@@ -1514,19 +1514,21 @@ resolve_function (gfc_expr * expr)
t = FAILURE; t = FAILURE;
} }
#define GENERIC_ID expr->value.function.isym->generic_id
else if (expr->value.function.actual != NULL else if (expr->value.function.actual != NULL
&& expr->value.function.isym != NULL && expr->value.function.isym != NULL
&& expr->value.function.isym->generic_id != GFC_ISYM_LBOUND && GENERIC_ID != GFC_ISYM_LBOUND
&& expr->value.function.isym->generic_id != GFC_ISYM_LOC && GENERIC_ID != GFC_ISYM_LEN
&& expr->value.function.isym->generic_id != GFC_ISYM_PRESENT) && GENERIC_ID != GFC_ISYM_LOC
&& GENERIC_ID != GFC_ISYM_PRESENT)
{ {
/* Array intrinsics must also have the last upper bound of an /* Array intrinsics must also have the last upper bound of an
assumed size array argument. UBOUND and SIZE have to be assumed size array argument. UBOUND and SIZE have to be
excluded from the check if the second argument is anything excluded from the check if the second argument is anything
than a constant. */ than a constant. */
int inquiry; int inquiry;
inquiry = expr->value.function.isym->generic_id == GFC_ISYM_UBOUND inquiry = GENERIC_ID == GFC_ISYM_UBOUND
|| expr->value.function.isym->generic_id == GFC_ISYM_SIZE; || GENERIC_ID == GFC_ISYM_SIZE;
for (arg = expr->value.function.actual; arg; arg = arg->next) for (arg = expr->value.function.actual; arg; arg = arg->next)
{ {
...@@ -1540,6 +1542,7 @@ resolve_function (gfc_expr * expr) ...@@ -1540,6 +1542,7 @@ resolve_function (gfc_expr * expr)
return FAILURE; return FAILURE;
} }
} }
#undef GENERIC_ID
need_full_assumed_size = temp; need_full_assumed_size = temp;
......
2006-12-09 Paul Thomas <pault@gcc.gnu.org>
PR fortran/29941
* gfortran.dg/assumed_len.f90: New test.
2006-12-09 Richard Guenther <rguenther@suse.de> 2006-12-09 Richard Guenther <rguenther@suse.de>
* g++.dg/warn/implicit-typename1.C: Qualify types. * g++.dg/warn/implicit-typename1.C: Qualify types.
! { dg-do compile }
! Test of the patch for PR29941, in which LEN threw an error with
! an assumed size argument.
!
! Contributed by William Mitchell <william.mitchell@nist.gov>
!
subroutine whatever(str)
character(len=*), dimension(*) :: str
integer :: i
i = len(str)
end subroutine whatever
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment