#ifndef ATTRIBUTES_H
#define ATTRIBUTES_H

#include "versions.h"

#if !defined(__GNUC__) && !defined(__attribute__)
#define __attribute__(x)
#endif

#define UNUSED       __attribute__((unused))
#define FALLTHROUGH  __attribute__((fallthrough))
#define NORETURN     __attribute__((noreturn))
#define NO_REORDER   __attribute__((no_reorder))
#define SECTION_DATA __attribute__((section(".data")))

#ifdef __GNUC__
#define UNREACHABLE() __builtin_unreachable()
#else
#define UNREACHABLE()
#endif

// Variables may be unused in retail versions but used in debug versions
#if DEBUG_FEATURES
#define UNUSED_NDEBUG
#else
#define UNUSED_NDEBUG UNUSED
#endif

#endif