diff options
author | fxcoudert <fxcoudert@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-08-29 12:44:32 +0000 |
---|---|---|
committer | fxcoudert <fxcoudert@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-08-29 12:44:32 +0000 |
commit | a5014d251126a0107ed852c02fb166260a358183 (patch) | |
tree | 01404bd7b2cf9f1674f08538ac495ecf3cd28d04 /libgfortran/runtime | |
parent | 8059d3507a3bd61c18ab89d46babdf28df29c6ee (diff) | |
download | gcc-a5014d251126a0107ed852c02fb166260a358183.tar.gz |
* builtin-types.def (BT_FN_PTR_PTR_SIZE): New type.
* builtins.def (BUILT_IN_REALLOC): New builtin.
* trans-array.c (gfc_grow_array): Use gfc_call_realloc.
(gfc_array_allocate): Use gfc_allocate_with_status and
gfc_allocate_array_with_status.
(gfc_array_deallocate): Use gfc_deallocate_with_status.
(gfc_trans_dealloc_allocated): Use gfc_deallocate_with_status.
* trans-stmt.c (gfc_trans_allocate): Use gfc_allocate_with_status.
(gfc_trans_deallocate): Use gfc_deallocate_with_status.
* trans.c (gfc_allocate_with_status, gfc_allocate_array_with_status,
gfc_deallocate_with_status, gfc_call_realloc): New functions.
* trans.h (gfc_allocate_with_status, gfc_allocate_array_with_status,
gfc_deallocate_with_status, gfc_call_realloc): New prototypes.
(gfor_fndecl_internal_realloc, gfor_fndecl_allocate,
gfor_fndecl_allocate_array, gfor_fndecl_deallocate): Remove.
* f95-lang.c (gfc_init_builtin_functions): Create decl for
BUILT_IN_REALLOC.
* trans-decl.c (gfor_fndecl_internal_realloc,
gfor_fndecl_allocate, gfor_fndecl_allocate_array,
gfor_fndecl_deallocate): Remove function decls.
(gfc_build_builtin_function_decls): Likewise.
* runtime/memory.c (internal_realloc, allocate, allocate_array,
deallocate): Remove functions.
* gfortran.map (_gfortran_allocate, _gfortran_allocate_array,
_gfortran_deallocate, _gfortran_internal_realloc): Remove symbols.
* libgfortran.h (error_codes): Add comment.
* gfortran.dg/alloc_comp_basics_1.f90: Update check.
* gfortran.dg/alloc_comp_constructor_1.f90: Update check.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@127897 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libgfortran/runtime')
-rw-r--r-- | libgfortran/runtime/memory.c | 124 |
1 files changed, 0 insertions, 124 deletions
diff --git a/libgfortran/runtime/memory.c b/libgfortran/runtime/memory.c index f1991cda324..7407486b696 100644 --- a/libgfortran/runtime/memory.c +++ b/libgfortran/runtime/memory.c @@ -38,10 +38,6 @@ Boston, MA 02110-1301, USA. */ performance is desired, but it can help when you're debugging code. */ /* #define GFC_CLEAR_MEMORY */ -/* If GFC_CHECK_MEMORY is defined, we do some sanity checks at runtime. - This causes small overhead, but again, it also helps debugging. */ -#define GFC_CHECK_MEMORY - void * get_mem (size_t n) { @@ -76,123 +72,3 @@ internal_malloc_size (size_t size) return get_mem (size); } - - -/* Reallocate internal memory MEM so it has SIZE bytes of data. - Allocate a new block if MEM is zero, and free the block if - SIZE is 0. */ - -extern void *internal_realloc (void *, index_type); -export_proto(internal_realloc); - -void * -internal_realloc (void *mem, index_type size) -{ -#ifdef GFC_CHECK_MEMORY - /* Under normal circumstances, this is _never_ going to happen! */ - if (size < 0) - runtime_error ("Attempt to allocate a negative amount of memory."); -#endif - mem = realloc (mem, size); - if (!mem && size != 0) - os_error ("Out of memory."); - - if (size == 0) - return NULL; - - return mem; -} - - -/* User-allocate, one call for each member of the alloc-list of an - ALLOCATE statement. */ - -extern void *allocate (index_type, GFC_INTEGER_4 *) __attribute__ ((malloc)); -export_proto(allocate); - -void * -allocate (index_type size, GFC_INTEGER_4 * stat) -{ - void *newmem; - -#ifdef GFC_CHECK_MEMORY - /* The only time this can happen is the size computed by the - frontend wraps around. */ - if (size < 0) - { - if (stat) - { - *stat = ERROR_ALLOCATION; - return NULL; - } - else - runtime_error ("Attempt to allocate negative amount of memory. " - "Possible integer overflow"); - } -#endif - newmem = malloc (size ? size : 1); - if (!newmem) - { - if (stat) - { - *stat = ERROR_ALLOCATION; - return newmem; - } - else - runtime_error ("ALLOCATE: Out of memory."); - } - - if (stat) - *stat = 0; - - return newmem; -} - -/* Function to call in an ALLOCATE statement when the argument is an - allocatable array. If the array is currently allocated, it is - an error to allocate it again. */ - -extern void *allocate_array (void *, index_type, GFC_INTEGER_4 *); -export_proto(allocate_array); - -void * -allocate_array (void *mem, index_type size, GFC_INTEGER_4 * stat) -{ - if (mem == NULL) - return allocate (size, stat); - if (stat) - { - free (mem); - mem = allocate (size, stat); - *stat = ERROR_ALLOCATION; - return mem; - } - - runtime_error ("Attempting to allocate already allocated array."); -} - - -/* User-deallocate; pointer is then NULLified by the front-end. */ - -extern void deallocate (void *, GFC_INTEGER_4 *); -export_proto(deallocate); - -void -deallocate (void *mem, GFC_INTEGER_4 * stat) -{ - if (!mem) - { - if (stat) - { - *stat = 1; - return; - } - else - runtime_error ("Internal: Attempt to DEALLOCATE unallocated memory."); - } - - free (mem); - - if (stat) - *stat = 0; -} |