diff options
author | jb <jb@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-07-03 16:50:05 +0000 |
---|---|---|
committer | jb <jb@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-07-03 16:50:05 +0000 |
commit | f66be06b01f231e3309cb6a7fb3b88bd3a6aad00 (patch) | |
tree | 030df243de19137f076b9781c368c93c9546558d /libgfortran | |
parent | d2b0211b56e5be863a5123d23fca3072f1b6c643 (diff) | |
download | gcc-f66be06b01f231e3309cb6a7fb3b88bd3a6aad00.tar.gz |
Fortran frontend:
2007-07-03 Janne Blomqvist <jb@gcc.gnu.org>
* trans-decl.c (gfc_build_builtin_function_decls): Mark
internal_realloc as a malloc function.
libgfortran:
2007-07-03 Janne Blomqvist <jb@gcc.gnu.org>
* libgfortran.h: Mark internal_malloc_size as a malloc function.
* runtime/memory.c (internal_realloc_size): Remove.
(internal_realloc): Call realloc directly instead of
internal_realloc_size.
(allocate_size): Remove.
(allocate): Call malloc directly instead of allocate_size, mark as
malloc function.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@126264 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libgfortran')
-rw-r--r-- | libgfortran/ChangeLog | 10 | ||||
-rw-r--r-- | libgfortran/libgfortran.h | 2 | ||||
-rw-r--r-- | libgfortran/runtime/memory.c | 74 |
3 files changed, 39 insertions, 47 deletions
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index dc0e2468ef9..631e2a5da64 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,13 @@ +2007-07-03 Janne Blomqvist <jb@gcc.gnu.org> + + * libgfortran.h: Mark internal_malloc_size as a malloc function. + * runtime/memory.c (internal_realloc_size): Remove. + (internal_realloc): Call realloc directly instead of + internal_realloc_size. + (allocate_size): Remove. + (allocate): Call malloc directly instead of allocate_size, mark as + malloc function. + 2007-07-02 Steven G. Kargl <kargl@gcc.gnu.org> Restore collateral damage from ISO C Binding merge. diff --git a/libgfortran/libgfortran.h b/libgfortran/libgfortran.h index f73594dc4d7..8a86f41785d 100644 --- a/libgfortran/libgfortran.h +++ b/libgfortran/libgfortran.h @@ -634,7 +634,7 @@ internal_proto(get_mem); extern void free_mem (void *); internal_proto(free_mem); -extern void *internal_malloc_size (size_t); +extern void *internal_malloc_size (size_t) __attribute__ ((malloc)); internal_proto(internal_malloc_size); /* environ.c */ diff --git a/libgfortran/runtime/memory.c b/libgfortran/runtime/memory.c index 7d893716978..f1991cda324 100644 --- a/libgfortran/runtime/memory.c +++ b/libgfortran/runtime/memory.c @@ -82,26 +82,6 @@ internal_malloc_size (size_t size) Allocate a new block if MEM is zero, and free the block if SIZE is 0. */ -static void * -internal_realloc_size (void *mem, size_t size) -{ - if (size == 0) - { - if (mem) - free (mem); - return NULL; - } - - if (mem == 0) - return get_mem (size); - - mem = realloc (mem, size); - if (!mem) - os_error ("Out of memory."); - - return mem; -} - extern void *internal_realloc (void *, index_type); export_proto(internal_realloc); @@ -113,41 +93,28 @@ internal_realloc (void *mem, index_type size) if (size < 0) runtime_error ("Attempt to allocate a negative amount of memory."); #endif - return internal_realloc_size (mem, (size_t) size); + 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. */ -static void * -allocate_size (size_t size, GFC_INTEGER_4 * stat) -{ - void *newmem; - - 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; -} - -extern void *allocate (index_type, GFC_INTEGER_4 *); +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. */ @@ -163,7 +130,22 @@ allocate (index_type size, GFC_INTEGER_4 * stat) "Possible integer overflow"); } #endif - return allocate_size ((size_t) size, stat); + 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 |