PR fortran/12840
authorrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 9 Sep 2005 06:00:40 +0000 (06:00 +0000)
committerrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 9 Sep 2005 06:00:40 +0000 (06:00 +0000)
commit9e1839e269e680c073d3e12a93b7848d0d27f0ca
treed788ce4f5e058a0f2c9ae51b2f4c42658aaa6a2b
parent030a743b1b2961f05ce7a5b32ce7c50b13e6075f
PR fortran/12840
* trans.h (gfor_fndecl_internal_realloc): Declare.
(gfor_fndecl_internal_realloc64): Declare.
* trans-decl.c (gfor_fndecl_internal_realloc): New variable.
(gfor_fndecl_internal_realloc64): New variable.
(gfc_build_builtin_function_decls): Initialize them.
* trans-array.h (gfc_trans_allocate_temp_array): Add a fourth argument.
* trans-array.c (gfc_trans_allocate_array_storage): Add an argument
to say whether the array can grow later.  Don't allocate the array
on the stack if so.  Don't call malloc for zero-sized arrays.
(gfc_trans_allocate_temp_array): Add a similar argument here.
Pass it along to gfc_trans_allocate_array_storage.
(gfc_get_iteration_count, gfc_grow_array): New functions.
(gfc_iterator_has_dynamic_bounds): New function.
(gfc_get_array_constructor_element_size): New function.
(gfc_get_array_constructor_size): New function.
(gfc_trans_array_ctor_element): Replace pointer argument with
a descriptor tree.
(gfc_trans_array_constructor_subarray): Likewise.  Take an extra
argument to say whether the variable-sized part of the constructor
must be allocated using realloc.  Grow the array when this
argument is true.
(gfc_trans_array_constructor_value): Likewise.
(gfc_get_array_cons_size): Delete.
(gfc_trans_array_constructor): If the loop bound has not been set,
split the allocation into a static part and a dynamic part.  Set
loop->to to the bounds for static part before allocating the
temporary.  Adjust call to gfc_trans_array_constructor_value.
(gfc_conv_loop_setup): Allow any constructor to determine the
loop bounds.  Check whether the constructor has a dynamic size
and prefer to use something else if so.  Expect the loop bound
to be set later.  Adjust call to gfc_trans_allocate_temp_array.
* trans-expr.c (gfc_conv_function_call): Adjust another call here.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@104073 138bc75d-0d04-0410-961f-82ee72b054a4
16 files changed:
gcc/fortran/ChangeLog
gcc/fortran/trans-array.c
gcc/fortran/trans-array.h
gcc/fortran/trans-decl.c
gcc/fortran/trans-expr.c
gcc/fortran/trans.h
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/array_constructor_10.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/array_constructor_11.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/array_constructor_12.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/array_constructor_6.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/array_constructor_7.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/array_constructor_8.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/array_constructor_9.f90 [new file with mode: 0644]
libgfortran/ChangeLog
libgfortran/runtime/memory.c