mirror of
https://github.com/gcc-mirror/gcc.git
synced 2024-11-21 13:40:47 +00:00
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. From-SVN: r126264
This commit is contained in:
parent
66965e9094
commit
db430f6a2a
@ -1,3 +1,8 @@
|
||||
2007-07-03 Janne Blomqvist <jb@gcc.gnu.org>
|
||||
|
||||
* trans-decl.c (gfc_build_builtin_function_decls): Mark
|
||||
internal_realloc as a malloc function.
|
||||
|
||||
2007-07-03 Tobias Burnus <burnus@net-b.de>
|
||||
|
||||
PR fortran/20888
|
||||
|
@ -2276,6 +2276,7 @@ gfc_build_builtin_function_decls (void)
|
||||
(PREFIX("internal_realloc")),
|
||||
pvoid_type_node, 2, pvoid_type_node,
|
||||
gfc_index_int_type_node);
|
||||
DECL_IS_MALLOC (gfor_fndecl_internal_realloc) = 1;
|
||||
|
||||
gfor_fndecl_allocate =
|
||||
gfc_build_library_function_decl (get_identifier (PREFIX("allocate")),
|
||||
|
@ -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.
|
||||
|
@ -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 */
|
||||
|
@ -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,17 +93,43 @@ 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)
|
||||
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)
|
||||
{
|
||||
@ -142,30 +148,6 @@ allocate_size (size_t size, GFC_INTEGER_4 * stat)
|
||||
return newmem;
|
||||
}
|
||||
|
||||
extern void *allocate (index_type, GFC_INTEGER_4 *);
|
||||
export_proto(allocate);
|
||||
|
||||
void *
|
||||
allocate (index_type size, GFC_INTEGER_4 * stat)
|
||||
{
|
||||
#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
|
||||
return allocate_size ((size_t) size, stat);
|
||||
}
|
||||
|
||||
/* 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. */
|
||||
|
Loading…
Reference in New Issue
Block a user