ack ----- Original Message ----- > --- > common/verify.h | 144 > ++++++++++++++++++++++++++++++++++---------------------- > 1 file changed, 89 insertions(+), 55 deletions(-) > > diff --git a/common/verify.h b/common/verify.h > index 8445e3d..2f43837 100644 > --- a/common/verify.h > +++ b/common/verify.h > @@ -1,24 +1,24 @@ > /* Compile-time assert-like macros. > > - Copyright (C) 2005-2006, 2009-2013 Free Software Foundation, Inc. > + Copyright (C) 2005-2006, 2009-2016 Free Software Foundation, Inc. > > This program is free software: you can redistribute it and/or modify > - it under the terms of the GNU Lesser General Public License as published > by > - the Free Software Foundation; either version 2.1 of the License, or > + it under the terms of the GNU General Public License as published by > + the Free Software Foundation; either version 3 of the License, or > (at your option) any later version. > > This program is distributed in the hope that it will be useful, > but WITHOUT ANY WARRANTY; without even the implied warranty of > MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > - GNU Lesser General Public License for more details. > + GNU General Public License for more details. > > - You should have received a copy of the GNU Lesser General Public License > + You should have received a copy of the GNU General Public License > along with this program. If not, see <http://www.gnu.org/licenses/>. */ > > /* Written by Paul Eggert, Bruno Haible, and Jim Meyering. */ > > #ifndef _GL_VERIFY_H > -# define _GL_VERIFY_H > +#define _GL_VERIFY_H > > > /* Define _GL_HAVE__STATIC_ASSERT to 1 if _Static_assert works as per C11. > @@ -31,14 +31,24 @@ > Use this only with GCC. If we were willing to slow 'configure' > down we could also use it with other compilers, but since this > affects only the quality of diagnostics, why bother? */ > -# if (4 < __GNUC__ || (__GNUC__ == 4 && 6 <= __GNUC_MINOR__)) && !defined > __cplusplus > -# define _GL_HAVE__STATIC_ASSERT 1 > -# endif > +#if (4 < __GNUC__ + (6 <= __GNUC_MINOR__) \ > + && (201112L <= __STDC_VERSION__ || !defined __STRICT_ANSI__) \ > + && !defined __cplusplus) > +# define _GL_HAVE__STATIC_ASSERT 1 > +#endif > /* The condition (99 < __GNUC__) is temporary, until we know about the > first G++ release that supports static_assert. */ > -# if (99 < __GNUC__) && defined __cplusplus > -# define _GL_HAVE_STATIC_ASSERT 1 > -# endif > +#if (99 < __GNUC__) && defined __cplusplus > +# define _GL_HAVE_STATIC_ASSERT 1 > +#endif > + > +/* FreeBSD 9.1 <sys/cdefs.h>, included by <stddef.h> and lots of other > + system headers, defines a conflicting _Static_assert that is no > + better than ours; override it. */ > +#ifndef _GL_HAVE_STATIC_ASSERT > +# include <stddef.h> > +# undef _Static_assert > +#endif > > /* Each of these macros verifies that its argument R is nonzero. To > be portable, R should be an integer constant expression. Unlike > @@ -141,50 +151,50 @@ > Use a template type to work around the problem. */ > > /* Concatenate two preprocessor tokens. */ > -# define _GL_CONCAT(x, y) _GL_CONCAT0 (x, y) > -# define _GL_CONCAT0(x, y) x##y > +#define _GL_CONCAT(x, y) _GL_CONCAT0 (x, y) > +#define _GL_CONCAT0(x, y) x##y > > /* _GL_COUNTER is an integer, preferably one that changes each time we > use it. Use __COUNTER__ if it works, falling back on __LINE__ > otherwise. __LINE__ isn't perfect, but it's better than a > constant. */ > -# if defined __COUNTER__ && __COUNTER__ != __COUNTER__ > -# define _GL_COUNTER __COUNTER__ > -# else > -# define _GL_COUNTER __LINE__ > -# endif > +#if defined __COUNTER__ && __COUNTER__ != __COUNTER__ > +# define _GL_COUNTER __COUNTER__ > +#else > +# define _GL_COUNTER __LINE__ > +#endif > > /* Generate a symbol with the given prefix, making it unique if > possible. */ > -# define _GL_GENSYM(prefix) _GL_CONCAT (prefix, _GL_COUNTER) > +#define _GL_GENSYM(prefix) _GL_CONCAT (prefix, _GL_COUNTER) > > /* Verify requirement R at compile-time, as an integer constant expression > that returns 1. If R is false, fail at compile-time, preferably > with a diagnostic that includes the string-literal DIAGNOSTIC. */ > > -# define _GL_VERIFY_TRUE(R, DIAGNOSTIC) \ > - (!!sizeof (_GL_VERIFY_TYPE (R, DIAGNOSTIC))) > +#define _GL_VERIFY_TRUE(R, DIAGNOSTIC) \ > + (!!sizeof (_GL_VERIFY_TYPE (R, DIAGNOSTIC))) > > -# ifdef __cplusplus > -# if !GNULIB_defined_struct__gl_verify_type > +#ifdef __cplusplus > +# if !GNULIB_defined_struct__gl_verify_type > template <int w> > struct _gl_verify_type { > unsigned int _gl_verify_error_if_negative: w; > }; > -# define GNULIB_defined_struct__gl_verify_type 1 > -# endif > -# define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \ > +# define GNULIB_defined_struct__gl_verify_type 1 > +# endif > +# define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \ > _gl_verify_type<(R) ? 1 : -1> > -# elif defined _GL_HAVE__STATIC_ASSERT > -# define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \ > - struct { \ > - _Static_assert (R, DIAGNOSTIC); \ > - int _gl_dummy; \ > - } > -# else > -# define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \ > - struct { unsigned int _gl_verify_error_if_negative: (R) ? 1 : -1; } > -# endif > +#elif defined _GL_HAVE__STATIC_ASSERT > +# define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \ > + struct { \ > + _Static_assert (R, DIAGNOSTIC); \ > + int _gl_dummy; \ > + } > +#else > +# define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \ > + struct { unsigned int _gl_verify_error_if_negative: (R) ? 1 : -1; } > +#endif > > /* Verify requirement R at compile-time, as a declaration without a > trailing ';'. If R is false, fail at compile-time, preferably > @@ -193,23 +203,23 @@ template <int w> > Unfortunately, unlike C11, this implementation must appear as an > ordinary declaration, and cannot appear inside struct { ... }. */ > > -# ifdef _GL_HAVE__STATIC_ASSERT > -# define _GL_VERIFY _Static_assert > -# else > -# define _GL_VERIFY(R, DIAGNOSTIC) \ > - extern int (*_GL_GENSYM (_gl_verify_function) (void)) \ > - [_GL_VERIFY_TRUE (R, DIAGNOSTIC)] > -# endif > +#ifdef _GL_HAVE__STATIC_ASSERT > +# define _GL_VERIFY _Static_assert > +#else > +# define _GL_VERIFY(R, DIAGNOSTIC) \ > + extern int (*_GL_GENSYM (_gl_verify_function) (void)) \ > + [_GL_VERIFY_TRUE (R, DIAGNOSTIC)] > +#endif > > /* _GL_STATIC_ASSERT_H is defined if this code is copied into assert.h. */ > -# ifdef _GL_STATIC_ASSERT_H > -# if !defined _GL_HAVE__STATIC_ASSERT && !defined _Static_assert > -# define _Static_assert(R, DIAGNOSTIC) _GL_VERIFY (R, DIAGNOSTIC) > -# endif > -# if !defined _GL_HAVE_STATIC_ASSERT && !defined static_assert > -# define static_assert _Static_assert /* C11 requires this #define. */ > -# endif > +#ifdef _GL_STATIC_ASSERT_H > +# if !defined _GL_HAVE__STATIC_ASSERT && !defined _Static_assert > +# define _Static_assert(R, DIAGNOSTIC) _GL_VERIFY (R, DIAGNOSTIC) > # endif > +# if !defined _GL_HAVE_STATIC_ASSERT && !defined static_assert > +# define static_assert _Static_assert /* C11 requires this #define. */ > +# endif > +#endif > > /* @assert.h omit start@ */ > > @@ -227,18 +237,42 @@ template <int w> > > verify_true is obsolescent; please use verify_expr instead. */ > > -# define verify_true(R) _GL_VERIFY_TRUE (R, "verify_true (" #R ")") > +#define verify_true(R) _GL_VERIFY_TRUE (R, "verify_true (" #R ")") > > /* Verify requirement R at compile-time. Return the value of the > expression E. */ > > -# define verify_expr(R, E) \ > - (_GL_VERIFY_TRUE (R, "verify_expr (" #R ", " #E ")") ? (E) : (E)) > +#define verify_expr(R, E) \ > + (_GL_VERIFY_TRUE (R, "verify_expr (" #R ", " #E ")") ? (E) : (E)) > > /* Verify requirement R at compile-time, as a declaration without a > trailing ';'. */ > > -# define verify(R) _GL_VERIFY (R, "verify (" #R ")") > +#define verify(R) _GL_VERIFY (R, "verify (" #R ")") > + > +#ifndef __has_builtin > +# define __has_builtin(x) 0 > +#endif > + > +/* Assume that R always holds. This lets the compiler optimize > + accordingly. R should not have side-effects; it may or may not be > + evaluated. Behavior is undefined if R is false. */ > + > +#if (__has_builtin (__builtin_unreachable) \ > + || 4 < __GNUC__ + (5 <= __GNUC_MINOR__)) > +# define assume(R) ((R) ? (void) 0 : __builtin_unreachable ()) > +#elif 1200 <= _MSC_VER > +# define assume(R) __assume (R) > +#elif (defined lint \ > + && (__has_builtin (__builtin_trap) \ > + || 3 < __GNUC__ + (3 < __GNUC_MINOR__ + (4 <= > __GNUC_PATCHLEVEL__)))) > + /* Doing it this way helps various packages when configured with > + --enable-gcc-warnings, which compiles with -Dlint. It's nicer > + when 'assume' silences warnings even with older GCCs. */ > +# define assume(R) ((R) ? (void) 0 : __builtin_trap ()) > +#else > +# define assume(R) ((void) (0 && (R))) > +#endif > > /* @assert.h omit end@ */ > > -- > 2.7.4 > > _______________________________________________ > Spice-devel mailing list > Spice-devel@xxxxxxxxxxxxxxxxxxxxx > https://lists.freedesktop.org/mailman/listinfo/spice-devel > _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel