diff options
author | Daniel Carrera <dcarrera@gmail.com> | 2011-07-27 10:10:06 +0000 |
---|---|---|
committer | Daniel Carrera <dcarrera@gcc.gnu.org> | 2011-07-27 10:10:06 +0000 |
commit | 4f13e17fff3c787928f674a9ba26fd5517fc387d (patch) | |
tree | 0ce63aa3e4271ca28e6a80ffa44834d9407308ed /gcc/fortran/trans.h | |
parent | 7bbdd4e9c3f0647ee683a7e433128737139275fe (diff) | |
download | gcc-4f13e17fff3c787928f674a9ba26fd5517fc387d.zip gcc-4f13e17fff3c787928f674a9ba26fd5517fc387d.tar.gz gcc-4f13e17fff3c787928f674a9ba26fd5517fc387d.tar.bz2 |
re PR fortran/49755 (ALLOCATE with STAT= produces invalid code for already allocated vars)
2011-07-26 Daniel Carrera <dcarrera@gmail.com>
PR fortran/49755
* trans.c (gfc_allocate_using_malloc): Change function signature.
Return nothing. New parameter "pointer". Eliminate temorary variables.
(gfc_allocate_using_lib): Ditto.
(gfc_allocate_allocatable): Ditto. Update call to gfc_allocate_using_lib
and gfc_allocate_using_malloc. Do not free and then reallocate a
variable that is already allocated.
(gfc_likely): New function. Basedon gfc_unlikely.
* trans-array.c (gfc_array_init_size): New parameter "descriptor_block".
Instructions to modify the array descriptor are stored in this block
while other instructions continue to be stored in "pblock".
(gfc_array_allocate): Update call to gfc_array_init_size. Move the
descriptor_block so that the array descriptor is only updated if
the array was allocated successfully.
Update calls to gfc_allocate_allocatable and gfc_allocate_using_malloc.
* trans.h (gfc_allocate_allocatable): Change function signature.
Function now returns void.
(gfc_allocate_using_lib): Ditto, and new function parameter.
(gfc_allocate_using_malloc): Ditto.
* trans-openmp.c (gfc_omp_clause_default_ctor,
gfc_omp_clause_copy_ctor,gfc_trans_omp_array_reduction): Replace a call
to gfc_allocate_allocatable with gfc_allocate_using_malloc.
* trans-stmt.c (gfc_trans_allocate): Update function calls for
gfc_allocate_allocatable and gfc_allocate_using_malloc.
2011-07-26 Daniel Carrera <dcarrera@gmail.com>
PR fortran/49755
* gfortran.dg/multiple_allocation_1.f90: Fix test. Allocating an
allocated array should *not* change its size.
* gfortran.dg/multiple_allocation_3.f90: New test.
From-SVN: r176822
Diffstat (limited to 'gcc/fortran/trans.h')
-rw-r--r-- | gcc/fortran/trans.h | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/gcc/fortran/trans.h b/gcc/fortran/trans.h index 73e2fa0..a53360f 100644 --- a/gcc/fortran/trans.h +++ b/gcc/fortran/trans.h @@ -517,7 +517,8 @@ void gfc_generate_constructors (void); /* Get the string length of an array constructor. */ bool get_array_ctor_strlen (stmtblock_t *, gfc_constructor_base, tree *); -/* Mark a condition as unlikely. */ +/* Mark a condition as likely or unlikely. */ +tree gfc_likely (tree); tree gfc_unlikely (tree); /* Generate a runtime error call. */ @@ -541,12 +542,12 @@ tree gfc_call_malloc (stmtblock_t *, tree, tree); tree gfc_build_memcpy_call (tree, tree, tree); /* Allocate memory for allocatable variables, with optional status variable. */ -tree gfc_allocate_allocatable (stmtblock_t*, tree, tree, +void gfc_allocate_allocatable (stmtblock_t*, tree, tree, tree, tree, tree, gfc_expr*); /* Allocate memory, with optional status variable. */ -tree gfc_allocate_using_malloc (stmtblock_t *, tree, tree); -tree gfc_allocate_using_lib (stmtblock_t *, tree, tree, tree, tree); +void gfc_allocate_using_malloc (stmtblock_t *, tree, tree, tree); +void gfc_allocate_using_lib (stmtblock_t *, tree, tree, tree, tree, tree); /* Generate code to deallocate an array. */ tree gfc_deallocate_with_status (tree, tree, bool, gfc_expr*); |