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

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

#if defined(MSG_OOB) || (defined(HAVE_DECL_MSG_OOB) && HAVE_DECL_MSG_OOB)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((MSG_OOB) == (0x1), "MSG_OOB != 0x1");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define MSG_OOB 0x1
#endif
#if defined(MSG_PEEK) || (defined(HAVE_DECL_MSG_PEEK) && HAVE_DECL_MSG_PEEK)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((MSG_PEEK) == (0x2), "MSG_PEEK != 0x2");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define MSG_PEEK 0x2
#endif
#if defined(MSG_DONTROUTE) || (defined(HAVE_DECL_MSG_DONTROUTE) && HAVE_DECL_MSG_DONTROUTE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((MSG_DONTROUTE) == (0x4), "MSG_DONTROUTE != 0x4");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define MSG_DONTROUTE 0x4
#endif
#if defined(MSG_CTRUNC) || (defined(HAVE_DECL_MSG_CTRUNC) && HAVE_DECL_MSG_CTRUNC)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((MSG_CTRUNC) == (0x8), "MSG_CTRUNC != 0x8");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define MSG_CTRUNC 0x8
#endif
#if defined(MSG_PROBE) || (defined(HAVE_DECL_MSG_PROBE) && HAVE_DECL_MSG_PROBE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((MSG_PROBE) == (0x10), "MSG_PROBE != 0x10");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define MSG_PROBE 0x10
#endif
#if defined(MSG_TRUNC) || (defined(HAVE_DECL_MSG_TRUNC) && HAVE_DECL_MSG_TRUNC)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((MSG_TRUNC) == (0x20), "MSG_TRUNC != 0x20");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define MSG_TRUNC 0x20
#endif
#if defined(MSG_DONTWAIT) || (defined(HAVE_DECL_MSG_DONTWAIT) && HAVE_DECL_MSG_DONTWAIT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((MSG_DONTWAIT) == (0x40), "MSG_DONTWAIT != 0x40");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define MSG_DONTWAIT 0x40
#endif
#if defined(MSG_EOR) || (defined(HAVE_DECL_MSG_EOR) && HAVE_DECL_MSG_EOR)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((MSG_EOR) == (0x80), "MSG_EOR != 0x80");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define MSG_EOR 0x80
#endif
#if defined(MSG_WAITALL) || (defined(HAVE_DECL_MSG_WAITALL) && HAVE_DECL_MSG_WAITALL)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((MSG_WAITALL) == (0x100), "MSG_WAITALL != 0x100");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define MSG_WAITALL 0x100
#endif
#if defined(MSG_FIN) || (defined(HAVE_DECL_MSG_FIN) && HAVE_DECL_MSG_FIN)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((MSG_FIN) == (0x200), "MSG_FIN != 0x200");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define MSG_FIN 0x200
#endif
#if defined(MSG_SYN) || (defined(HAVE_DECL_MSG_SYN) && HAVE_DECL_MSG_SYN)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((MSG_SYN) == (0x400), "MSG_SYN != 0x400");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define MSG_SYN 0x400
#endif
#if defined(MSG_CONFIRM) || (defined(HAVE_DECL_MSG_CONFIRM) && HAVE_DECL_MSG_CONFIRM)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((MSG_CONFIRM) == (0x800), "MSG_CONFIRM != 0x800");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define MSG_CONFIRM 0x800
#endif
#if defined(MSG_RST) || (defined(HAVE_DECL_MSG_RST) && HAVE_DECL_MSG_RST)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((MSG_RST) == (0x1000), "MSG_RST != 0x1000");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define MSG_RST 0x1000
#endif
#if defined(MSG_ERRQUEUE) || (defined(HAVE_DECL_MSG_ERRQUEUE) && HAVE_DECL_MSG_ERRQUEUE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((MSG_ERRQUEUE) == (0x2000), "MSG_ERRQUEUE != 0x2000");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define MSG_ERRQUEUE 0x2000
#endif
#if defined(MSG_NOSIGNAL) || (defined(HAVE_DECL_MSG_NOSIGNAL) && HAVE_DECL_MSG_NOSIGNAL)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((MSG_NOSIGNAL) == (0x4000), "MSG_NOSIGNAL != 0x4000");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define MSG_NOSIGNAL 0x4000
#endif
#if defined(MSG_MORE) || (defined(HAVE_DECL_MSG_MORE) && HAVE_DECL_MSG_MORE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((MSG_MORE) == (0x8000), "MSG_MORE != 0x8000");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define MSG_MORE 0x8000
#endif
#if defined(MSG_WAITFORONE) || (defined(HAVE_DECL_MSG_WAITFORONE) && HAVE_DECL_MSG_WAITFORONE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((MSG_WAITFORONE) == (0x10000), "MSG_WAITFORONE != 0x10000");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define MSG_WAITFORONE 0x10000
#endif
#if defined(MSG_SENDPAGE_NOTLAST) || (defined(HAVE_DECL_MSG_SENDPAGE_NOTLAST) && HAVE_DECL_MSG_SENDPAGE_NOTLAST)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((MSG_SENDPAGE_NOTLAST) == (0x20000), "MSG_SENDPAGE_NOTLAST != 0x20000");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define MSG_SENDPAGE_NOTLAST 0x20000
#endif
#if defined(MSG_BATCH) || (defined(HAVE_DECL_MSG_BATCH) && HAVE_DECL_MSG_BATCH)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((MSG_BATCH) == (0x40000), "MSG_BATCH != 0x40000");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define MSG_BATCH 0x40000
#endif
#if defined(MSG_NO_SHARED_FRAGS) || (defined(HAVE_DECL_MSG_NO_SHARED_FRAGS) && HAVE_DECL_MSG_NO_SHARED_FRAGS)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((MSG_NO_SHARED_FRAGS) == (0x80000), "MSG_NO_SHARED_FRAGS != 0x80000");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define MSG_NO_SHARED_FRAGS 0x80000
#endif
#if defined(MSG_ZEROCOPY) || (defined(HAVE_DECL_MSG_ZEROCOPY) && HAVE_DECL_MSG_ZEROCOPY)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((MSG_ZEROCOPY) == (0x4000000), "MSG_ZEROCOPY != 0x4000000");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define MSG_ZEROCOPY 0x4000000
#endif
#if defined(MSG_FASTOPEN) || (defined(HAVE_DECL_MSG_FASTOPEN) && HAVE_DECL_MSG_FASTOPEN)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((MSG_FASTOPEN) == (0x20000000), "MSG_FASTOPEN != 0x20000000");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define MSG_FASTOPEN 0x20000000
#endif
#if defined(MSG_CMSG_CLOEXEC) || (defined(HAVE_DECL_MSG_CMSG_CLOEXEC) && HAVE_DECL_MSG_CMSG_CLOEXEC)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((MSG_CMSG_CLOEXEC) == (0x40000000), "MSG_CMSG_CLOEXEC != 0x40000000");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define MSG_CMSG_CLOEXEC 0x40000000
#endif
#ifndef STRACE_WORKAROUND_FOR_MSG_CMSG_COMPAT
# define STRACE_WORKAROUND_FOR_MSG_CMSG_COMPAT
# undef MSG_CMSG_COMPAT
#endif
#if defined(MSG_CMSG_COMPAT) || (defined(HAVE_DECL_MSG_CMSG_COMPAT) && HAVE_DECL_MSG_CMSG_COMPAT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((MSG_CMSG_COMPAT) == (0x80000000), "MSG_CMSG_COMPAT != 0x80000000");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define MSG_CMSG_COMPAT 0x80000000
#endif

