Commit 98bbe5ee by Paul Thomas Committed by Tobias Burnus

re PR fortran/29916 ([4.1 only] Dimension of a function result as host association does not work)

fortran/
2006-12-04  Paul Thomas  <pault@gcc.gnu.org>

    PR fortran/29916
    * resolve.c (resolve_symbol): Allow host-associated variables
      in the specification expression of an array-valued function.
    * expr.c (check_restricted): Accept host-associated dummy
      array indices.

testsuite/
2006-12-04  Paul Thomas  <pault@gcc.gnu.org>

    PR fortran/29916
    * gfortran.dg/host_dummy_index_1.f90: Added additional test.

From-SVN: r119489
parent aad741f4
2006-12-04 Paul Thomas <pault@gcc.gnu.org>
PR fortran/29916
* resolve.c (resolve_symbol): Allow host-associated variables
the specification expression of an array-valued function.
* expr.c (check_restricted): Accept host-associated dummy
array indices.
2006-12-03 Paul Thomas <pault@gcc.gnu.org> 2006-12-03 Paul Thomas <pault@gcc.gnu.org>
PR fortran/29642 PR fortran/29642
......
...@@ -2047,14 +2047,15 @@ check_restricted (gfc_expr * e) ...@@ -2047,14 +2047,15 @@ check_restricted (gfc_expr * e)
/* gfc_is_formal_arg broadcasts that a formal argument list is being processed /* gfc_is_formal_arg broadcasts that a formal argument list is being processed
in resolve.c(resolve_formal_arglist). This is done so that host associated in resolve.c(resolve_formal_arglist). This is done so that host associated
dummy array indices are accepted (PR23446). */ dummy array indices are accepted (PR23446). This mechanism also does the
same for the specification expressions of array-valued functions. */
if (sym->attr.in_common if (sym->attr.in_common
|| sym->attr.use_assoc || sym->attr.use_assoc
|| sym->attr.dummy || sym->attr.dummy
|| sym->ns != gfc_current_ns || sym->ns != gfc_current_ns
|| (sym->ns->proc_name != NULL || (sym->ns->proc_name != NULL
&& sym->ns->proc_name->attr.flavor == FL_MODULE) && sym->ns->proc_name->attr.flavor == FL_MODULE)
|| gfc_is_formal_arg ()) || (gfc_is_formal_arg () && (sym->ns == gfc_current_ns)))
{ {
t = SUCCESS; t = SUCCESS;
break; break;
......
...@@ -6043,8 +6043,17 @@ resolve_symbol (gfc_symbol * sym) ...@@ -6043,8 +6043,17 @@ resolve_symbol (gfc_symbol * sym)
on COMMON blocks. */ on COMMON blocks. */
check_constant = sym->attr.in_common && !sym->attr.pointer; check_constant = sym->attr.in_common && !sym->attr.pointer;
/* Set the formal_arg_flag so that check_conflict will not throw
an error for host associated variables in the specification
expression for an array_valued function. */
if (sym->attr.function && sym->as)
formal_arg_flag = 1;
gfc_resolve_array_spec (sym->as, check_constant); gfc_resolve_array_spec (sym->as, check_constant);
formal_arg_flag = 0;
/* Resolve formal namespaces. */ /* Resolve formal namespaces. */
if (formal_ns_flag && sym != NULL && sym->formal_ns != NULL) if (formal_ns_flag && sym != NULL && sym->formal_ns != NULL)
......
2006-12-04 Paul Thomas <pault@gcc.gnu.org>
PR fortran/29916
* gfortran.dg/host_dummy_index_1.f90: Added additional test.
2006-12-04 Jakub Jelinek <jakub@redhat.com> 2006-12-04 Jakub Jelinek <jakub@redhat.com>
PR middle-end/29965 PR middle-end/29965
! { dg-do run } ! { dg-do run }
! Tests the fix for PR23446. Based on PR example. ! Tests the fix for PR23446. Based on PR example.
!
! Contributed by Paul Thomas <pault@gcc.gnu.org> ! Contributed by Paul Thomas <pault@gcc.gnu.org>
! !
! Tests furthermore the fix for PR fortran/29916.
! Test contributed by Marco Restelli <mrestelli@gmail.com>
!
PROGRAM TST PROGRAM TST
INTEGER IMAX INTEGER IMAX
INTEGER :: A(4) = 1 INTEGER :: A(4) = 1
...@@ -12,6 +14,7 @@ PROGRAM TST ...@@ -12,6 +14,7 @@ PROGRAM TST
CALL T(A) CALL T(A)
CALL U(A) CALL U(A)
if ( ALL(A.ne.(/2,2,3,4/))) CALL ABORT () if ( ALL(A.ne.(/2,2,3,4/))) CALL ABORT ()
if ( ALL(F().ne.(/2.0,2.0/))) CALL ABORT()
CONTAINS CONTAINS
SUBROUTINE S(A) SUBROUTINE S(A)
...@@ -26,4 +29,8 @@ CONTAINS ...@@ -26,4 +29,8 @@ CONTAINS
INTEGER A(2,IMAX) INTEGER A(2,IMAX)
A(2,2) = 4 A(2,2) = 4
END SUBROUTINE U END SUBROUTINE U
FUNCTION F()
real :: F(IMAX)
F = 2.0
END FUNCTION F
ENDPROGRAM TST ENDPROGRAM TST
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