svn commit: r240850 - head/lib/libstand

Konstantin Belousov kostikbel at gmail.com
Mon Sep 24 09:14:30 UTC 2012


On Mon, Sep 24, 2012 at 09:47:45AM +0100, David Chisnall wrote:
> On 23 Sep 2012, at 20:27, Garrett Cooper wrote:
> 
> >    +1. free(3) should silently ignore NULL parameters passed into it.
> 
> Indeed.  The C standard's description for free() states that:
> 
> > If ptr is a null pointer, no action occurs.
> 
> This means that a standards-compilant compiler is entirely at liberty
> to elide these checks (not sure if GCC or LLVM does, but both have
> optimisation passes that optimise based on assumptions about standard
> library functions, although they may not run when compiled in a
> freestanding environment).
>
In this specific case your note is irrelevant, since libstand free()
is not a function at all. Would you look at the code, you note that
free() is the macro calling the function Free().

Indeed, in freestanding environment conforming compiler is denied to
specially process free().

> The only reasons for a NULL check before free() should be:
> 
> - Sanity checking (i.e. this pointer is never meant to be NULL, assert that it isnt)
> - Recursive cleanup (don't dereference this pointer to clean up its elements if it is NULL)

- Non-standard free() which does not understand NULL.

> 
> David
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 196 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/svn-src-head/attachments/20120924/0d2ad70d/attachment.pgp


More information about the svn-src-head mailing list