/* Generated by ./xlat/gen.sh from ./xlat/semctl_flags.in; do not edit. */

#include "gcc_compat.h"
#include "static_assert.h"

#if defined(IPC_RMID) || (defined(HAVE_DECL_IPC_RMID) && HAVE_DECL_IPC_RMID)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IPC_RMID) == (0), "IPC_RMID != 0");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IPC_RMID 0
#endif
#if defined(IPC_SET) || (defined(HAVE_DECL_IPC_SET) && HAVE_DECL_IPC_SET)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IPC_SET) == (1), "IPC_SET != 1");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IPC_SET 1
#endif
#if defined(IPC_STAT) || (defined(HAVE_DECL_IPC_STAT) && HAVE_DECL_IPC_STAT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IPC_STAT) == (2), "IPC_STAT != 2");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IPC_STAT 2
#endif
#if defined(IPC_INFO) || (defined(HAVE_DECL_IPC_INFO) && HAVE_DECL_IPC_INFO)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IPC_INFO) == (3), "IPC_INFO != 3");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IPC_INFO 3
#endif
#if defined(GETPID) || (defined(HAVE_DECL_GETPID) && HAVE_DECL_GETPID)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((GETPID) == (11), "GETPID != 11");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define GETPID 11
#endif
#if defined(GETVAL) || (defined(HAVE_DECL_GETVAL) && HAVE_DECL_GETVAL)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((GETVAL) == (12), "GETVAL != 12");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define GETVAL 12
#endif
#if defined(GETALL) || (defined(HAVE_DECL_GETALL) && HAVE_DECL_GETALL)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((GETALL) == (13), "GETALL != 13");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define GETALL 13
#endif
#if defined(GETNCNT) || (defined(HAVE_DECL_GETNCNT) && HAVE_DECL_GETNCNT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((GETNCNT) == (14), "GETNCNT != 14");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define GETNCNT 14
#endif
#if defined(GETZCNT) || (defined(HAVE_DECL_GETZCNT) && HAVE_DECL_GETZCNT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((GETZCNT) == (15), "GETZCNT != 15");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define GETZCNT 15
#endif
#if defined(SETVAL) || (defined(HAVE_DECL_SETVAL) && HAVE_DECL_SETVAL)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((SETVAL) == (16), "SETVAL != 16");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define SETVAL 16
#endif
#if defined(SETALL) || (defined(HAVE_DECL_SETALL) && HAVE_DECL_SETALL)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((SETALL) == (17), "SETALL != 17");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define SETALL 17
#endif
#if defined(SEM_STAT) || (defined(HAVE_DECL_SEM_STAT) && HAVE_DECL_SEM_STAT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((SEM_STAT) == (18), "SEM_STAT != 18");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define SEM_STAT 18
#endif
#if defined(SEM_INFO) || (defined(HAVE_DECL_SEM_INFO) && HAVE_DECL_SEM_INFO)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((SEM_INFO) == (19), "SEM_INFO != 19");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define SEM_INFO 19
#endif
#if defined(SEM_STAT_ANY) || (defined(HAVE_DECL_SEM_STAT_ANY) && HAVE_DECL_SEM_STAT_ANY)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((SEM_STAT_ANY) == (20), "SEM_STAT_ANY != 20");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define SEM_STAT_ANY 20
#endif

#ifndef XLAT_MACROS_ONLY

# ifdef IN_MPERS

#  error static const struct xlat semctl_flags in mpers mode

# else

static
const struct xlat semctl_flags[] = {

 XLAT(IPC_RMID),
 XLAT(IPC_SET),
 XLAT(IPC_STAT),
 XLAT(IPC_INFO),
 XLAT(GETPID),
 XLAT(GETVAL),
 XLAT(GETALL),
 XLAT(GETNCNT),
 XLAT(GETZCNT),
 XLAT(SETVAL),
 XLAT(SETALL),
 XLAT(SEM_STAT),
 XLAT(SEM_INFO),
 XLAT(SEM_STAT_ANY),
 XLAT_END
};

# endif /* !IN_MPERS */

#endif /* !XLAT_MACROS_ONLY */
