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

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

#if defined(KEY_SPEC_THREAD_KEYRING) || (defined(HAVE_DECL_KEY_SPEC_THREAD_KEYRING) && HAVE_DECL_KEY_SPEC_THREAD_KEYRING)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((KEY_SPEC_THREAD_KEYRING) == (-1), "KEY_SPEC_THREAD_KEYRING != -1");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define KEY_SPEC_THREAD_KEYRING -1
#endif
#if defined(KEY_SPEC_PROCESS_KEYRING) || (defined(HAVE_DECL_KEY_SPEC_PROCESS_KEYRING) && HAVE_DECL_KEY_SPEC_PROCESS_KEYRING)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((KEY_SPEC_PROCESS_KEYRING) == (-2), "KEY_SPEC_PROCESS_KEYRING != -2");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define KEY_SPEC_PROCESS_KEYRING -2
#endif
#if defined(KEY_SPEC_SESSION_KEYRING) || (defined(HAVE_DECL_KEY_SPEC_SESSION_KEYRING) && HAVE_DECL_KEY_SPEC_SESSION_KEYRING)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((KEY_SPEC_SESSION_KEYRING) == (-3), "KEY_SPEC_SESSION_KEYRING != -3");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define KEY_SPEC_SESSION_KEYRING -3
#endif
#if defined(KEY_SPEC_USER_KEYRING) || (defined(HAVE_DECL_KEY_SPEC_USER_KEYRING) && HAVE_DECL_KEY_SPEC_USER_KEYRING)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((KEY_SPEC_USER_KEYRING) == (-4), "KEY_SPEC_USER_KEYRING != -4");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define KEY_SPEC_USER_KEYRING -4
#endif
#if defined(KEY_SPEC_USER_SESSION_KEYRING) || (defined(HAVE_DECL_KEY_SPEC_USER_SESSION_KEYRING) && HAVE_DECL_KEY_SPEC_USER_SESSION_KEYRING)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((KEY_SPEC_USER_SESSION_KEYRING) == (-5), "KEY_SPEC_USER_SESSION_KEYRING != -5");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define KEY_SPEC_USER_SESSION_KEYRING -5
#endif
#if defined(KEY_SPEC_GROUP_KEYRING) || (defined(HAVE_DECL_KEY_SPEC_GROUP_KEYRING) && HAVE_DECL_KEY_SPEC_GROUP_KEYRING)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((KEY_SPEC_GROUP_KEYRING) == (-6), "KEY_SPEC_GROUP_KEYRING != -6");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define KEY_SPEC_GROUP_KEYRING -6
#endif
#if defined(KEY_SPEC_REQKEY_AUTH_KEY) || (defined(HAVE_DECL_KEY_SPEC_REQKEY_AUTH_KEY) && HAVE_DECL_KEY_SPEC_REQKEY_AUTH_KEY)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((KEY_SPEC_REQKEY_AUTH_KEY) == (-7), "KEY_SPEC_REQKEY_AUTH_KEY != -7");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define KEY_SPEC_REQKEY_AUTH_KEY -7
#endif
#if defined(KEY_SPEC_REQUESTOR_KEYRING) || (defined(HAVE_DECL_KEY_SPEC_REQUESTOR_KEYRING) && HAVE_DECL_KEY_SPEC_REQUESTOR_KEYRING)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((KEY_SPEC_REQUESTOR_KEYRING) == (-8), "KEY_SPEC_REQUESTOR_KEYRING != -8");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define KEY_SPEC_REQUESTOR_KEYRING -8
#endif

#ifndef XLAT_MACROS_ONLY

# ifdef IN_MPERS

#  error static const struct xlat key_spec in mpers mode

# else

static
const struct xlat key_spec[] = {
 XLAT_TYPE(int, KEY_SPEC_THREAD_KEYRING),
 XLAT_TYPE(int, KEY_SPEC_PROCESS_KEYRING),
 XLAT_TYPE(int, KEY_SPEC_SESSION_KEYRING),
 XLAT_TYPE(int, KEY_SPEC_USER_KEYRING),
 XLAT_TYPE(int, KEY_SPEC_USER_SESSION_KEYRING),
 XLAT_TYPE(int, KEY_SPEC_GROUP_KEYRING),
 XLAT_TYPE(int, KEY_SPEC_REQKEY_AUTH_KEY),
 XLAT_TYPE(int, KEY_SPEC_REQUESTOR_KEYRING),
 XLAT_END
};

# endif /* !IN_MPERS */

#endif /* !XLAT_MACROS_ONLY */
