Index: configure.ac ================================================================== --- configure.ac +++ configure.ac @@ -360,10 +360,13 @@ size_max="(~(size_t)0)" ]) AC_DEFINE_UNQUOTED(SIZE_MAX, $size_max, [Maximum value for size_t]) ]) +AC_CHECK_TYPE(max_align_t, + [AC_DEFINE(OF_HAVE_MAX_ALIGN_T, 1, [Whether we have max_align_t])]) + AC_CHECK_SIZEOF(float) AC_CHECK_SIZEOF(double) AS_IF([test x"$ac_cv_sizeof_float" != x"4" -o x"$ac_cv_sizeof_double" != x"8"], [AC_MSG_ERROR( [Floating point implementation does not conform to IEEE 754!])]) Index: src/OFObject.m ================================================================== --- src/OFObject.m +++ src/OFObject.m @@ -81,15 +81,15 @@ struct pre_mem *prev, *next; id owner; }; #define PRE_IVARS_ALIGN ((sizeof(struct pre_ivar) + \ - (__BIGGEST_ALIGNMENT__ - 1)) & ~(__BIGGEST_ALIGNMENT__ - 1)) + (OF_BIGGEST_ALIGNMENT - 1)) & ~(OF_BIGGEST_ALIGNMENT - 1)) #define PRE_IVARS ((struct pre_ivar*)(void*)((char*)self - PRE_IVARS_ALIGN)) #define PRE_MEM_ALIGN ((sizeof(struct pre_mem) + \ - (__BIGGEST_ALIGNMENT__ - 1)) & ~(__BIGGEST_ALIGNMENT__ - 1)) + (OF_BIGGEST_ALIGNMENT - 1)) & ~(OF_BIGGEST_ALIGNMENT - 1)) #define PRE_MEM(mem) ((struct pre_mem*)(void*)((char*)mem - PRE_MEM_ALIGN)) static struct { Class isa; } allocFailedException; Index: src/macros.h ================================================================== --- src/macros.h +++ src/macros.h @@ -51,13 +51,19 @@ # define OF_BYTE_ORDER_NATIVE OF_BYTE_ORDER_BIG_ENDIAN #else # define OF_BYTE_ORDER_NATIVE OF_BYTE_ORDER_LITTLE_ENDIAN #endif -/* Hopefully no arch needs more than 16 bytes padding */ -#ifndef __BIGGEST_ALIGNMENT__ -# define __BIGGEST_ALIGNMENT__ 16 +#if __STDC_VERSION__ >= 201112L && defined(OF_HAVE_MAX_ALIGN_T) +# define OF_BIGGEST_ALIGNMENT _Alignof(max_align_t) +#else +# ifdef __BIGGEST_ALIGNMENT__ +# define OF_BIGGEST_ALIGNMENT __BIGGEST_ALIGNMENT__ +# else +# /* Hopefully no arch needs more than 16 bytes padding */ +# define OF_BIGGEST_ALIGNMENT 16 +# endif #endif #ifdef __GNUC__ # if defined(__amd64__) || defined(__x86_64__) # define OF_AMD64_ASM Index: src/objfw-defs.h.in ================================================================== --- src/objfw-defs.h.in +++ src/objfw-defs.h.in @@ -7,10 +7,11 @@ #undef OF_HAVE_CHOWN #undef OF_HAVE_COMPILER_TLS #undef OF_HAVE_FORWARDING_TARGET_FOR_SELECTOR #undef OF_HAVE_GCC_ATOMIC_OPS #undef OF_HAVE_LINK +#undef OF_HAVE_MAX_ALIGN_T #undef OF_HAVE_OSATOMIC #undef OF_HAVE_OSATOMIC_64 #undef OF_HAVE_PIPE #undef OF_HAVE_PLUGINS #undef OF_HAVE_PROCESSES