/*
- * Copyright (c) 2008, 2009, 2010, 2011, 2012 Nicira, Inc.
+ * Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2019 Nicira, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
#ifndef COMPILER_H
#define COMPILER_H 1
+#include "openvswitch/compiler.h"
+
#if __GNUC__ && !__CHECKER__
-#define NO_RETURN __attribute__((__noreturn__))
-#define OVS_UNUSED __attribute__((__unused__))
-#define PRINTF_FORMAT(FMT, ARG1) __attribute__((__format__(printf, FMT, ARG1)))
#define STRFTIME_FORMAT(FMT) __attribute__((__format__(__strftime__, FMT, 0)))
#define MALLOC_LIKE __attribute__((__malloc__))
#define ALWAYS_INLINE __attribute__((always_inline))
-#define WARN_UNUSED_RESULT __attribute__((__warn_unused_result__))
#define SENTINEL(N) __attribute__((sentinel(N)))
#else
-#define NO_RETURN
-#define OVS_UNUSED
-#define PRINTF_FORMAT(FMT, ARG1)
#define STRFTIME_FORMAT(FMT)
#define MALLOC_LIKE
#define ALWAYS_INLINE
-#define WARN_UNUSED_RESULT
#define SENTINEL(N)
#endif
-/* ISO C says that a C implementation may choose any integer type for an enum
- * that is sufficient to hold all of its values. Common ABIs (such as the
- * System V ABI used on i386 GNU/Linux) always use a full-sized "int", even
- * when a smaller type would suffice.
- *
- * In GNU C, "enum __attribute__((packed)) name { ... }" defines 'name' as an
- * enum compatible with a type that is no bigger than necessary. This is the
- * intended use of OVS_PACKED_ENUM.
- *
- * OVS_PACKED_ENUM is intended for use only as a space optimization, since it
- * only works with GCC. That means that it must not be used in wire protocols
- * or otherwise exposed outside of a single process. */
-#if __GNUC__ && !__CHECKER__
-#define OVS_PACKED_ENUM __attribute__((__packed__))
+/* Output a message (not an error) while compiling without failing the
+ * compilation process */
+#if HAVE_PRAGMA_MESSAGE && !__CHECKER__
+#define DO_PRAGMA(x) _Pragma(#x)
+#define BUILD_MESSAGE(x) \
+ DO_PRAGMA(message(x))
#else
-#define OVS_PACKED_ENUM
+#define BUILD_MESSAGE(x)
#endif
#endif /* compiler.h */