This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: malloc attributes and realloc


On Thu, Jan 01, 2004 at 05:06:35PM -0500, Jeff Sturm wrote:
> On 1 Jan 2004, Gabriel Dos Reis wrote:
> > | >> Can __attribute__((__malloc__)) safely be used on realloc-type
> > | >> functions?
> > | >
> > | > My non-expert understanding is "no"...
> > | >
> > | >> /* Reallocate memory without fail.  This works like xmalloc.  Note,
> > | >>    realloc type functions are not suitable for attribute malloc since
> > | >>    they may return the same address across multiple calls. */
> > | >
> > | > This comment is misleading.  The pointer address returned by a
> > | > malloc-type
> > | > function isn't significant to alias analysis.
> > |
> > | This isn't true.
> > | It's quite significant, because it means it can't be the same pointer
> > | as before.
> >
> > Well, technically, it could be as hinted by the standard:
> >
> >        [#4] The realloc function  returns  a  pointer  to  the  new
> >        object  (which  may  have the same value as a pointer to the
> >        old object), or a null pointer if the new object  could  not
> >        be allocated.
> 
> So, out of curiosity, what happens in an example like:
> 
> #include <stdlib.h>
> int f(void) {
>   int *p, *q;
>   p = malloc(sizeof(int));
>   *p = 0;
>   q = realloc(p, sizeof(int));
>   if (p == q) {
>     *p = 1;
>     return *q;
>   }
>   return 0;
> }
> 
> Does the alias machinery determine that p,q alias after all?  Or is this
> illegal for some reason?

       [#2] The realloc function deallocates the old object pointed
       to by ptr and returns a pointer to a new object that has the
       size specified by size.

I don't _think_ that you can validly make comparisons to a pointer
after it has been freed.  GCC probably could warn, and would be
justified in warning, for the above case.

-- 
Daniel Jacobowitz
MontaVista Software                         Debian GNU/Linux Developer


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]