Commit 927171bf by Paul Thomas

re PR fortran/33566 (fortran : wrong rank of derived type parameters array components)

2007-10-02  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/33566
	* primary.c (gfc_match_rvalue): Make all expressions with array
	references to structure parameters into variable expressions.

2007-10-02  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/33566
	* gfortran.dg/derived_comp_array_ref_5.f90: New test.

From-SVN: r128951
parent d3837072
2007-10-02 Paul Thomas <pault@gcc.gnu.org> 2007-10-02 Paul Thomas <pault@gcc.gnu.org>
PR fortran/33566
* primary.c (gfc_match_rvalue): Make all expressions with array
references to structure parameters into variable expressions.
2007-10-02 Paul Thomas <pault@gcc.gnu.org>
PR fortran/33554 PR fortran/33554
* trans-decl.c (init_intent_out_dt): New function. * trans-decl.c (init_intent_out_dt): New function.
(gfc_trans_deferred_vars): Remove the code for default (gfc_trans_deferred_vars): Remove the code for default
......
...@@ -2148,18 +2148,17 @@ gfc_match_rvalue (gfc_expr **result) ...@@ -2148,18 +2148,17 @@ gfc_match_rvalue (gfc_expr **result)
if (sym->ts.is_c_interop || sym->ts.is_iso_c) if (sym->ts.is_c_interop || sym->ts.is_iso_c)
break; break;
/* Variable array references to use associated derived type /* Variable array references to derived type parameters cause
parameters cause all sorts of headaches in simplification. all sorts of headaches in simplification. Treating such
For this reason, we write the parameter to the module and expressions as variable works just fine for all array
treat them as variable references. */ references. */
if (sym->value && sym->ts.type == BT_DERIVED if (sym->value && sym->ts.type == BT_DERIVED && e->ref)
&& sym->attr.use_assoc && e->ref)
{ {
for (ref = e->ref; ref; ref = ref->next) for (ref = e->ref; ref; ref = ref->next)
if (ref->type == REF_ARRAY) if (ref->type == REF_ARRAY)
break; break;
if (ref == NULL) if (ref == NULL || ref->u.ar.type == AR_FULL)
break; break;
ref = e->ref; ref = e->ref;
......
2007-10-02 Paul Thomas <pault@gcc.gnu.org> 2007-10-02 Paul Thomas <pault@gcc.gnu.org>
PR fortran/33566
* gfortran.dg/derived_comp_array_ref_5.f90: New test.
2007-10-02 Paul Thomas <pault@gcc.gnu.org>
PR fortran/33554 PR fortran/33554
* gfortran.dg/intent_out_2.f90: New test. * gfortran.dg/intent_out_2.f90: New test.
! { dg-do compile }
! Tests the fix for PR33566, in which the first variable array ref
! to v1 would cause an incompatible ranks error and the second an ICE.
!
! Contributed by Mikael Morin <mikael.morin@tele2.fr>
!
program test_vec
implicit none
integer :: i
real :: x
type vec3
real, dimension(3) :: coords
end type vec3
type(vec3),parameter :: v1 = vec3((/ 1.0, 2.0, 3.0 /))
type(vec3) :: v2
v2 = vec3((/ 1.0, 2.0, 3.0 /))
x = v1%coords(1)
do i=1,3
x = v1%coords(i) ! used to fail
x = v2%coords(i)
end do
i = 2
v2 = vec3 (v1%coords ((/i+1, i, i-1/))) ! also broken
end program test_vec
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