#ifndef XLAT_MACROS_ONLY

# ifndef IN_MPERS

const struct xlat msg_flags[] = {
 XLAT(MSG_OOB),
 XLAT(MSG_PEEK),
 XLAT(MSG_DONTROUTE),

 XLAT(MSG_CTRUNC),
 XLAT(MSG_PROBE),
 XLAT(MSG_TRUNC),
 XLAT(MSG_DONTWAIT),
 XLAT(MSG_EOR),
 XLAT(MSG_WAITALL),
 XLAT(MSG_FIN),
 XLAT(MSG_SYN),
 XLAT(MSG_CONFIRM),
 XLAT(MSG_RST),
 XLAT(MSG_ERRQUEUE),
 XLAT(MSG_NOSIGNAL),
 XLAT(MSG_MORE),
 XLAT(MSG_WAITFORONE),
 XLAT(MSG_SENDPAGE_NOTLAST),
 XLAT(MSG_BATCH),
 XLAT(MSG_NO_SHARED_FRAGS),
 XLAT(MSG_ZEROCOPY),

 XLAT(MSG_FASTOPEN),
 XLAT(MSG_CMSG_CLOEXEC),
#ifndef STRACE_WORKAROUND_FOR_MSG_CMSG_COMPAT
# define STRACE_WORKAROUND_FOR_MSG_CMSG_COMPAT
/*
* In Linux, the value of MSG_CMSG_COMPAT depends on CONFIG_COMPAT,
* and libc might want to replicate that behaviour.
*/
# undef MSG_CMSG_COMPAT
#endif
 XLAT(MSG_CMSG_COMPAT),
 XLAT_END
};

# endif /* !IN_MPERS */

#endif /* !XLAT_MACROS_ONLY */
