Can realloc be marked as a mallloc-like function?
Richard Guenther
richard.guenther@gmail.com
Sun Jul 15 19:52:00 GMT 2007
On 7/14/07, H.J. Lu <hjl@lucon.org> wrote:
> This patch
>
> http://gcc.gnu.org/ml/gcc-patches/2007-07/msg00165.html
>
> causes the regression:
>
> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32748
>
> The only relevant change is
>
> Index: gcc/fortran/trans-decl.c
> ===================================================================
> --- gcc/fortran/trans-decl.c (revision 126214)
> +++ gcc/fortran/trans-decl.c (working copy)
> @@ -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")),
>
> In calls.c, there are comments:
>
> /* The return value from a malloc-like function can not alias
> anything else. */
>
> It looks like gcc assumes a functon marked with DECL_IS_MALLOC won't
> return an address which can alias something else. But it isn't true
> for realloc. Now, the qestions are
>
> 1. Can gcc make such an assumption?
No, it can't. The returned memory may alias the original memory.
> 2. Can realloc be marked as DECL_IS_MALLOC.
... with DECL_IS_MALLOC the following
int *p;
p = malloc (4);
*p = 0;
p = realloc (p, 4);
*p = 1;
will have VOPs that do not prevent re-ordering of the two stores.
> BTW, glibc also marks realloc with __attribute_malloc__.
Which is wrong as well.
Richard.
More information about the Fortran
mailing list