[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH 14/19] libxl: Get compiler to warn about gc_opt==NULL



On Wed, 2012-06-13 at 14:08 +0100, Ian Campbell wrote:
> On Fri, 2012-06-08 at 18:34 +0100, Ian Jackson wrote:
> > Since it used to be legal to pass gc_opt==NULL, and there are various
> > patches floating about and under developmetn which do so, add a
> 
>                                    development
> 
> > compiler annotation which makes the build fail when that is done.
> > 
> > This turns a runtime crash into a build failure, and should ensure
> > that we don't accidentally commit a broken combination of patches.
> > 
> > This is something of an annoying approach because it adds a macro
> > invocation to the RHS of every declaration of a function taking a
> > gc_opt.  So it should be reverted after Xen 4.2rc1.
> 
> This patch will itself break the build until a subsequent patch, won't
> it? Shuffle it afterwards?

Nevermind, I accidentally skipped #13...

> 
> > Signed-off-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
> 
> Wherever it ends up in the sequence:
> Acked-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
> 
> > ---
> >  tools/libxl/libxl_internal.h |   21 +++++++++++++--------
> >  1 files changed, 13 insertions(+), 8 deletions(-)
> > 
> > diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h
> > index e69482c..8635764 100644
> > --- a/tools/libxl/libxl_internal.h
> > +++ b/tools/libxl/libxl_internal.h
> > @@ -453,28 +453,33 @@ static inline libxl_ctx *libxl__gc_owner(libxl__gc 
> > *gc)
> >   * psuedo-gc.
> >   */
> >  /* register ptr in gc for free on exit from outermost libxl callframe. */
> > -_hidden void libxl__ptr_add(libxl__gc *gc_opt, void *ptr /* may be NULL 
> > */);
> > +
> > +#define NN1 __attribute__((nonnull(1)))
> > + /* It used to be legal to pass NULL for gc_opt.  Get the compiler to
> > +  * warn about this if any slip through. */
> > +
> > +_hidden void libxl__ptr_add(libxl__gc *gc_opt, void *ptr /* may be NULL 
> > */) NN1;
> >  /* if this is the outermost libxl callframe then free all pointers in @gc 
> > */
> >  _hidden void libxl__free_all(libxl__gc *gc);
> >  /* allocate and zero @bytes. (similar to a gc'd malloc(3)+memzero()) */
> > -_hidden void *libxl__zalloc(libxl__gc *gc_opt, int bytes);
> > +_hidden void *libxl__zalloc(libxl__gc *gc_opt, int bytes) NN1;
> >  /* allocate and zero memory for an array of @nmemb members of @size each.
> >   * (similar to a gc'd calloc(3)). */
> > -_hidden void *libxl__calloc(libxl__gc *gc_opt, size_t nmemb, size_t size);
> > +_hidden void *libxl__calloc(libxl__gc *gc_opt, size_t nmemb, size_t size) 
> > NN1;
> >  /* change the size of the memory block pointed to by @ptr to @new_size 
> > bytes.
> >   * unlike other allocation functions here any additional space between the
> >   * oldsize and @new_size is not initialised (similar to a gc'd 
> > realloc(3)). */
> > -_hidden void *libxl__realloc(libxl__gc *gc_opt, void *ptr, size_t 
> > new_size);
> > +_hidden void *libxl__realloc(libxl__gc *gc_opt, void *ptr, size_t 
> > new_size) NN1;
> >  /* print @fmt into an allocated string large enoughto contain the result.
> >   * (similar to gc'd asprintf(3)). */
> > -_hidden char *libxl__sprintf(libxl__gc *gc_opt, const char *fmt, ...) 
> > PRINTF_ATTRIBUTE(2, 3);
> > +_hidden char *libxl__sprintf(libxl__gc *gc_opt, const char *fmt, ...) 
> > PRINTF_ATTRIBUTE(2, 3) NN1;
> >  /* duplicate the string @c (similar to a gc'd strdup(3)). */
> > -_hidden char *libxl__strdup(libxl__gc *gc_opt, const char *c);
> > +_hidden char *libxl__strdup(libxl__gc *gc_opt, const char *c) NN1;
> >  /* duplicate at most @n bytes of string @c (similar to a gc'd strndup(3)). 
> > */
> > -_hidden char *libxl__strndup(libxl__gc *gc_opt, const char *c, size_t n);
> > +_hidden char *libxl__strndup(libxl__gc *gc_opt, const char *c, size_t n) 
> > NN1;
> >  /* strip the last path component from @s and return as a newly allocated
> >   * string. (similar to a gc'd dirname(3)). */
> > -_hidden char *libxl__dirname(libxl__gc *gc_opt, const char *s);
> > +_hidden char *libxl__dirname(libxl__gc *gc_opt, const char *s) NN1;
> >  
> >  /* Each of these logs errors and returns a libxl error code.
> >   * They do not mind if path is already removed.
> 



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.