/* Generated by ./xlat/gen.sh from ./xlat/shmctl_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(SHM_LOCK) || (defined(HAVE_DECL_SHM_LOCK) && HAVE_DECL_SHM_LOCK)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((SHM_LOCK) == (11), "SHM_LOCK != 11");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define SHM_LOCK 11
#endif
#if defined(SHM_UNLOCK) || (defined(HAVE_DECL_SHM_UNLOCK) && HAVE_DECL_SHM_UNLOCK)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((SHM_UNLOCK) == (12), "SHM_UNLOCK != 12");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define SHM_UNLOCK 12
#endif
#if defined(SHM_STAT) || (defined(HAVE_DECL_SHM_STAT) && HAVE_DECL_SHM_STAT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((SHM_STAT) == (13), "SHM_STAT != 13");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define SHM_STAT 13
#endif
#if defined(SHM_INFO) || (defined(HAVE_DECL_SHM_INFO) && HAVE_DECL_SHM_INFO)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((SHM_INFO) == (14), "SHM_INFO != 14");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define SHM_INFO 14
#endif
#if defined(SHM_STAT_ANY) || (defined(HAVE_DECL_SHM_STAT_ANY) && HAVE_DECL_SHM_STAT_ANY)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((SHM_STAT_ANY) == (15), "SHM_STAT_ANY != 15");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define SHM_STAT_ANY 15
#endif

#ifndef XLAT_MACROS_ONLY

# ifdef IN_MPERS

extern const struct xlat shmctl_flags[];

# else

#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
static
#  endif
const struct xlat shmctl_flags[] = {

 XLAT(IPC_RMID),
 XLAT(IPC_SET),
 XLAT(IPC_STAT),
 XLAT(IPC_INFO),
 XLAT(SHM_LOCK),
 XLAT(SHM_UNLOCK),
 XLAT(SHM_STAT),
 XLAT(SHM_INFO),
 XLAT(SHM_STAT_ANY),
 XLAT_END
};

# endif /* !IN_MPERS */

#endif /* !XLAT_MACROS_ONLY */
