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

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

#if defined(SEMOP) || (defined(HAVE_DECL_SEMOP) && HAVE_DECL_SEMOP)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((SEMOP) == (1), "SEMOP != 1");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define SEMOP 1
#endif
#if defined(SEMGET) || (defined(HAVE_DECL_SEMGET) && HAVE_DECL_SEMGET)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((SEMGET) == (2), "SEMGET != 2");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define SEMGET 2
#endif
#if defined(SEMCTL) || (defined(HAVE_DECL_SEMCTL) && HAVE_DECL_SEMCTL)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((SEMCTL) == (3), "SEMCTL != 3");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define SEMCTL 3
#endif
#if defined(SEMTIMEDOP) || (defined(HAVE_DECL_SEMTIMEDOP) && HAVE_DECL_SEMTIMEDOP)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((SEMTIMEDOP) == (4), "SEMTIMEDOP != 4");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define SEMTIMEDOP 4
#endif
#if defined(MSGSND) || (defined(HAVE_DECL_MSGSND) && HAVE_DECL_MSGSND)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((MSGSND) == (11), "MSGSND != 11");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define MSGSND 11
#endif
#if defined(MSGRCV) || (defined(HAVE_DECL_MSGRCV) && HAVE_DECL_MSGRCV)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((MSGRCV) == (12), "MSGRCV != 12");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define MSGRCV 12
#endif
#if defined(MSGGET) || (defined(HAVE_DECL_MSGGET) && HAVE_DECL_MSGGET)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((MSGGET) == (13), "MSGGET != 13");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define MSGGET 13
#endif
#if defined(MSGCTL) || (defined(HAVE_DECL_MSGCTL) && HAVE_DECL_MSGCTL)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((MSGCTL) == (14), "MSGCTL != 14");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define MSGCTL 14
#endif
#if defined(SHMAT) || (defined(HAVE_DECL_SHMAT) && HAVE_DECL_SHMAT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((SHMAT) == (21), "SHMAT != 21");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define SHMAT 21
#endif
#if defined(SHMDT) || (defined(HAVE_DECL_SHMDT) && HAVE_DECL_SHMDT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((SHMDT) == (22), "SHMDT != 22");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define SHMDT 22
#endif
#if defined(SHMGET) || (defined(HAVE_DECL_SHMGET) && HAVE_DECL_SHMGET)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((SHMGET) == (23), "SHMGET != 23");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define SHMGET 23
#endif
#if defined(SHMCTL) || (defined(HAVE_DECL_SHMCTL) && HAVE_DECL_SHMCTL)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((SHMCTL) == (24), "SHMCTL != 24");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define SHMCTL 24
#endif

#ifndef XLAT_MACROS_ONLY

# ifdef IN_MPERS

#  error static const struct xlat ipccalls in mpers mode

# else

static
const struct xlat ipccalls[] = {
 XLAT(SEMOP),
 XLAT(SEMGET),
 XLAT(SEMCTL),
 XLAT(SEMTIMEDOP),
 XLAT(MSGSND),
 XLAT(MSGRCV),
 XLAT(MSGGET),
 XLAT(MSGCTL),
 XLAT(SHMAT),
 XLAT(SHMDT),
 XLAT(SHMGET),
 XLAT(SHMCTL),
 XLAT_END
};

# endif /* !IN_MPERS */

#endif /* !XLAT_MACROS_ONLY */
