Introduce static_assert
We are going to use static_assert provided by <assert.h> or, if it doesn't work, our cheap imitation that doesn't display the message specified as the second argument of static_assert. * configure.ac (AC_CACHE_CHECK): Check for static_assert in <assert.h>, define HAVE_STATIC_ASSERT if it is available. * static_assert.h: New file. * Makefile.am (strace_SOURCES): Add it.
This commit is contained in:
parent
074f49451c
commit
a781408bd4
@ -303,6 +303,7 @@ strace_SOURCES = \
|
||||
stat64.c \
|
||||
statfs.c \
|
||||
statfs.h \
|
||||
static_assert.h \
|
||||
statx.c \
|
||||
statx.h \
|
||||
strace.c \
|
||||
|
10
configure.ac
10
configure.ac
@ -803,6 +803,16 @@ if test "x$st_cv_have_program_invocation_name" = xyes; then
|
||||
[Define to 1 if the system provides program_invocation_name variable])
|
||||
fi
|
||||
|
||||
AC_CACHE_CHECK([for static_assert], [st_cv_have_static_assert],
|
||||
[AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <assert.h>]],
|
||||
[[static_assert(1,"")]])],
|
||||
[st_cv_have_static_assert=yes],
|
||||
[st_cv_have_static_assert=no])])
|
||||
if test "x$st_cv_have_static_assert" = xyes; then
|
||||
AC_DEFINE([HAVE_STATIC_ASSERT], [1],
|
||||
[Define to 1 if the system provides static_assert])
|
||||
fi
|
||||
|
||||
AC_CHECK_LIB([dl], [dladdr], [dl_LIBS='-ldl'], [dl_LIBS=])
|
||||
if test "x$ac_cv_lib_dl_dladdr" = xyes; then
|
||||
AC_DEFINE([HAVE_DLADDR], [1], [Define to 1 if the system provides dladdr])
|
||||
|
40
static_assert.h
Executable file
40
static_assert.h
Executable file
@ -0,0 +1,40 @@
|
||||
/*
|
||||
* Copyright (c) 2018 Dmitry V. Levin <ldv@altlinux.org>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef STRACE_STATIC_ASSERT_H
|
||||
#define STRACE_STATIC_ASSERT_H
|
||||
|
||||
#include "assert.h"
|
||||
|
||||
#ifndef HAVE_STATIC_ASSERT
|
||||
|
||||
# define static_assert(expr, message) \
|
||||
extern int (*strace_static_assert(int))[sizeof(int[2 * !!(expr) - 1])]
|
||||
|
||||
#endif
|
||||
|
||||
#endif /* !STRACE_STATIC_ASSERT_H */
|
Loading…
x
Reference in New Issue
Block a user