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

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

#if defined(POLLIN) || (defined(HAVE_DECL_POLLIN) && HAVE_DECL_POLLIN)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((POLLIN) == (0x0001), "POLLIN != 0x0001");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define POLLIN 0x0001
#endif
#if defined(POLLPRI) || (defined(HAVE_DECL_POLLPRI) && HAVE_DECL_POLLPRI)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((POLLPRI) == (0x0002), "POLLPRI != 0x0002");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define POLLPRI 0x0002
#endif
#if defined(POLLOUT) || (defined(HAVE_DECL_POLLOUT) && HAVE_DECL_POLLOUT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((POLLOUT) == (0x0004), "POLLOUT != 0x0004");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define POLLOUT 0x0004
#endif
#if defined(POLLRDNORM) || (defined(HAVE_DECL_POLLRDNORM) && HAVE_DECL_POLLRDNORM)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((POLLRDNORM) == (0x0040), "POLLRDNORM != 0x0040");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define POLLRDNORM 0x0040
#endif
#if defined(POLLRDBAND) || (defined(HAVE_DECL_POLLRDBAND) && HAVE_DECL_POLLRDBAND)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((POLLRDBAND) == (0x0080), "POLLRDBAND != 0x0080");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define POLLRDBAND 0x0080
#endif
#if defined(POLLERR) || (defined(HAVE_DECL_POLLERR) && HAVE_DECL_POLLERR)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((POLLERR) == (0x0008), "POLLERR != 0x0008");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define POLLERR 0x0008
#endif
#if defined(POLLHUP) || (defined(HAVE_DECL_POLLHUP) && HAVE_DECL_POLLHUP)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((POLLHUP) == (0x0010), "POLLHUP != 0x0010");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define POLLHUP 0x0010
#endif
#if defined(POLLNVAL) || (defined(HAVE_DECL_POLLNVAL) && HAVE_DECL_POLLNVAL)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((POLLNVAL) == (0x0020), "POLLNVAL != 0x0020");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define POLLNVAL 0x0020
#endif
#if defined(POLL_BUSY_LOOP) || (defined(HAVE_DECL_POLL_BUSY_LOOP) && HAVE_DECL_POLL_BUSY_LOOP)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((POLL_BUSY_LOOP) == (0x8000), "POLL_BUSY_LOOP != 0x8000");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define POLL_BUSY_LOOP 0x8000
#endif

#ifndef XLAT_MACROS_ONLY

# ifdef IN_MPERS

#  error static const struct xlat pollflags in mpers mode

# else

static
const struct xlat pollflags[] = {
 XLAT(POLLIN),
 XLAT(POLLPRI),
 XLAT(POLLOUT),
 XLAT(POLLRDNORM),
#if defined(POLLWRNORM) || (defined(HAVE_DECL_POLLWRNORM) && HAVE_DECL_POLLWRNORM)
  XLAT(POLLWRNORM),
#endif
 XLAT(POLLRDBAND),
#if defined(POLLWRBAND) || (defined(HAVE_DECL_POLLWRBAND) && HAVE_DECL_POLLWRBAND)
  XLAT(POLLWRBAND),
#endif
 XLAT(POLLERR),
 XLAT(POLLHUP),
 XLAT(POLLNVAL),
#if defined(POLLMSG) || (defined(HAVE_DECL_POLLMSG) && HAVE_DECL_POLLMSG)
  XLAT(POLLMSG),
#endif
#if defined(POLLREMOVE) || (defined(HAVE_DECL_POLLREMOVE) && HAVE_DECL_POLLREMOVE)
  XLAT(POLLREMOVE),
#endif
#if defined(POLLRDHUP) || (defined(HAVE_DECL_POLLRDHUP) && HAVE_DECL_POLLRDHUP)
  XLAT(POLLRDHUP),
#endif
 XLAT(POLL_BUSY_LOOP),
 XLAT_END
};

# endif /* !IN_MPERS */

#endif /* !XLAT_MACROS_ONLY */
