Re: [spice-common 1/3] Update verify.h to latest version

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

 



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




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]     [Monitors]