* src/blake2/blake2.h (BLAKE2_PACKED):
Don’t assume __attribute__ ((packed)) works on non-Microsoft
compilers. Instead, assume it works only if we have good
reason to assume so, and fall back on Microsoft (or not packing)
otherwise. In practice, not packing is good enough and the
BLAKE2_PACKED macro is mostly just for documentation.
#include <stddef.h>
#include <stdint.h>
-#if defined(_MSC_VER)
-#define BLAKE2_PACKED(x) __pragma(pack(push, 1)) x __pragma(pack(pop))
-#else
-#define BLAKE2_PACKED(x) x __attribute__((packed))
+#ifdef __has_attribute
+# if __has_attribute (packed)
+# define BLAKE2_PACKED(x) x __attribute__ ((packed))
+# endif
+#endif
+#if !defined BLAKE2_PACKED && defined _MSC_VER
+# define BLAKE2_PACKED(x) __pragma (pack (push, 1)) x __pragma (pack (pop))
+#endif
+#ifndef BLAKE2_PACKED
+/* This should be good enough on other platforms.
+ If it's not good on yours, please file a bug report. */
+# define BLAKE2_PACKED(x) x
#endif
#if defined(__cplusplus)